tutorial net mvc español asp authentication oauth asp.net-core jwt openid-connect

authentication - mvc - asp.net identity



Cómo agregar validación de tokens solo para acciones protegidas en ASP.NET 5(ASP.NET Core) (1)

He agregado un middleware JWT a mi aplicación:

app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true;} )

Ahora bien, si mi token no valida (por ejemplo, expiró), sigo recibiendo un error que la validación de por vida no pasó. ¿Hay alguna manera de que el middleware valide el token solo para los recursos protegidos? Y si no, ¿cómo y dónde debería llamar lo que el middleware hace yo mismo (leyendo el token en HttpContext.User)?

PD Así es como agrego protección:

services.AddMvc(config => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); config.Filters.Add(new AuthorizeFilter(policy)); });

Y así es como permito el acceso público:

[HttpGet] [AllowAnonymous] public string Get(int id) { }

Para aclarar: sin el token esto funcionará, pero si el token no es válido (por ejemplo, expiró), ni siquiera se podrá acceder al recurso público y se lanzarán 500 (debido a algún error interno, la causa 401 debería estar realmente allí).


En primer lugar, debe deshabilitar la autenticación automática estableciendo AutomaticAuthentication en false en las opciones del portador JWT.

Para garantizar que el middleware del portador JWT se llame para acciones específicas, puede crear su propia política de autorización usando AddAuthenticationSchemes :

public void ConfigureServices(IServiceCollection services) { services.AddAuthorization(options => { options.AddPolicy("API", policy => { policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme); policy.RequireAuthenticatedUser(); }); }); }

Luego, decore sus acciones de controlador con el atributo Authorize :

[Authorize(Policy = "API")] [HttpGet("your-action")] public IActionResult Action() { ... }