FBA a SQL Server: Milostný příběh

Můj kolega pracuje na webové části v prostředí FBA. Mimo jiné, Webová část táhne některá data ze serveru SQL server. Velký plán pro tento projekt diktuje, že DBA nastaví úroveň zabezpečení dat v SQL (na rozdíl od vložení ID uživatele v SQL dotazu, nebo nějaké jiné přístup).

Problém je, že SQL server neví nic o našem FBA prostředí tak to nám nemůže věřit. Jsme vyřešili tento problém, pro nedostatek lepšího slova, ručně zosobnění uživatele AD, tak, že jsme se mohli připojit k SQL tak, aby SQL data na úrovni bezpečnosti práce.

I když FBA je funkce technologie ASP.NET, jsme národ SharePoint lidi učil různé vyhledávače, je-li hledané pro FBA, musí znamenat, že chcete vědět, jak konfigurovat FBA ve službě SharePoint. Jsem se nepodařilo najít najít veškeré informace týkající se povolení FBA orientované prostředí ASP.NET aplikace komunikovat s SQL ve způsobu, jakým jsme potřebovali.

Při zkoumání to, jsme re-četl tento článek: Prostředí ASP.NET zosobnění

Další výzkum nás vedly k tomuto článku codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

To nám pomohl napsat náš kód, což jsem uvedeny níže. Není to elegantní věci, ale fungovalo to. Doufám, že bude užitečné.

Zde je kód, který pracoval pro nás:

chráněná void btnSearchCarrier_Click(objektu odesílatele, EventArgs e)
 {
 zkusit
 {
 ImpersonateUser iU = nové ImpersonateUser();
 // TODO: Nahradit pověření iU.Impersonate("Název domény", "Uživatelské jméno", "Heslo");

//
 KÓD
//

 iU.Undo();
 }
 Catch (Výjimka ex)
 {

 }
 }

// Pomocí zosobnění třídy, jak je uvedeno níže.

veřejné Třída ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = pravda)]
 veřejné statický extern bool LogonUser(
 Řetězec lpszUsername,
 Řetězec lpszDomain,
 Řetězec lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 ref IntPtr phToken);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 soukromé extern statický bool CloseHandle(IntPtr popisovač);

 soukromé statický IntPtr tokenHandle = nové IntPtr(0);
 soukromé statický WindowsImpersonationContext impersonatedUser;

 // Je-li začlenit tento kód do knihovny DLL, Ujistěte se, že požadovat, aby
 // spustí s FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Jméno = "FullTrust")]
 veřejné void zosobnit(název_domény řetězec, řetězec uživatelské jméno, řetězec hesla)
 {
 zkusit
 {

 // Nespravovaná LogonUser funkci použít k získání tokenu pro uživatele
 // Zadaný uživatel, doména, a heslo.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // Tento parametr způsobí LogonUser k vytvoření primární token.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Krok -1 Volejte LogonUser získat popisovač token přístupu.
 bool returnValue = LogonUser(
 uživatelské jméno,
 název_domény,
 heslo,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 ref tokenHandle); // tokenHandle - nový token zabezpečení

 Pokud (false == returnValue)
 {
 Vrácená hodnota: int = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser volání se nezdařilo s kódem chyby. : " +
 ret);
 hod nové System.ComponentModel.Win32Exception(ret);
 }

 // Krok - 2
 WindowsIdentity newId = nové WindowsIdentity(tokenHandle);
 // Krok -3
 impersonatedUser = newId.Impersonate();

 }
 Catch (Výjimka ex)
 {
 Console.WriteLine("Došlo k výjimce. " + ex.Zpráva);
 }
 }


 /// <Shrnutí>
 /// Zastaví zosobnění
 /// </Shrnutí>
 veřejné void zpět()
 {
 impersonatedUser.Undo();
 // Zdarma tokeny.
 Pokud (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</Konec>

Přihlásit se na mém blogu.

Doplněk Technorati značky:

Jeden myslel na „FBA a SQL Server: Milostný příběh

  1. David brzy
    Litující čeho postilion tato nesouvisející otázka, ale já nemohl přijít na to, jak poslat e-mail z tohoto blogu.
    Jste měli předchozí příspěvek, kde nabízí skvělý způsob, jak filtrovat knihovnu zobrazíte netagovanými daty. Máte nějaké nápady, jak může zobrazit seznam netagovaných dokumentů v knihovně dokumentů celý? Prázdné pole v rozšířeném hledání nevrátí žádné výsledky.

Zanech odpověď

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *