【问题标题】:C# TokenValidationParameters for JwtSecurityTokenHandler having no effect on validation?JwtSecurityTokenHandler 的 C# TokenValidationParameters 对验证没有影响?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-30
      • 1970-01-01
      • 2021-02-23
      • 2021-12-17
      • 2020-11-10
      • 2015-11-04
      • 2010-12-01
      • 2013-10-07
      • 2021-12-15
      相关资源
      最近更新 更多