Moj kolega je delal na spletni gradnik v okolju FBA. Med drugim, spletni gradnik potegne nekaj podatkov iz strežnika SQL. Veliki načrt za ta projekt narekuje, da DBA konfigurira raven varnosti podatkov v SQL (v nasprotju z vdelavo ID uporabnika v SQL poizvedbi ali neki drug pristop).
Problem je, da ne SQL strežnik ve ničesar o našem okolju FBA tako da ne more zaupati nam. Smo rešili ta problem, ki ga, zaradi pomanjkanja boljša beseda, ročno pooseblja oglas uporabnika, tako da smo lahko povežete SQL, tako da podatkov SQL ravni varnosti dela.
Čeprav FBA je funkcija ASP.NET, smo SharePoint Nation ljudje so poučevali različnih iskalniki, če poizvedujete za FBA, vi podel, boste želeli vedeti, kako nastaviti FBA v SharePoint. I uspelo najti najti vse informacije o tem, kako omogočiti je FBA usmerjeno uporabo ASP.NET komunicirati z MSSQL na način, ki smo potrebovali.
Pri raziskovanju tega, smo ponovno prebrati ta članek: ASP.net poosebljanja
Več raziskav je nas je privedla do članek codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Da nam pišete naša koda, ki sem vključen pod. To ni najbolj elegantno stvari, šele to obdelan. Upam, da boste našli koristne.
Tukaj je koda, ki je delal za nas:
zaščiteni Neveljaven btnSearchCarrier_Click(Object sender, Črka e) { poskusite { ImpersonateUser IE = nove ImpersonateUser(); // TODO: Nadomestiti iU.Impersonate poverilnice("Imedomene", "Uporabniško ime", "Geslo"); // ZBORNIK // iU.Undo(); } ulova (Izjema ex) { } } // Z uporabo poosebitve razred, kot je navedeno spodaj. javnih razred ImpersonateUser { [DllImport("advapi32.dll", SetLastError = True)] javnih statična extern bool LogonUser( Niz lpszUsername, Niz lpszDomain, Niz lpszPassword, int dwLogonType, int dwLogonProvider, Ref IntPtr phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] zasebno extern statična bool »CloseHandle«(IntPtr ročaj); zasebno statična IntPtr tokenHandle = nove IntPtr(0); zasebno statična WindowsImpersonationContext impersonatedUser; // Če ste vključi to zbornik v DLL, Bodite prepričani, da zahteva, da // deluje z FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Ime = "FullTrust")] javnih neveljavne poosebi(niz imedomene, niz uporabniško ime, niz geslo) { poskusite { // S funkcijo neupravljanih LogonUser zadobiti uporabnik žetona za // navedeni uporabnik, domene, in geslo. CONST int LOGON32_PROVIDER_DEFAULT = 0; // Poteka ta parameter povzroča LogonUser ustvariti primarnega žetona. CONST int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Korak -1 Klic LogonUser dobiti kode za dostop do dostopni žeton. bool returnValue = LogonUser( uporabniško ime, Ime_domene, geslo, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Ref tokenHandle); // tokenHandle - nov varnostni žeton Če (False == returnValue) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser klic ni uspel s kodo napake : " + RET); vrzi nov System.ComponentModel.Win32Exception(RET); } // Korak - 2 WindowsIdentity newId = nove WindowsIdentity(tokenHandle); // Korak -3 impersonatedUser = newId.Impersonate(); } ulova (Izjema ex) { Console.WriteLine("Exception occurred. " + ex.Sporočilo); } } /// <povzetek> /// Ustavi poosebljanja /// </povzetek> javnih neveljavne razveljavi() { impersonatedUser.Undo(); // Prosti žetoni. Če (tokenHandle != IntPtr.Zero) »CloseHandle «:(tokenHandle); } }
</namen>