asp.net active-directory membership provider

Proveedor de membresía de Active Directory ASP.NET y proveedor de perfiles SQL



active-directory membership (4)

Actualmente estoy diseñando un esquema de Membresía / Perfil para un nuevo proyecto en el que estoy trabajando y esperaba recibir información de otros.

El proyecto es una aplicación web ASP.NET y debido al corto período de tiempo, estoy tratando de usar todos los componentes de .NET Framework que pueda. El sitio probablemente entretendrá a <5000 usuarios. Cada usuario tendrá un perfil donde las configuraciones personalizadas y los objetos se conservarán entre las visitas.

Estoy obligado a usar un Active Directory existente para la autenticación. Dado que el esquema de AD no se puede ampliar para contener nuevos campos, se requiere que guarde la configuración y los objetos del usuario en un almacén de datos diferente. También me han dicho que ADAM probablemente no sea una solución posible.

Esperaba utilizar el proveedor de membresía de Active Directory para mi esquema de autenticación y el proveedor de perfiles de SQL como un almacén de datos de perfil de usuario. Preferiría no crear un proveedor de perfil personalizado, pero no veo que esto suponga un gran problema si es necesario.

Me preguntaba si esto es siquiera una solución posible, y si es así, alguien ha tenido suerte con este enfoque.

Cualquier comentario sería muy apreciado.

Gracias.


Además de esto como lo responde Marc:

<add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.3600, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

Es posible que también necesite agregar

connectionStringName="ADService", attributeMapUsername="sAMAccountName"

con la cadena de conexión correspondiente

<connectionStrings> <add name="ADService" connectionString="LDAP://ServerIP" /> </connectionStrings>

Si está utilizando .net 4.0, deberá reemplazar

Version=2.0.3600

con

Version=4.0.0.0

Así que finalmente ,

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider"> <providers> <add name="AspNetActiveDirectoryMembershipProvider" connectionStringName="ADService" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" attributeMapUsername="sAMAccountName"/> </providers> </membership>

y como se establece como predeterminado, puede ser referenciado como:

MembershipProvider provider = Membership.Provider;


En primer lugar, nunca he hecho esto yo mismo.

Hay una serie realmente excelente (¡14 partes!) Sobre todo el tema de la membresía, los roles y los sistemas de perfil de ASP.NET 2.0 por Scott Mitchell en 4 Guys de Rolla .

Según mi entendimiento, deberías poder configurar este comportamiento que estás buscando usando básicamente estas dos secciones en tu web.config:

<!-- configure Active Directory membership provider --> <membership defaultProvider="AspNetActiveDirectoryMembershipProvider"> <providers> <add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.3600, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </membership> <!-- configure SQL-based profile provider --> <profile defaultProvider="SqlProvider"> <providers> <add name="SqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="SqlProfileProviderConnection" applicationName="YourApplication" /> </providers> <!-- specify any additional properties to store in the profile --> <properties> <add name="ZipCode" /> <add name="CityAndState" /> </properties> </profile>

Pensaría que esto debería funcionar :-)


Estoy usando Visual Studio 2012 y traté de hacer lo sugerido, pero se muestra un error:

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

Así que descubrí que se deberían hacer algunos cambios en el formulario de inicio de sesión predeterminado en el VS2012 con MVC 4 y el marco de la entidad de la siguiente manera:

En el archivo "AccountController.cs"

en el "inicio de sesión público de ActionResult (modelo LoginModel, string returnUrl)"

Cambiar el

if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))

para

if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password))

en el "ActionResult LogOff público ()"

Cambiar el

WebSecurity.Logout();

para

FormsAuthentication.SignOut();

y agregue lo siguiente: FormsAuthentication.SetAuthCookie (model.UserName, false);

public ActionResult Login(LoginModel model, string returnUrl) { if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password)) { FormsAuthentication.SetAuthCookie(model.UserName, false); return RedirectToLocal(returnUrl); } // If we got this far, something failed, redisplay form ModelState.AddModelError("", "The user name or password provided is incorrect."); return View(model); }


Gracias por la información, ha ayudado mucho. También en lugar de establecer el proveedor predeterminado con MembershipProvider provider = Membership.Provider; Puedes configurarlo con la etiqueta de membresía.

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

También he escrito un pequeño ejemplo de cómo hacerlo y una descarga a Visual Studio Project y Source configurados para usar AspNetActiveDirectoryMembershipProvider.

Autenticación basada en formularios ASP.NET - usando AspNetActiveDirectoryMembershipProvider