2009-08-29 48 views
27

¿Cómo determina Authorize Tag si el usuario está autorizado o no?¿Cómo funciona la etiqueta Authorize? - ASP.NET MVC

Como decir, si un usuario inicia sesión e intenta ir a una vista que tiene una etiqueta Autorizar. ¿Cómo determina si un usuario está autorizado o no? ¿Hace una consulta a la base de datos y verifica?

¿Qué tal si van a una vista con una autorización de función? ¿Consulta la tabla de roles de membresía?

Me pregunto porque tengo lo que las tablas de membresía de ASP.NET consideran nombres de usuario duplicados. Utilizo una serie de campos para determinar qué usuario es qué, lo que permite a los usuarios tener el mismo nombre de usuario duplicado, pero aún así ser único en mi base de datos.

Esto me llevó a tener que escribir métodos personalizados para muchas cosas de membresía de .NET ya que todas usaban "nombre de usuario" para realizar búsquedas en lugar de usar UserId.

Así que ahora me pregunto si este podría ser el caso con la etiqueta Autorizar. Como no tengo idea de cómo funciona y me gustaría saber si no estaba usando la membresía de .NET, no tendría ni idea de cómo lo determinaría.

+0

que no tienen una respuesta directa a su pregunta, pero sí recuerdo que ASP.NET MVC es de código abierto y se puede verificar esto. Yo asumiría que solo le pregunta al proveedor de membresía. – JoshJordan

Respuesta

24

La etiqueta Authorize utiliza todas las comprobaciones integradas de miembros de ASP.NET. Es MUY fácil imitar tu propia etiqueta. Por ejemplo:

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) throw new ArgumentNullException("httpContext"); 

     // Make sure the user is authenticated. 
     if (httpContext.User.Identity.IsAuthenticated == false) return false; 

     // Do you own custom stuff here 
     bool allow = CheckIfAllowedToAccessStuff(); 

     return allow; 
    } 
} 

A continuación, puede utilizar la etiqueta [MyAuthorize] que usar sus cheques personalizados.

+0

¿Cómo funciona la compilación en la verificación de membresía? ¿Utiliza userName o UerId? – chobo2

+0

no estoy 100% seguro pero creo que principalmente cheques httpContext.User.Identity.IsAuthenticated y regrese su valor, pero sé que también tiene la capacidad de comprobar los papeles también. – Kelsey

+0

hmm No sé, parece que no funciona Todavía puedo ver la página. Simplemente coloca la URL de retorno en mi url y eso es todo. – chobo2

14

ControllerActionInvoker analiza el atributo y llama al OnAuthorization() cuando es el momento de verificar las credenciales. El método AuthorizationAttribute.OnAuthorization() básicamente verifica si User.Identity.IsAuthenticated es verdadero o no. Esto simplemente se basa en la funcionalidad de FormsAuthentication o cualquier otro esquema de autenticación que pueda estar usando.

Cuestiones relacionadas