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

时间:2016-08-26 17:23:50

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

以前,我可以使用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 Core:

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

2 个答案:

答案 0 :(得分:8)

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

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

从技术上讲,对Clear()的调用是不必要的 - 只要其中一个令牌处理程序可以解析令牌,对authenticate的调用就会成功。但是,删除JwtSecurityTokenHandler似乎有意义,如果它在您的情况下不会成功。

答案 1 :(得分:0)

JwtBearerOptions有一个名为TokenValidationParameters的参数,因此您可以使用此参数:

var tokenValidationParameters = new TokenValidationParameters
{
    ValidateIssuerSigningKey = true,
    IssuerSigningKey = signingKey,
    //...
};

app.UseJwtBearerAuthentication(new JwtBearerOptions
{
    //...
    TokenValidationParameters = tokenValidationParameters
});