Minu kolleeg töötanud veebiosa FBA keskkond. Muu hulgas, veebiosa tõmbab osa andmeid SQL Serverist. Grand kava projektile dikteerib, et mõne DBA seadistab SQL andmete turvalisus (Erinevalt manustamine kasutaja ID SQL päring või mõne muu lähenemine).
Probleem on selles, et SQL server ei tea midagi meie FBA keskkonda nii, et see meid ei saa usaldada. Oleme lahendanud selle probleemi poolt, puudumise tõttu parem sõna, käsitsi kehastamine AD kasutaja, nii et me ühendust SQL selliselt, et SQL andmete tasand julgeolekut tööde.
Kuigi FBA on ASP.net-i funktsioon, Meie SharePoint rahvas inimesed õpetanud ka erinevad otsingumootorid seda kui FBA jaoks päringu sihiks, sa mõtled, sa tahad teada, kuidas konfigureerida FBA SharePointi. Ma ei suutnud leida teavet, kuidas võimaldada ka FBA orienteeritud ASP.net-i rakenduse SQL suhelda nii, meil oli vaja leida.
Uurides seda käigus, Me uuesti lugeda see artikkel: ASP.net-i isikustamine
Täiendavad uuringud viinud meid jΣrg codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Mis aitas meil kirjutada meie kood, mis ma olen ka allpool. See ei ole kõige elegantsem värk, Aga see töötas. Loodan, et te seda kasulikuks.
Siin on kood, mis töötas meie:
kaitstud tühine btnSearchCarrier_Click(objekti saatja, EventArgs e) { Proovige { ImpersonateUser iU = Uus ImpersonateUser(); // TODO: Asenda mandaat iU.Impersonate("Domeeninimi", "Kasutajanimi", "Password"); // KOOD // iU.Undo(); } saak (Erand ex) { } } // Kasutades matkiminen klass allpool nimetatud. avalik klass ImpersonateUser { [DllImport("advapi32.dll", SetLastError = True)] avalik staatiline Extern bool LogonUser( String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, REF IntPtr phToken); [DllImport("failidest kernel32.dll", CharSet = CharSet.Auto)] erasektori Extern staatiline bool CloseHandle(IntPtr käepide); erasektori staatiline IntPtr tokenHandle = Uus IntPtr(0); erasektori staatiline WindowsImpersonationContext impersonatedUser; // Kui see kood lisada DLL, Veenduge, et nõuda, et see // töötab FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Nimi = "FullTrust")] avalik tühine Impersonate isikusta(string domeeninimi, string kasutajanimi, string parooli) { Proovige { // Saad kasutaja token puhul haldamata LogonUser funktsiooni abil // määratud kasutajale, domeen, ja parool. konstant int LOGON32_PROVIDER_DEFAULT = 0; // See parameeter möödaminnes põhjustab LogonUser luua esmane luba. konstant int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Samm -1 Helista LogonUser pideme hankimine loaga. bool returnValue = LogonUser( Kasutajanimi, Domeeninimi, parooli, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, REF tokenHandle); // tokenHandle - uue turvaloa Kui (FALSE == returnValue) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser kutse nurjus tõrkekoodiga : " + Ret); viska Uus System.ComponentModel.Win32Exception(Ret); } // Samm - 2 WindowsIdentity newId = Uus WindowsIdentity(tokenHandle); // Samm -3 impersonatedUser = newId.Impersonate(); } saak (Erand ex) { Console.WriteLine("Ilmnes erand. " + ex.Sõnumi); } } /// <Kokkuvõte> /// Peatuste isikustamine /// </Kokkuvõte> avalik tühine tagasivõtmine() { impersonatedUser.Undo(); // Tasuta selle sυna. Kui (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</lõpp>