您好,很抱歉有一个半开放的问题,但我正在使用 Microsoft.IdentityModel.Tokens.TokenValidationParameters 来根据某些 Siging Key 验证承载令牌,但某些参数似乎对结果没有任何影响.
我想验证 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 中使用它之前尝试更改它的部分内容,但无论我做什么 - 都没有改变。没有异常或错误或任何东西,就像密钥被完全忽略一样。
对于有效算法也是如此。如果我理解正确,那么默认值应该是接受任何有效的算法,但由于我想确保密钥使用 RS256,所以我只想检查这个 1,但无论我在那里输入什么,都不会发生任何变化,就像完全被忽略了一样。
问题是其他参数工作得很好,如果其中任何一个参数未能通过验证,那么我会得到一个适当的异常,但对于这两个参数什么也没有发生..:|
ValidAlgorithms
选项很可能只检查令牌的标头,以查看那里定义的算法是否被允许(JWT标头的alg
声明)。
当您指定
ValidateIssuerSigningKey = true
时,将运行默认的签名密钥验证器。您必须检查默认验证器的作用。