¿Por qué AuthorizeAttribute redirige a la página de inicio de sesión para detectar errores de autenticación y autorización?


En ASP.NET MVC, puede marcar un método de controlador con AuthorizeAttribute, así:

[Authorize(Roles = "CanDeleteTags")]
public void Delete(string tagName)
{
    // ...
}

Esto significa que, si el usuario actualmente conectado no está en el rol "CanDeleteTags", nunca se llamará al método controlador.

Desafortunadamente, para fallas, AuthorizeAttribute devuelve HttpUnauthorizedResult, que siempre devuelve el código de estado HTTP 401. Esto provoca una redirección a la página de inicio de sesión.

Si el usuario no ha iniciado sesión, esto tiene mucho sentido. Sin embargo, si el usuario ya está registrado en, pero no está en el rol requerido, es confuso enviarlos de vuelta a la página de inicio de sesión.

Parece que AuthorizeAttribute combina autenticación y autorización.

Esto parece un poco un descuido en ASP.NET MVC, o me estoy perdiendo algo?

He tenido que cocinar un DemandRoleAttribute que separa los dos. Cuando el usuario no está autenticado, devuelve HTTP 401, enviándolo a la página de inicio de sesión. Cuando el usuario está conectado, pero no está en el rol requerido, crea un NotAuthorizedResult en su lugar. Actualmente esto redirige a una página de error.

Seguramente no tuve que hacer esto?


Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52