FBA и SQL Server: Една любовна история

Моят колега е бил на работа на уеб компонент в FBA среда. Наред с други неща, уеб частта дърпа някои данни от SQL server. Великото план за този проект, диктува, че DBA конфигурира данни ниво на сигурност в SQL (за разлика от вграждането на ИД на потребител в SQL заявка или някои друг подход).

Проблемът е, че SQL server не знае нищо за нашата FBA среда, така че не може да ни се доверите. Ние решават този проблем чрез, поради липса на по-добра дума, ръчно представя потребител на реклама, така че ние може да се свърже към SQL, такива, че SQL данни ниво сигурност работи.

Въпреки че FBA е функция на ASP.NET, Ние SharePoint нация хора учат различни търсачки, ако вие сте заявки за FBA, Вие трябва да означава ли, че знаят как да конфигурирате FBA в SharePoint. Аз не успя да намери Намерете всякаква информация за това как да разрешите FBA ориентирани ASP.NET приложение да комуникира с SQL в начина, по който трябваше.

В хода на това проучване, Ние отново прочетете тази статия: ASP.NET персонификация

Повече изследвания ни доведе до тази codproject статия: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Това ни помогна да напиша нашия код, които сте включени по-долу. Това не е най-елегантната неща, но тя работи. Надявам се да е полезно.

Тук е кодът, който работи за нас:

защитен невалидни btnSearchCarrier_Click(обект подател, EventArgs e)
 {
 Опитайте
 {
 ImpersonateUser iU = нов ImpersonateUser();
 // TODO: Замени идентификационни данни iU.Impersonate("DomainName", "Потребителско име", "Парола");

//
 КОД
//

 iU.Undo();
 }
 улова (Изключение ex)
 {

 }
 }

// Въплъщаване класа, както е посочено по-долу.

обществени клас ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = вярно)]
 обществени статични ученик BOOL LogonUser(
 Низ lpszUsername,
 Низ lpszDomain,
 Низ lpszPassword,
 INT dwLogonType,
 INT dwLogonProvider,
 Ref IntPtr phToken);

 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 частни ученик статични BOOL CloseHandle(IntPtr дръжка);

 частни статични IntPtr tokenHandle = нов IntPtr(0);
 частни статични WindowsImpersonationContext impersonatedUser;

 // Ако включите този код в DLL, не забравяйте да поиска че тя
 // работи с FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Име = "FullTrust")]
 обществени невалидни чужда самоличност(низ domainName, низ потребителско име, низ парола)
 {
 Опитайте
 {

 // Използвайте функцията за незавършено LogonUser да получите на потребителя за
 // Указаният потребител, домейн, и парола.
 CONST INT LOGON32_PROVIDER_DEFAULT = 0;

 // Преминаване на този параметър причинява LogonUser да създадете първичен маркер.
 CONST INT LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Стъпка -1 Покана LogonUser да получите манипулатор, за да маркер за достъп.
 BOOL returnValue = LogonUser(
 потребителско име,
 domainName,
 парола,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 Ref tokenHandle); // tokenHandle - нов маркер за защита

 Ако (FALSE == returnValue)
 {
 INT ret = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser викам не сполучвам с грешка кодекс : " +
 RET);
 хвърлят Нова System.ComponentModel.Win32Exception(RET);
 }

 // Стъпка - 2
 WindowsIdentity newId = нов WindowsIdentity(tokenHandle);
 // Стъпка -3
 impersonatedUser = newId.Impersonate();

 }
 улова (Изключение ex)
 {
 Console.WriteLine("Възникна изключение. " + ех.Съобщение);
 }
 }


 /// <Резюме>
 /// Спира въплъщаване
 /// </Резюме>
 обществени невалидни отмени()
 {
 impersonatedUser.Undo();
 // Безплатно символи.
 Ако (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</край>

Абонирайте се за моя блог.

Technorati тагове:

Една мисъл на тема "FBA и SQL Server: Една любовна история

  1. David рано
    За съжаление за публикуване това несвързани въпрос, но аз не можех да разбера как да ви изпратим имейл от този блог.
    Сте имали предишен пост където ви предлага чудесен начин за филтриране на библиотеката, за да видите немаркирани данни. Имате ли някакви мисли, как може да разглеждате списък на немаркирани документи в целия документ библиотека? Използване на празно поле в Разширено търсене не върне никакви резултати.

Оставете отговор

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани *