FBA i SQL Server: Una història d'amor

El meu col lega ha estat treballant en un element web a un entorn FBA. Entre altres coses, l'element web tira algunes dades de servidor SQL. El gran pla per a aquest projecte dicta que un DBA configura la seguretat de nivell de dades en SQL (en lloc d'incrustar un Windows Live ID en una consulta SQL o algun altre enfocament).

El problema és que servidor SQL no es sap alguna cosa sobre el nostre entorn FBA així que no puc confiar en nosaltres. Hem resolt aquest problema per, per falta d'una paraula millor, un usuari d'AD manualment infiltrat per tal que es podria connectar a SQL tal que obres de seguretat de nivell de dades SQL.

Encara que FBA és una característica de l'ASP.NET, persones SharePoint Nation ens han ensenyat els diversos motors de cerca que si tu estàs consultant per FBA, vostè ha de significar que volen saber com configurar FBA en SharePoint. No vaig poder trobar trobar qualsevol informació sobre com habilitar un FBA orientat a l'aplicació de l'ASP.NET comunicar-se amb SQL de la manera que necessitàvem.

En el curs d'investigar això, vam tornar a llegir aquest article: Suplantació d'identitat de l'ASP.NET

Més recerca ens va portar a aquest article de codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Que va ajudar a nosaltres escriure el nostre codi, que he inclòs per sota. No és la matèria més elegant, però funcionava. Espero que li resulta útil.

Aquí és el codi que treballava per a nosaltres:

protegit btnSearchCarrier_Click de buit(emissor objecte, EventArgs e)
 {
 Provi
 {
 ImpersonateUser iU = nou ImpersonateUser();
 // TODO: Substituir les credencials iU.Impersonate("NombreDeDominio", "Usuari", "Contrasenya");

//
 CODI
//

 iU.Undo();
 }
 trampa (Excepció ex)
 {

 }
 }

// Utilitzant classe de suplantació d'identitat com esmentades sota.

públic classe ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = True)]
 públic estàtica extern bool LogonUser(
 Corda lpszUsername,
 Corda lpszDomain,
 Corda lpszPassword,
 Int dwLogonType,
 Int dwLogonProvider,
 Ref IntPtr phToken);

 [DllImport("kernel32", CharSet = CharSet.Auto)]
 privat extern estàtica bool CloseHandle(Nansa de IntPtr);

 privat estàtica IntPtr tokenHandle = nou IntPtr(0);
 privat estàtica WindowsImpersonationContext impersonatedUser;

 // Si vostè incorporar aquest codi en un fitxer DLL, Assegureu-vos que la demanda
 // funciona amb FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Nom = "FullTrust")]
 públic Impersonate de buit(corda nombreDeDominio, nom d'usuari de corda, contrasenya de corda)
 {
 Provi
 {

 // Utilitzeu la funció LogonUser no administrat per aconseguir fitxa per l'usuari
 // l'usuari especificat, domini, i la contrasenya.
 Const Int LOGON32_PROVIDER_DEFAULT = 0;

 // Passant aquest paràmetre provoca LogonUser crear una fitxa primària.
 Const Int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Pas -1 Trucar a LogonUser per obtenir una maneta a un testimoni d'accés.
 bool returnValue = LogonUser(
 nom d'usuari,
 nombreDeDominio,
 contrasenya,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 Ref tokenHandle); // tokenHandle - nou testimoni de seguretat

 Si (fals = = returnValue)
 {
 Int ret = Marshal.GetLastWin32Error();
 Console.WriteLine("Crida LogonUser fallava amb el codi d'error : " +
 ret);
 tir System.ComponentModel nou.Win32Exception(ret);
 }

 // Pas - 2
 WindowsIdentity newId = nou WindowsIdentity(tokenHandle);
 // Pas -3
 impersonatedUser = newId.Impersonate();

 }
 trampa (Excepció ex)
 {
 Console.WriteLine("Excepció ocorria. " + ex.Missatge);
 }
 }


 /// <resum>
 /// Parades suplantació d'identitat
 /// </resum>
 públic Desfés buit()
 {
 impersonatedUser.Undo();
 // Lliure de les fitxes.
 Si (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</final>

Subscriure's al meu blog.

Etiquetas de Technorati:

Un comentari a "FBA i SQL Server: Una història d'amor

  1. David aviat
    Trist per enviar això pregunta inconnex però no podria imaginar com enviar-vos un correu electrònic d'aquest blog.
    Tenia un post anterior, on li ofereixen una gran manera de filtrar una biblioteca per visualitzar dades sense etiquetar. Té algunes idees sobre com podria veure una llista de sense etiquetar documents en una biblioteca de document sencer? Utilitzant el camp en blanc a la cerca avançada no obtindreu cap resultat.
    Resposta

Deixi una contestació

no es publicarà la seva adreça de correu electrònic. Els camps necessaris estan marcats *