【问题标题】:Add custom validation to JWT token for ASP.NET Core?向 ASP.NET Core 的 JWT 令牌添加自定义验证?
【发布时间】:2017-01-03 10:39:05
【问题描述】:

以前,我可以使用JwtBearerAuthenticationOptions 来添加我的自定义令牌处理程序和我的自定义验证。现在有了核心UseJwtBearerAuthentication,我需要使用JwtBearerOptions,它似乎没有覆盖JwtSecurityTokenHandler的选项。我基本上想覆盖JwtSecurityTokenHandler中的以下方法:

protected virtual JwtSecurityToken ValidateSignature(string token, TokenValidationParameters validationParameters)

以前:

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
    TokenHandler = new MyTokenHandler()
    // other properties here
});

目前使用 ASP.NET Core:

app.UseJwtBearerAuthentication(new JwtBearerOptions
{
    // other properties here
});

【问题讨论】:

    标签: c# authentication asp.net-core jwt openid-connect


    【解决方案1】:

    JwtBearerOptions有一个名为TokenValidationParameters的参数,所以可以使用这个参数:

    var tokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = signingKey,
        //...
    };
    
    app.UseJwtBearerAuthentication(new JwtBearerOptions
    {
        //...
        TokenValidationParameters = tokenValidationParameters
    });
    

    【讨论】:

    • 是的,我查看了 TokenValidationParameters 但无法弄清楚如何进行自己的令牌验证。特别是我想验证签名,但我不知道如何使用 TokenValidationParameters 来做到这一点。
    • 您遇到错误了吗?如果没有,您的令牌验证逻辑是什么,您可以发布吗?
    • 我没有收到错误消息。 JwtBearerOptions 中没有 TokenHandler 属性,就像 JwtBearerAuthenticationOptions 中那样。
    【解决方案2】:

    如果您想实际创建自己的JwtSecurityTokenHandler 并覆盖ValidateSignature 方法,可以使用SecurityTokenValidators 属性:

    var options new JwtBearerOptions();
    options.SecurityTokenValidators.Clear();
    options.SecurityTokenValidators.Add(new MyTokenHandler());
    app.UseJwtBearerAuthentication(options);
    

    从技术上讲,对 Clear() 的调用不是必需的 - 只要令牌处理程序之一可以解析令牌,验证调用就会成功。但是,如果在您的情况下它永远不会成功,那么删除 JwtSecurityTokenHandler 似乎是有道理的。

    【讨论】:

    • 这一行options.SecurityTokenValidators.Clear(); 节省了我的时间。非常感谢
    • 如何从客户令牌处理程序返回错误 - ValidateToken 方法?
    猜你喜欢
    • 2019-06-05
    • 2017-10-26
    • 2020-08-22
    • 2020-09-04
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2021-12-17
    相关资源
    最近更新 更多