FBA a SQL Server: Milostný príbeh

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>

Vyberajte môj blog.

Technorati Tags:

Jeden myslel na "FBA a SQL Server: Milostný príbeh

  1. David čoskoro
    Ospravedlňujeme sa za toto vysielanie nesúvisiace otázka, ale nemohol prísť na to, ako poslať e-mail z tohto blogu.
    Ste mal Predchádzajúci príspevok, kde vám ponúka skvelý spôsob, ako filtrovať knižnice netagované údaje. Máte akékoľvek myšlienky o tom, ako možno zobraziť zoznam netagovaných dokumentov v knižnici celý dokument? Prázdne pole v pokročilé vyhľadávanie nevrátilo žiadne výsledky.
    Odpoveď

nechať odpoveď

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *