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

基于Azure APIM构建统一OAuth2授权服务器遇401 Unauthorized问题求助

解决Azure APIM单OAuth2服务器适配多后端API的问题

核心问题分析

你遇到的AADSTS90009错误,是因为用客户端应用的URI格式api://client-app-id/.default请求自身令牌时,Azure AD要求必须用GUID格式的应用ID。但要实现单OAuth2服务器复用,不需要让客户端请求自身,而是要调整资源定位和权限配置逻辑。

分步解决方案

1. 统一后端API的受众(Audience)配置

  • 进入每个后端应用的“公开API”页面,在“应用程序ID URI”处设置统一的自定义值(比如api://my-shared-backend-audience)
  • 确保每个后端应用的“公开API”中,已将客户端应用ID添加至“授权的客户端应用”列表

2. 调整客户端应用的权限配置

  • 在客户端应用的“API权限”中,移除对自身的权限,改为添加每个后端应用的自定义API权限(若后端有定义)或user_impersonation权限
  • 确保所有添加的权限已完成管理员同意(租户级应用场景)

3. 配置APIM中的OAuth2服务器

创建OAuth2服务器时,使用统一受众值而非客户端应用ID:

  • 令牌受众(Audience)设置为之前定义的api://my-shared-backend-audience
  • 授权端点和令牌端点使用Azure AD标准地址:
    • 授权端点:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize
    • 令牌端点:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
  • 客户端ID填写你的客户端应用ID,客户端密钥使用客户端应用生成的密钥

4. 修正APIM策略中的受众验证

在APIM入站策略的validate-jwt节点中,确保audiences包含统一受众值:

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Invalid token.">
    <openid-config url="https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration" />
    <audiences>
        <audience>api://my-shared-backend-audience</audience>
    </audiences>
</validate-jwt>

5. 解决开发者门户401问题

  • 确保开发者门户中配置的OAuth2服务器参数(受众、端点地址等)与APIM完全一致
  • 检查开发者门户关联的应用注册是否已正确绑定客户端应用,且拥有访问后端API的权限

关键逻辑说明

通过统一所有后端API的受众,让单个OAuth2服务器颁发的令牌能被所有后端API验证,同时避免客户端请求自身令牌的场景,既绕开了GUID强制要求,又实现了单服务器复用的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:35:05