向 ASP.NET Core 的 JWT 令牌添加自定义验证?

Posted

技术标签:

【中文标题】向 ASP.NET Core 的 JWT 令牌添加自定义验证?【英文标题】:Add custom validation to JWT token for ASP.NET Core? 【发布时间】: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
);

【问题讨论】:

【参考方案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 方法?

以上是关于向 ASP.NET Core 的 JWT 令牌添加自定义验证?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core JWT 和声明

ASP.NET Core 中的 Jwt 令牌身份验证

ASP.net Core 2.0 JWT 令牌刷新

使用外部 JWT 令牌 ASP.NET CORE

ASP.NET Core 和 JWT 令牌生命周期

ASP.NET Core AWS Cognito JWT