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

Microsoft Entra External ID访问令牌验证问题求助

问题诊断与解决方案

一、自定义范围请求失败的排查与修复

  • 确认API应用注册的范围配置:检查公开的giveaways.read/giveaways.write范围是否开启了允许管理员和用户同意,若仅设置为管理员同意,需先在客户端应用的API权限页点击「授予管理员同意」——External ID的外部用户无法自行同意非默认范围,必须由管理员预先授权。
  • 验证请求范围的格式:确保请求时使用完整的范围字符串,即api://6e4a3da6-9e5f-40ea-9bc5-2d608d37a9d1/giveaways.read,不能省略api://前缀或简写范围。
  • 检查SPA测试应用的Token请求逻辑:确认调用acquireTokenPopup/acquireTokenRedirect时,明确传入了自定义范围数组,而不是仅在MSAL初始化配置中声明。例如:
const request = {
    scopes: ["api://6e4a3da6-9e5f-40ea-9bc5-2d608d37a9d1/giveaways.read", "api://6e4a3da6-9e5f-40ea-9bc5-2d608d37a9d1/giveaways.write"]
};
await myMSALObj.acquireTokenPopup(request);

二、无自定义范围的Access Token验证失败问题

  • 颁发者与受众不匹配是核心原因:当未请求自定义API范围时,STS返回的Access Token受众为Microsoft Graph(00000003-0000-0000-c000-000000000000),颁发者为通用STS端点,这类Token仅适用于Microsoft Graph调用,无法用于自定义API验证——必须请求自定义范围才能获取针对你的API的有效Token。
  • 修正ASP.NET Core API的验证配置:确保API明确指定受众为你的API应用注册Client ID,颁发者为External ID租户的STS端点。示例配置:
builder.Services.AddMicrosoftIdentityWebApi(builder.Configuration)
    .AddInMemoryTokenCaches();

// 若配置文件未正确加载,可手动指定
builder.Services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
    options.TokenValidationParameters.ValidAudience = "api://6e4a3da6-9e5f-40ea-9bc5-2d608d37a9d1";
    options.TokenValidationParameters.ValidIssuer = "https://login.microsoftonline.com/{你的租户ID}/v2.0";
});

三、SPA测试应用无报错但无法运行的处理

  • 打开浏览器开发者工具(F12),查看Network标签下的OAuth请求:检查/authorize和/token接口的响应,是否存在consent_required等隐藏错误(SPA静默流程不会主动弹出同意页,导致Token获取失败)。
  • 查看Console标签的MSAL日志:是否有invalid_scope、permission_denied等错误信息,这些错误通常不会触发弹窗,但会阻断Token获取流程。
  • 重置用户同意状态:在Entra ID的用户详情页,移除该用户对客户端应用的所有同意记录,重新登录并完成权限同意流程,确保用户授权了自定义范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:58:27