Estoy desarrollando una aplicación MVC3 que requerirá que un usuario sea autenticado contra un AD. Sé que existe la opción en MVC3 de crear una Aplicación de Intranet que autentique automáticamente a un usuario contra un AD, pero usa la Autenticación de Windows y los inicia automáticamente. Se puede acceder a esta aplicación en estaciones de trabajo 'Abiertas' donde el usuario deberá ingresar su Nombre de usuario y Contraseña de Dominio. Cualquier ejemplo o tutorial en línea sería genial. Un proyecto de ejemplo sería excepcional.ASP.NET MVC - Autentica a los usuarios contra Active Directory, pero requiere que ingresen el nombre de usuario y la contraseña
Respuesta
Usted puede utilizar la plantilla de aplicación de Internet estándar con la autenticación de formularios e insertar un ActiveDirectoryMembershipProvider
en el web.config
:
<connectionStrings>
<add name="ADConnectionString" connectionString="LDAP://YOUR_AD_CONN_STRING" />
</connectionStrings>
<system.web>
<authentication mode="Forms">
<forms name=".ADAuthCookie" loginUrl="~/Account/LogOn"
timeout="15" slidingExpiration="false" protection="All" />
</authentication>
<membership defaultProvider="MY_ADMembershipProvider">
<providers>
<clear />
<add name="MY_ADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider"
connectionStringName="ADConnectionString"
attributeMapUsername="sAMAccountName" />
</providers>
</membership>
</system.web>
De esta manera se obtiene la forma de la plantilla de inicio de sesión de aplicaciones de Internet, y se valida contra la AD para usted.
Luego es solo una cuestión de limpieza AccountController
para eliminar la contraseña de restablecer/cambiar la contraseña/registrar la funcionalidad que acaba de entrar.
Como se mencionó anteriormente, puede usar el proveedor de membresía definido en el archivo web.config.
El siguiente código está dentro de la aplicación de la 'AccountController' a partir del código de plantilla MVC 3 y ha sido ligeramente modificado para trabajar con ActiveDirectory:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if(ModelState.IsValid)
{
// Note: ValidateUser() performs the auth check against ActiveDirectory
// but make sure to not include the Domain Name in the User Name
// and make sure you don't have the option set to use Email Usernames.
if(MembershipService.ValidateUser(model.UserName, model.Password))
{
// Replace next line with logic to create FormsAuthenticationTicket
// to encrypt and return in an Http Auth Cookie or Session Cookie
// depending on the 'Remember Me' option.
//FormsService.SignIn(model.UserName, model.RememberMe);
// Fix this to also check for other combinations/possibilities
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
Si se utiliza .NET 3.5 - sigue leyendo para this article la alternativa:
Creo que debería ser Membership.ValidateUser en lugar de MembershipService.ValidateUser – r03
cpoDesign probablemente esté utilizando su propio servicio para validar a un usuario, a saber 'MembershipService'. Dentro de él probablemente use 'MembershipService.ValidateUser'. –
- 1. ¿Validar un nombre de usuario y contraseña en contra de Active Directory?
- 2. Crear usuario de Active Directory con contraseña en C#
- 3. Obteniendo grupos de usuarios en Active Directory
- 4. C# Active Directory: ¿Obtener el nombre de dominio del usuario?
- 5. ¿Cómo me autentico contra Active Directory del código del servicio web ASP.NET?
- 6. Rails 3 & devise_ldap_authenticatable: ¿Autorización contra Active Directory?
- 7. Encontrar CN de usuarios en Active Directory
- 8. Acceso a Active Directory desde ASP.Net MVC utilizando C#
- 9. Active Directory (LDAP) - Comprobar la cuenta bloqueada/contraseña expiró
- 10. Active Directory: buscar solo objetos de usuario
- 11. ¿Se requiere Active Directory para un equipo que usa TFS 2010?
- 12. Conexión de flex/php a Active Directory
- 13. ¿Por qué Active Directory valida la última contraseña?
- 14. Autenticación contra Active Directory con Java en Linux
- 15. Consulta de Active Directory para nombre de usuario, nombre, apellido y correo electrónico
- 16. Autenticación de Active Directory
- 17. Perfiles/Atributos de usuarios personalizados de Active Directory?
- 18. Permisos de usuario/grupo en Active Directory
- 19. Encontrar un usuario en Active Directory con el nombre de usuario
- 20. Obtener el nombre de dominio de Active Directory para el usuario actual que usa Mac OSX
- 21. usuario de Active Directory fecha de expiración de la contraseña .NET/OU directiva de grupo
- 22. Permitir que los usuarios solo ingresen etiquetas específicas
- 23. ldap nodejs active directory authentication
- 24. Gerrit y Active Directory
- 25. Cómo cambiar mediante programación la contraseña de Active Directory
- 26. ¿Cómo se integra Delphi con Active Directory?
- 27. ¿Cómo puedo autenticarme contra Active Directory en Nancy?
- 28. Obtener membresías de un grupo de usuarios de Active Directory
- 29. lograr que los grupos de Active Directory mediante C#
- 30. El modo de autenticación de Windows en ASP.NET utiliza el nombre de grupo de Active Directory (previo a Windows 2000)?
¿Cómo podemos hacer esto para MVC4? –
@JamesHarpe Es lo mismo ... – Rovdjuret
¿Y cómo se puede usar con ASP.NET Core (MVC 6)? –