为 ASP.NET Core 添加自定义验证到 JWT 令牌?
Add custom validation to JWT token for ASP.NET Core?
以前,我能够使用 JwtBearerAuthenticationOptions
添加自定义令牌处理程序和自定义验证。现在有了 Core UseJwtBearerAuthentication
,我需要使用 JwtBearerOptions
,它似乎没有覆盖 JwtSecurityTokenHandler
的选项。我基本上想覆盖 JwtSecurityTokenHandler
中的以下方法:
protected virtual JwtSecurityToken ValidateSignature(string token, TokenValidationParameters validationParameters)
之前:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
TokenHandler = new MyTokenHandler()
// other properties here
});
目前 ASP.NET 核心:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
// other properties here
});
JwtBearerOptions
有个参数叫TokenValidationParameters
,所以可以用这个参数:
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
//...
};
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
//...
TokenValidationParameters = tokenValidationParameters
});
如果您想实际创建自己的 JwtSecurityTokenHandler
并覆盖 ValidateSignature
方法,您可以使用 SecurityTokenValidators
属性:
var options new JwtBearerOptions();
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new MyTokenHandler());
app.UseJwtBearerAuthentication(options);
从技术上讲,对 Clear()
的调用不是必需的 - 只要其中一个令牌处理程序可以解析令牌,对身份验证的调用就会成功。但是,如果 JwtSecurityTokenHandler
在您的情况下永远不会成功,则删除它似乎是有道理的。
以前,我能够使用 JwtBearerAuthenticationOptions
添加自定义令牌处理程序和自定义验证。现在有了 Core UseJwtBearerAuthentication
,我需要使用 JwtBearerOptions
,它似乎没有覆盖 JwtSecurityTokenHandler
的选项。我基本上想覆盖 JwtSecurityTokenHandler
中的以下方法:
protected virtual JwtSecurityToken ValidateSignature(string token, TokenValidationParameters validationParameters)
之前:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
TokenHandler = new MyTokenHandler()
// other properties here
});
目前 ASP.NET 核心:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
// other properties here
});
JwtBearerOptions
有个参数叫TokenValidationParameters
,所以可以用这个参数:
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
//...
};
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
//...
TokenValidationParameters = tokenValidationParameters
});
如果您想实际创建自己的 JwtSecurityTokenHandler
并覆盖 ValidateSignature
方法,您可以使用 SecurityTokenValidators
属性:
var options new JwtBearerOptions();
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new MyTokenHandler());
app.UseJwtBearerAuthentication(options);
从技术上讲,对 Clear()
的调用不是必需的 - 只要其中一个令牌处理程序可以解析令牌,对身份验证的调用就会成功。但是,如果 JwtSecurityTokenHandler
在您的情况下永远不会成功,则删除它似乎是有道理的。