Môj kolega pracuje na webovú časť v prostredí FBA. Okrem iného, Webová časť ťahá niektoré údaje zo servera SQL server. Veľký plán pre tento projekt diktuje, že DBA nastaví úroveň bezpečnosti údajov SQL (na rozdiel od vkladania ID užívateľa v SQL dotazu alebo nejaký iný prístup).
Problém je, že server SQL server nevie nič o našom životnom prostredí FBA tak to nemôže dôverovať. Môžeme vyriešiť tento problém, pre nedostatok lepšieho slová, manuálne zosobnenie používateľa reklamy tak, aby sme mohli spojiť SQL tak, že dát SQL úroveň bezpečnosti práce.
Hoci FBA je funkcia ASP.NET, sme národ SharePoint ľudí učil rôznych vyhľadávačov, že ak hľadanej pre FBA, chcete povedať, chcete vedieť, ako nastaviť FBA v službe SharePoint. Nepodarilo sa mi nájsť nájsť žiadne informácie o tom, ako povoliť FBA orientované ASP.NET aplikácie komunikovať s SQL spôsobom sme potrebovali.
Pri skúmaní tohto, sme re-si prečítajte tento článok: ASP.NET zosobnenie
Ďalší výskum viedol nás na tento článok codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
Ktoré nám pomohol napísať náš kód, ktoré som zahrnutá pod. To nie je najelegantnejší veci, ale to fungovalo. Dúfam, že vám nájsť užitočné.
Tu je kód, ktorý pracoval pre nás:
protected neplatné btnSearchCarrier_Click(objekt odosielateľa, EventArgs e) { skúste { ImpersonateUser iU = nové ImpersonateUser(); // TODO: Nahradiť poverenia iU.Impersonate("DomainName", "Užívateľské meno", "Heslo"); // KÓD // iU.Undo(); } chytiť (Výnimkou ex) { } } // Pomocou zosobnenie triedy, ako je uvedené nižšie. verejné trieda ImpersonateUser { [DllImport("Advapi32.dll, ak ide", SetLastError = pravda)] verejné statické externé Položka LogonUser bool( Reťazec lpszUsername, Reťazec lpszDomain, Reťazec lpszPassword, int dwLogonType, int dwLogonProvider, odkaz IntPtr phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] súkromné externé statické bool CloseHandle(IntPtr rukoväť); súkromné statické IntPtr tokenHandle = nové IntPtr(0); súkromné statické WindowsImpersonationContext impersonatedUser; // Ak ste začleniť tento kód do knižnice DLL, Uistite sa, požadovať, aby // pracuje s FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Meno = "FullTrust")] verejné neplatné zosobniť(reťazec domainName, reťazec užívateľské meno, reťazec heslo) { skúste { // Použite funkciu nespravované Položka LogonUser získať token pre používateľa // určený používateľ, domény, a heslo. CONST int LOGON32_PROVIDER_DEFAULT = 0; // Absolvovanie tohto parametra spôsobuje Položka LogonUser vytvoriť primárny token. CONST int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Krok -1 Balíčkoch získať popisovač prístupového tokenu. bool returnValue = Položka LogonUser( užívateľské meno, domainName, heslo, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle); // tokenHandle - nový token zabezpečenia Ak (falošné == returnValue) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("Položka LogonUser volanie zlyhalo s kódom chyby : " + ret); throw nové System.ComponentModel.Win32Exception(ret); } // Krok - 2 WindowsIdentity newId = nové WindowsIdentity(tokenHandle); // Krok -3 impersonatedUser = newId.Impersonate(); } chytiť (Výnimkou ex) { Console.WriteLine("Sa vyskytla výnimka. " + ex.Správu); } } /// <Zhrnutie> /// Zastaví zosobnenie /// </Zhrnutie> verejné neplatné späť() { impersonatedUser.Undo(); // Voľný žetóny. Ak (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</koniec>