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

验证Azure AD令牌遇IDX20807错误:.NET 4.6.1 API配置获取失败求助

问题分析与解决方案

核心问题是STS发现端点URL错误,搭配.NET 4.6.1默认TLS版本兼容问题,导致无法获取OpenID配置文档,具体修复步骤如下:

  • 修正STS发现端点URL
    你当前使用的https://login.microsoft.com/{tenantId}/v2.0/.well-known/openid-configuration不符合AAD v2.0的标准规范,正确域名应为login.microsoftonline.com,修改后代码:

    var stsDiscoveryEndpoint = $"https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration";
    

    需保证该域名与代码中issuer变量的域名完全一致。

  • 强制启用TLS 1.2
    .NET 4.6.1默认未强制启用TLS 1.2,而AAD目前要求使用TLS 1.2进行请求,在获取配置前添加以下代码:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    
  • 核对租户ID与受众配置

    1. 确认tenantId是有效的AAD租户GUID,无拼写错误(错误信息中的租户ID包含affn,疑似输入失误,需与实际租户ID核对)。
    2. 确保代码中的audience与Web API在AAD中注册的应用ID URI或客户端ID完全匹配,同时Angular应用请求令牌时的scope需指向该API(例如api://{audience}/access_as_user)。
  • 验证令牌本身的合法性
    可通过JWT解析工具查看令牌的iss和aud声明,确认其与代码中issuer、audience的取值一致,避免令牌颁发对象错误。

修改后的完整代码示例

string tenantId = "your-valid-tenant-guid";
var audience = "your-api-client-id-or-app-id-uri";
var issuer = $"https://login.microsoftonline.com/{tenantId}/v2.0";
var stsDiscoveryEndpoint = $"https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration";

// 强制启用TLS 1.2
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
try
{
    CancellationToken cancellationToken = new CancellationToken();
    var config = await configManager.GetConfigurationAsync(cancellationToken);

    var tokenHandler = new JwtSecurityTokenHandler();

    var validationParameters = new TokenValidationParameters
    {
        ValidAudience = audience,
        ValidIssuer = issuer,
        IssuerSigningKeys = config.SigningKeys,
        ValidateAudience = true,
        ValidateIssuerSigningKey = true,
        RequireExpirationTime = true,
        ValidateLifetime = true
    };

    SecurityToken validatedToken;
    tokenHandler.ValidateToken(token, validationParameters, out validatedToken);

    return validatedToken;
}
catch (Exception ex)
{
    // 添加错误日志逻辑
    throw;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:15:41