Pregunta

Tengo un atributo súper simple de autenticación que estoy tratando de implementar en una aplicación ASP.NET MVC 5 y tengo algunos problemas. Quiero que el atributo se aplique a nivel mundial, a excepción de las acciones específicas dentro de un controlador (por ejemplo, el formulario de inicio de sesión y la página de inicio).

He intentado decorar la acción con el atributo [OverrideAuthentication] sin suerte. Me da un error de bucle redirecto porque la aplicación aún está ejecutando la autenticación en el formulario de inicio de sesión y sigue intentando redirigir nuevamente al formulario de inicio de sesión una y otra vez.

¿Alguien más ha visto este comportamiento? ¿Alguna idea de lo que he metido aquí?

Por ejemplo, he creado un filtro súper simple que actualmente no está implementado:

public class BasicAuthenticationAttribute
    : ActionFilterAttribute, IAuthenticationFilter
{

    public void OnAuthentication(AuthenticationContext filterContext)
    {
        throw new NotImplementedException();
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
        throw new NotImplementedException();
    }
}

Si decoro mi controlador / acción como esta:

[BasicAuthentication]
public class AccountController : Controller
{
    [HttpGet]
    [OverrideAuthentication]
    public ActionResult Login()
    {
        return View();
    }
}

Obtengo una excepción no implementada cuando navegue a la acción de inicio de sesión, aunque esa acción no debería ejecutar el código de autenticación en absoluto. ¿He entendido mal cómo se supone que las anuchales funcionan?

¿Fue útil?

Solución

Creo que ha confundido la autenticación con la autorización (como lo hacen muchas personas).No tiene sentido hacer un [basicauthenticationAttribute] y registrarlo a nivel mundial, porque la autenticación solo ocurre al iniciar sesión, no en cada solicitud.

La autorización es lo que se lleva a cabo después de que el usuario haya iniciado sesión para verificar si el usuario tiene los privilegios requeridos para realizar una acción específica, y tiene sentido hacer la autorización a nivel mundial.La autorización en MVC es manejada por el [AuthorizEatTribe] y puede heredarlo si necesita personalizar la forma en que se realiza la verificación de autorización.También puede registrarlo como un filtro global.

El [Allowannymousattribute] trabaja en conjunto con [AuthorizeatTribe], y básicamente le dice que se salte de la verificación de autorización.También se debe tener en cuenta que el [allowannymousattribute] no tendrá ningún efecto a menos que se utilice con el [AuthorizEatTribe].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top