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

WebAPI 2.0使用Bearer Token认证失败(OWIN/OAuth)问题求助

问题解决:Bearer Token签名验证失败(IDX10511)

错误原因分析

从报错信息IDX10511: Signature validation failed来看,核心问题是服务端无法验证客户端获取的Token签名,结合你的配置代码,主要存在以下几个问题:

  1. 服务端ValidIssuers配置错误:代码中直接将配置项写在字符串字面量里,没有实际替换Tenant值,导致Issuer验证不通过,进而触发签名验证失败。
  2. 客户端与服务端的Authority版本不匹配:客户端使用MSAL(PublicClientApplicationBuilder)默认可能请求v2.0端点的Token,但服务端的UseWindowsAzureActiveDirectoryBearerAuthentication中间件默认适配v1.0端点,两者Token格式和签名密钥来源不一致。
  3. TokenValidationParameters配置冲突:手动指定的参数可能覆盖了中间件默认的密钥获取逻辑,导致无法正确加载验证签名所需的密钥。

具体修复步骤

1. 修复服务端ValidIssuers的字符串拼接问题

你的代码中ValidIssuers的赋值是硬编码的字符串,没有实际替换Tenant配置值,需要改为动态拼接:

private void ConfigureAuth(IAppBuilder app)
{
    var tenantId = ConfigurationManager.AppSettings["Tenant"];
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationOptions
        {
            Audience = ConfigurationManager.AppSettings["Audience"],
            Tenant = tenantId,
            TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
            {
                // 正确拼接v2.0的Issuer地址
                ValidIssuers = new[] { $"https://login.microsoftonline.com/{tenantId}/v2.0" }
            }
        });
}

2. 确保客户端与服务端的Authority版本一致

如果服务端配置的是v2.0 Issuer,客户端需要明确指定v2.0的Authority:

private static void GetAuth()
{
    autth = PublicClientApplicationBuilder.Create(ClientId)
            .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
            // 明确指定v2.0端点
            .WithAuthority(AzureCloudInstance.AzurePublic, $"{Tenant}/v2.0")
            .Build();
}

如果你的Azure AD应用是v1.0类型,服务端应该使用v1.0的Issuer:https://login.microsoftonline.com/{tenantId}/,客户端也对应调整为v1的Authority。

3. 避免手动覆盖TokenValidationParameters的默认密钥逻辑

UseWindowsAzureActiveDirectoryBearerAuthentication中间件会自动从Azure AD的元数据端点获取签名密钥,如果你手动指定TokenValidationParameters,可能会破坏这个逻辑。如果不需要额外的验证参数,建议移除该配置,让中间件使用默认值:

private void ConfigureAuth(IAppBuilder app)
{
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationOptions
        {
            Audience = ConfigurationManager.AppSettings["Audience"],
            Tenant = ConfigurationManager.AppSettings["Tenant"]
        });
}

如果必须添加ValidIssuers,确保同时保留中间件的默认密钥获取逻辑,不要设置IssuerSigningKeys等参数。

4. 验证Audience配置正确性

确认服务端的Audience配置值和客户端请求Token时使用的scope对应的资源ID一致。如果客户端请求的是v2.0的scope(比如api://{clientId}/.default),服务端的Audience应该设置为对应的API应用ID URI。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:05:22