después de buscar y leer varias soluciones sobre cómo administrar la autenticación de modo mixto en aplicaciones ASP.NET, todavía no tengo una solución adecuada para mi problema.Aumento de la autenticación de Windows en la aplicación ASP.NET MVC 3
Tengo que implementar una aplicación de intranet para un grupo de diferentes grupos de usuarios. Hasta ahora he utilizado la autentificación de Windows que fue muy simple de implementar. Mis problemas surgen cuando se trata de autorizar grupos de usuarios para funcionalidades de aplicaciones especiales.
El uso de [Authorize(Users = "DOMAIN\\USER")]
funciona muy bien, pero debido a que no tengo acceso a la administración del directorio activo, me es imposible configurar la gestión de roles de la manera que la necesito para mi aplicación.
Lo que me gustaría hacer es definir roles personalizados y membresías además de las que están definidas dentro del directorio activo (¿es posible tal extensión? Por ejemplo, implementando un propio proveedor de membresía?).
¿Cuál cree que es la mejor solución para mi problema. ¿Realmente tengo que implementar una autenticación compleja de modo mixto con autenticación de formularios además de la autenticación de Windows?
tecnologías utilizadas:
- MS SQL Server 2008
- MS VS 2010
- ASP.NET MVC 3 - Razor Ver motor
- Extensiones Telerik para ASP.NET MVC
- IIS 7 en Windows Server 2008
E DIT (solución final gracias a la ayuda de dougajmcdonald):
Después de dirigirme a utilizar una aplicación personalizada IPrincipal he encontrado algunas soluciones here y here. Poniendo todo junto llegué a la siguiente solución:
1.Create una implementación personalizada principales:
public class MyPrincipal: WindowsPrincipal
{
List<string> _roles;
public MyPrincipal(WindowsIdentity identity) : base(identity) {
// fill roles with a sample string just to test if it works
_roles = new List<string>{"someTestRole"};
// TODO: Get roles for the identity out of a custom DB table
}
public override bool IsInRole(string role)
{
if (base.IsInRole(role) || _roles.Contains(role))
{
return true;
}
else
{
return false;
}
}
}
2.Integrate mi aplicación principal de costumbre en la aplicación mediante la extensión del archivo "Global.asax.cs" :
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
WindowsIdentity wi = (WindowsIdentity)HttpContext.Current.User.Identity;
MyPrincipal mp = new MyPrincipal(wi);
HttpContext.Current.User = mp;
}
}
3. Utilizar mis papeles personalizados de autorización en mi solicitud
public class HomeController : Controller
{
[Authorize(Roles= "someTestRole")]
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
Funciona! ¡sí!
lo daré una prueba, gracias por la respuesta rápida :) –
¡¡¡muchas gracias !!! ¡Tu respuesta fue muy útil! :-) –
No hay problema, me alegro de que haya ayudado. ¡Tuve que hacer algo muy similar muy recientemente! En mi situación, no quería usar los roles de Windows Active Directory (ya que nuestros administradores no quieren administrar las cosas de esa manera) pero quería asegurar que PODRÍAMOS usarlos si así lo decidieran, de ahí la decisión de vincularse con el IPrincipal lado de las cosas en lugar de simplemente crear una cuenta de usuario como una clase interna para nuestra aplicación y cumplir roles en contra de ella. – dougajmcdonald