如何为服务主体设置正确Scope以调用Azure管理服务及ML计算API
解决Azure ML计算REST API令牌受众错误及权限疑问
错误原因及解决方法
你的错误核心是获取访问令牌时指定的资源(resource)参数错误。调用Azure管理REST API(包括ML计算的启停接口)时,令牌的受众必须是https://management.azure.com/(或错误提示里的其他允许值),但你当前请求用的是api://{{id}},导致受众不匹配。
修正方法:在发起OAuth请求获取令牌时,将resource参数的值改为https://management.azure.com/。以client credentials flow的请求为例:
POST https://login.microsoftonline.com/{tenant-id}/oauth2/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials &client_id={your-sp-client-id} &client_secret={your-sp-client-secret} &resource=https://management.azure.com/
你的疑问解答
1. 如何在Azure门户的服务主体端设置该Scope?
不需要在服务主体(应用注册)端设置这个Scope。https://management.azure.com/是Azure管理API的资源标识符,并非你自身应用注册的Scope。问题完全出在获取令牌时的resource参数配置,只要在请求令牌时指定正确的resource值即可,无需在门户内做额外设置。
2. 权限机制如何运作?已分配资源级所有者权限,是否仍需配置Scope?
Azure的权限分两种场景:
- 针对Azure管理API(ARM API):服务主体的权限通过RBAC角色分配(比如你给服务主体添加的资源级所有者权限)控制,不需要在应用注册的「API权限」里配置任何Scope。只要RBAC角色分配正确,加上令牌的resource参数无误,就能正常调用API。
- 针对自定义API或Microsoft Graph等其他API:才需要在应用注册里配置对应的API权限(Scope),并完成管理员同意。
简单来说,你已经给服务主体分配了资源级所有者权限,只要把令牌请求的resource改成https://management.azure.com/,就能正常调用ML计算的启停API,无需再去应用注册里配置Scope。
内容的提问来源于stack exchange,提问作者Onki
相关产品推荐
相关产品推荐

