验证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与受众配置
- 确认
tenantId是有效的AAD租户GUID,无拼写错误(错误信息中的租户ID包含affn,疑似输入失误,需与实际租户ID核对)。 - 确保代码中的
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
相关产品推荐
相关产品推荐

