You need to enable JavaScript to run this app. ASP.NET Core Web API Azure AD鉴权IDW10201/AADSTS70011异常排查
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Web API Azure AD鉴权IDW10201/AADSTS70011异常排查

鉴权异常修正方案

报错根因说明

  • AADSTS70011触发逻辑:userimpersonation属于委托权限,仅适配代表终端用户的授权流程(授权码流、ROPC流等)。client_credentials客户端凭证流为纯应用间调用场景,仅支持获取应用级权限,传入委托权限scope会被判定为无效参数。
  • IDW10201触发逻辑:client_credentials流签发的令牌不会携带scope声明,仅会携带应用角色(roles)声明。当前控制器硬编码了仅校验委托scope的RequiredScope特性,会因为找不到匹配的校验声明直接抛出未授权错误。

分步修正操作

调整Azure应用注册配置

  • 校验Web API对应应用注册的「公开API」板块,确保App ID URI和调用时使用的api://xx-3737-48a5-a6c0-7e3bc4f9a5c9完全一致,无多余空格、特殊字符。
  • 针对client_credentials调用场景,在应用注册的「应用角色」板块新增自定义应用角色(示例命名:WeatherAPI.FullAccess);随后在「企业应用」列表找到用于发起调用的客户端服务主体,为该主体分配刚创建的应用角色,确保client_credentials签发的令牌能正常携带roles声明。
  • 明确scope使用规则:client_credentials流下的scope参数固定为<App ID URI>/.default,禁止传入具体委托权限名称,否则会触发AADSTS70011。

调整应用端鉴权代码

  • 移除控制器上硬编码的[RequiredScope(RequiredScopesConfigurationKey = "AzureAd:Scopes")]特性,替换为[RequiredScopeOrAppPermission]特性。该特性可自动适配两类令牌的校验规则:
    • 代表用户调用场景:校验令牌内的scope声明是否匹配配置的权限
    • 纯应用调用场景:校验令牌内的roles声明是否匹配配置的应用权限
  • 保留Startup中已有的AddMicrosoftIdentityWebApi服务注册逻辑,无需额外改动。

调整接口调用请求

  • 清除curl请求中参数值附带的换行、隐藏空格(当前示例里的client_id、scope参数值都存在换行格式问题,容易造成和应用注册配置的不匹配)。
  • 若需测试委托权限的调用流程,替换授权模式为授权码流,调用时传入api://<应用客户端ID>/userimpersonation作为scope,该流程签发的令牌会携带对应scope声明,可正常通过鉴权校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 20:57:02