【发布时间】:2022-01-26 09:01:14
【问题描述】:
您好,很抱歉有一个半开放的问题,但我正在使用 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 似乎都没有任何影响。我从 Token 发行者那里获得了密钥,所以我的一般假设是它是有效的,所以我尝试在 TokenValidationParameters 中使用它之前更改它的一部分,但不管我做什么 - 没有任何改变。没有异常或错误或任何东西,就像键被完全忽略了。
ValidAlgorithms 也一样。如果我理解正确,那么默认值应该是接受任何有效的算法,但由于我想确保密钥使用 RS256,我只想检查这个 1,但无论我在那里输入什么,都没有变化,就像它被完全忽略了一样。
问题是其他参数工作得很好,如果其中任何一个验证失败,那么我会得到一个适当的异常,但是对于这两个没有任何反应.. :|
【问题讨论】:
标签: c# algorithm validation jwt bearer-token