加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:51:00 所属栏目:asp.Net 来源:网络整理
导读:我在我的应用程序中添加了一个JWT中间件: app.UseJwtBearerAuthentication(options = { options.AutomaticAuthenticate = true;} ) 现在如果我的令牌没有验证(例如已过期),我仍然会收到生命周期验证未通过的错误.有没有办法让中间件仅为受保护资源验证令牌
我在我的应用程序中添加了一个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应该真的存在).

解决方法

首先,您需要通过在JWT承载选项中将AutomaticAuthentication设置为false来禁用自动身份验证.

要确保为特定操作调用JWT承载中间件,您可以使用AddAuthenticationSchemes创建自己的授权策略:

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() {
    ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读