如何在没有孩子的情况下验证令牌

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

Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException:'IDX10503:签名验证失败。托肯没有孩子。尝试的键:“[‘System.Text.StringBuilder’类型的 PII 已隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]'。 TokenValidationParameters 中的键数:'1'。

配置中的按键数量:“0”。

捕获异常:

'[“System.Text.StringBuilder”类型的 PII 已隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]'。

token:“[‘System.IdentityModel.Tokens.Jwt.JwtSecurityToken’类型的 PII”已隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]'。有关详细信息,请参阅 https://aka.ms/IDX10503。'

这是我遇到的例外;我想验证令牌而不在标题或声明中给出

kid

这可以吗?

.net asp.net-core validation jwt token
1个回答
0
投票

“kid”用于从从发行者元数据端点获取的密钥列表中解析 IssuerSigningKey。比如下面这样:

    .AddMicrosoftIdentityWebApp(options =>
    {
        
        builder.Configuration.Bind("AzureAd", options);
        options.TokenValidationParameters = new TokenValidationParameters
        {


            IssuerSigningKeyResolver = (token, securityToken, kid, validationParameters) =>
            {
                // Custom logic to resolve the signing key
                var keys = GetKeysFromMetadataEndpoint(validationParameters.ValidIssuer);
                var key = keys.FirstOrDefault(k => k.KeyId == kid);
                return new List<SecurityKey> { key };
            }
        };


IEnumerable<SecurityKey> GetKeysFromMetadataEndpoint(string issuer)
{
    // Fetch keys from the issuer's metadata endpoint
    // For example, use HttpClient to get the JWKS and parse it
    return new List<SecurityKey>();
}

所以只有你自己能返回正确的“钥匙”,这个孩子才能被跳过。

跳过孩子的一个简单方法是禁用“IssuerSigningKey”验证。但您应该考虑安全影响。

        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = false
        }
© www.soinside.com 2019 - 2024. All rights reserved.