如何仅为 ASP.NET 5 (ASP.NET Core) 中的受保护操作添加令牌验证

2024-03-13

我已将 JWT 中间件添加到我的应用程序中:

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

现在,如果我的令牌未验证(例如过期),我仍然会收到生命周期验证未通过的错误。有没有办法让中间件仅验证受保护资源的令牌?如果没有,那么我应该如何以及在哪里调用我自己执行的中间件(将令牌读入 HttpContext.User)?

P.S 这就是我添加保护的方式:

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

    config.Filters.Add(new AuthorizeFilter(policy));
});

这就是我允许公众访问的方式:

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

澄清一下:没有令牌,这将起作用,但如果令牌无效(例如过期),则即使公共资源也将无法访问,并且将抛出 500 (由于某些内部错误导致 401 应该确实存在)。


首先,您需要通过设置禁用自动身份验证自动认证 to false在您的 JWT 承载选项中。

为了确保调用 JWT 承载中间件来执行特定操作,您可以使用以下命令创建自己的授权策略添加身份验证方案:

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

然后,用以下内容装饰您的控制器操作Authorize属性:

[Authorize(Policy = "API")]
[HttpGet("your-action")]
public IActionResult Action() {
    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅为 ASP.NET 5 (ASP.NET Core) 中的受保护操作添加令牌验证 的相关文章

随机推荐