JwtSecurityTokenHandler的C#TokenValidationParameters对验证没有影响



嗨,很抱歉有一个半开放的问题,但我正在使用Microsoft.IdentityModel.Tokens.TokenValidationParameters根据一些SigingKey验证Bearer令牌,但有些参数似乎对结果没有任何影响。

我想验证SigningKey是否使用了特定的算法,以及SigningKey本身是否有效。

我基本上使用:

TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidIssuer = ...,
ValidateAudience = true,
ValidAudience = ...,
RequireSignedTokens = true,
//ValidateIssuerSigningKey = true, //tried with this included and excluded, but no difference
IssuerSigningKey = //Key from ... /.well-known/openid-configuration/jwks,
//AlgorithmValidator = //no need to us this from what I understand since there should be a default one ? 
ValidAlgorithms = new List<string>(){ "RS256" }
};
try {
SecurityToken validatedToken;
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
var claimsPrincipal = handler.ValidateToken(token, validationParameters, out validatedToken);
}
catch....

但ValidAlgorithms和IssuerSigningKey似乎都没有任何影响。我从令牌颁发者那里获得密钥,所以我的一般假设是它是有效的,所以我在TokenValidationParameters中使用它之前尝试更改它的部分,但无论我做什么,都不会改变。没有任何异常或错误,比如Key被完全忽略了。

ValidAlgorithms也是如此。如果我理解正确,那么默认情况应该是接受任何有效的算法,但由于我想确保密钥使用RS256,我只想检查这个1,但无论我在那里输入什么,都没有更改,就像它被完全忽略一样。

问题是,其他参数工作得很好,如果其中任何一个未通过验证,那么我会得到一个适当的异常,但对于这两个参数,什么都不会发生。:|

ValidAlgorithms选项很可能只检查令牌的标头,以查看是否允许在那里定义的算法(JWT标头的alg声明(。

当您指定ValidateIssuerSigningKey = true时,将运行默认的签名密钥验证器。你必须检查默认验证器的作用

相关内容

  • 没有找到相关文章

最新更新