.NETCore - 具有多个验证规则的JSON Web令牌

时间:2017-06-09 15:18:11

标签: asp.net-core

在.NETCore asp.net中,我使用UseJwtBearerAuthentication来保护使用访问令牌的控制器,其方式与此类似:

app.UseJwtBearerAuthentication(new JwtBearerOptions  
{
    AutomaticAuthenticate = true,
    AutomaticChallenge = true,
    TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidIssuer = "TestIssuer",

        ValidateAudience = true,
        ValidAudience = "TestAudience",

        ValidateLifetime = true,
    }
});

但是,我想提供多个选项,因为不同的受众可能需要不同级别的访问权限。例如,访问令牌可能需要具有不同的生命周期。

我可以通过添加这样的不同选项来实现这一目标:

app.UseJwtBearerAuthentication(jwtBearerOptions1);  
app.UseJwtBearerAuthentication(jwtBearerOptions2);  

这很好用。并按预期授予控制器访问权限。

然而,我发现的问题是,虽然我正确地被授予或拒绝按预期访问,但是当.NET身份验证代码尝试针对每个可用的JwtBearerOptions进行身份验证时,调试控制台会收到大量详细的异常消息。

它会记录一个已经成功但也记录了每一个失败的例子(例如下面的例子)。

我的问题:是否有办法抑制此消息,因为我预计会出现这些故障?或者我应该使用不同的方法来添加多个JwtBearerOptions吗?

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: IDX10503: Signature validation failed. Keys tried: 'Microsoft.IdentityModel.Tokens.SymmetricSecurityKey , KeyId: 
'.
Exceptions caught:
 ''.
token: '{"alg":"HS256","typ":"JWT"}.{"sub":"testuser","jti":"c98bb91a-5dcd-4fd7-97ff-c10cddf18989","nbf":1497015309,"exp":1497101709,"iss":"TestIssuer","aud":"TestAudience"}'.
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext()
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[7]
      Bearer was not authenticated. Failure message: IDX10503: Signature validation failed. Keys tried: 'Microsoft.IdentityModel.Tokens.SymmetricSecurityKey , KeyId: 
      '.

0 个答案:

没有答案