Azure报错IDW10203:客户端凭据流scope缺失access_as_machine问题咨询
问题原因
客户端凭据(client credentials)属于服务到服务的无用户认证流,这类流签发的令牌不会携带面向委托权限的scp(scope)声明,只会携带面向应用权限的roles声明。你当前代码用[RequiredScope]特性校验scp声明,和客户端凭据流的令牌结构不匹配,同时大概率没有正确配置应用权限并授予管理员同意,才会触发相关报错。
解决步骤
1. 修正Azure AD应用的权限配置
- 打开Azure AD中你注册的受保护Web API的应用注册页面,进入「暴露API」板块,添加类型为「应用程序」的权限
access_as_machine,不要选「委托」类型,添加后完成管理员同意授权。 - 打开调用方客户端应用的应用注册页面,进入「API权限」板块,添加刚才Web API暴露的
access_as_machine应用权限,同样完成管理员同意。
客户端凭据流必须使用
api://{你的API应用ID}/.default作为scope申请令牌,你之前遇到的1002012报错是该流程的正常限制,不需要修改scope参数,保持.default后缀的写法即可。
2. 修正API端的权限校验代码
把原来校验委托权限的[RequiredScope]特性,替换为微软Identity Web提供的、专门校验应用权限的[RequiredAppRole]特性,修改后代码如下:
[Authorize] [HttpGet("GetAsMachine")] [RequiredAppRole("access_as_machine")] public string GetAsMachine() => $"Machine {Assembly.GetExecutingAssembly().GetName().Version}";
3. 验证配置有效性
重新调用令牌端点获取新的访问令牌,解码令牌后检查是否存在roles声明,且声明值包含access_as_machine,如果存在则调用受保护接口就不会再报IDW10203错误。
内容的提问来源于stack exchange,提问作者Fabian Bigler
相关产品推荐
相关产品推荐

