You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 3.1应用Azure AD B2C下IDX10516签名验证警告排查

.NET 3.1 Azure AD B2C认证日志警告排查与解决

问题原因

  • IDX10516警告:认证中间件尝试用本地配置的对称密钥验证Azure AD B2C签发的RS256签名令牌,但未找到与令牌中kid匹配的密钥——因为B2C使用非对称RSA密钥签名,而非对称密钥。
  • IDX10634异常:RS256算法要求使用非对称密钥(AsymmetricSecurityKey),但配置中错误使用了SymmetricSecurityKey,密钥类型与算法不兼容。
  • 认证功能仍正常的可能原因:中间件存在重试逻辑,后续自动从B2C的密钥端点获取了正确的公钥;或代码中自定义了令牌验证逻辑,绕开了初始配置错误导致的警告。

解决办法

1. 修正认证配置,使用元数据端点自动获取密钥

删除手动配置的对称密钥,让中间件通过Azure AD B2C的OpenID元数据地址自动拉取公钥,示例代码:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://{your-b2c-tenant}.b2clogin.com/{your-b2c-tenant}.onmicrosoft.com/{your-sign-in-policy}/v2.0/";
        options.Audience = "{your-client-id}";
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "https://{your-b2c-tenant}.b2clogin.com/{your-tenant-id}/v2.0/"
            // 移除手动设置的IssuerSigningKey,避免强制使用对称密钥
        };
    });

2. 验证密钥kid匹配性并更新缓存

  • 解码JWT获取kid字段值,访问B2C元数据地址({Authority}/.well-known/openid-configuration)找到jwks_uri,查看返回的密钥集中是否包含匹配的kid。
  • 如果密钥已更新但中间件缓存了旧数据,可设置较短的缓存过期时间:
options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
    options.Authority + ".well-known/openid-configuration",
    new OpenIdConnectConfigurationRetriever(),
    new HttpDocumentRetriever { RequireHttps = true })
{
    RefreshInterval = TimeSpan.FromHours(1)
};

3. 明确指定支持RS256算法

确保配置中只允许RS256算法,避免算法不匹配:

options.TokenValidationParameters.ValidAlgorithms = new[] { SecurityAlgorithms.RsaSha256 };

4. 排查多认证方案冲突

若应用配置了多个认证方案,确认默认方案为Azure AD B2C的JWT Bearer方案,且各方案的密钥配置相互隔离,避免错误复用其他方案的对称密钥。

内容的提问来源于stack exchange,提问作者Jyothish Bhaskaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:59:51