JwtSecurityTokenHandler 的TokenValidationParameters 对验证没有影响?

问题描述 投票:0回答:1

您好,很抱歉有一个半开放的问题,但我正在使用 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,但无论我在那里输入什么,都不会发生任何变化,就像完全被忽略了一样。

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

c# jwt
1个回答
0
投票

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

当您指定

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

© www.soinside.com 2019 - 2024. All rights reserved.