2012-06-01 25 views
45

Tengo dificultades para comprender el uso real del atributo [Authorize] en ASP.NET MVC. Según el concepto, si decoramos un método de controlador con el atributo [Authorize], solo los usuarios autenticados pueden acceder a los controladores.Autorizar el atributo en ASP.NET MVC

He desarrollado una aplicación ASP.NET MVC sin decorar controladores con el atributo [Authorize]. Lo que he observado es que si implemento el mecanismo de autenticación correctamente en mi aplicación usando web.config o de alguna otra manera, no puedo acceder al URL {controller}/{action}/{id} de un método de acción particular.

Sistema siempre solicite iniciar sesión. Eso significa que mis controladores están seguros. Mi pregunta es la siguiente: cuando puedo asegurar mis controladores sin utilizar el atributo [Authorize], ¿cuál es la necesidad real de ello?

Respuesta

75

El poder real viene con la comprensión y la implementación del proveedor de membresía junto con el proveedor de roles. Puede asignar usuarios a roles y de acuerdo con esa restricción puede aplicar diferentes roles de acceso para diferentes usuarios a acciones de controlador o controlador.

[Authorize(Users = "Betty, Johnny")] 
public ActionResult SpecificUserOnly() 
{ 
    return View(); 
} 

o puede restringir según el grupo

[Authorize(Roles = "Admin, Super User")] 
public ActionResult AdministratorsOnly() 
{ 
    return View(); 
} 
+1

Gracias por la answer.But la misma restricción, que puede imponer el uso de mi web.config utilizando la pertenencia y el proveedor de papel para las páginas Ver los devueltos por los controladores. No necesito usar el atributo [Autorizar] para esto. – techmad

+7

@kaus - Una cosa para señalar es que usar un web.config en una aplicación MVC tiene el potencial de agujeros de seguridad. El atributo authorize tiene en cuenta todo el enrutamiento ASP.NET, mientras que con web.config debe conocer todas las posibles configuraciones de enrutamiento en la aplicación y tenerlas en cuenta. Puede que lo haya tenido todo en cuenta, pero no puede estar seguro al mirar el archivo web.config y el routing.config y donde sea que mire. Al observar los atributos Autorizar en una clase, sabes que es segura independientemente del enrutamiento. – DarrellNorton

9

Existe porque es más cómodo de usar, también es una ideología completamente diferente utilizando atributos para marcar los parámetros de autorización en lugar de configuración XML. No pretendía vencer la configuración de propósito general ni ningún otro marco de autorización, solo la forma de hacerlo de MVC. Estoy diciendo esto, porque parece que estás buscando una característica técnica con ventajas que probablemente no sean ... simplemente una excelente conveniencia.

BobRock ya enumera las ventajas. Solo para agregar a su respuesta, otros escenarios son que puede aplicar este atributo a todo el controlador, no solo a las acciones, también puede agregar diferentes parámetros de autorización de roles a diferentes acciones en el mismo controlador para mezclar y combinar.

8

El uso del atributo Authorize parece más conveniente y se siente más como 'forma MVC'. En cuanto a las ventajas técnicas, hay algunas.

Un caso que me viene a la mente es cuando está usando el almacenamiento en caché de resultados en su aplicación. Autorizar el atributo maneja bien.

Otro sería la extensibilidad. El atributo Authorize es simplemente el filtro básico, pero puede anular sus métodos y realizar algunas acciones de preautorización, como el registro, etc. No estoy seguro de cómo lo haría a través de la configuración.

+1

+1 por mencionar extensibilidad. Esa es una ventaja definitiva sobre el método web.config. ;) – CptRobby

4

Una ventaja es que está compilando el acceso a la aplicación, por lo que no puede ser cambiado accidentalmente por alguien que modifique el Web.config.

Esto puede no ser una ventaja para usted, y podría ser una desventaja. Pero para algunos tipos de acceso, puede ser preferible.

Además, encuentro que la información de autorización en Web.config lo contamina y hace que sea más difícil encontrar cosas. Entonces, de alguna manera es su preferencia, en otros no hay otra manera de hacerlo.

Cuestiones relacionadas