在.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:
'.