微软Azure身份应用访问中,何时需使用api://前缀的作用域?
API作用域中
api://前缀的使用规则 必须带api://前缀的场景
- 当你的受保护API在Azure AD应用注册里,自定义了以
api://开头的标识符URI时,请求令牌的作用域必须完整包含这个前缀。比如API的标识符是api://abc123-xyz,那作用域就得写成api://abc123-xyz/.default或者api://abc123-xyz/your-custom-scope。 - 核心逻辑:API的标识符URI是
api://开头的,作用域就必须带这个前缀,否则Azure AD找不到对应的资源,直接触发授权失败。
可以省略api://前缀的场景
- 如果你的API用的是Azure AD默认生成的标识符URI(一般是
https://[租户域名]/[客户端ID]或者https://[租户ID].onmicrosoft.com/[客户端ID]),那请求时直接用[客户端ID]/.default或者[客户端ID]/your-custom-scope就行,不用加api://前缀——Azure AD会自动把这个GUID映射到默认的HTTPS格式标识符。 - 部分老版本Azure AD配置或特定场景下,直接用客户端ID(GUID)作为资源标识就能被识别,这时候也不需要前缀。
你遇到的问题原因
你之前用api://GUID/.default能正常工作,后来授权失败,移除前缀就恢复正常,大概率是API的标识符URI配置被修改了——比如从自定义的api://GUID改成了默认的HTTPS格式,或者Azure AD内部的资源映射关系发生了变化。这时候带前缀的作用域匹配不到对应的API资源,自然授权失败;而用GUID/.default能匹配到新的默认标识符,所以恢复正常。
怎么区分两种应用注册的差异?
直接去API的应用注册页面看Expose an API板块:
- 查看最顶部的标识符URI:如果是
api://开头的,就必须带前缀;如果是https://开头的默认格式,就可以省略前缀用GUID。 - 查看自定义作用域的完整格式:比如作用域是
api://GUID/access_as_user,请求时就得带前缀;如果是https://[租户]/GUID/access_as_user,就用对应的格式。
内容的提问来源于stack exchange,提问作者sjanisz
相关产品推荐
相关产品推荐

