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

Azure AD应用注册OAuth问题:生成的JWT对应未授权资源

解决Azure AD Client Credentials令牌资源授权问题

看起来你遇到的核心问题是:使用client_credentials模式请求API1的令牌,但令牌对应的资源没有被消费者应用授权——这大概率是因为你混淆了用户委派权限和应用权限的区别,client_credentials模式只认应用权限,而你当前配置的是用户委派权限。

下面是具体的排查和修复步骤:

1. 明确权限类型的差异

client_credentials是应用级授权,不需要用户参与,权限直接授予给消费者应用本身;而你在消费者应用「必填权限」里添加的API1/API2权限,默认是用户委派权限(Delegated Permissions),这类权限是给用户使用的,不适用于client_credentials模式。

2. 为API1定义应用权限

首先需要在API1的应用注册里创建应用权限:

  • 进入Azure AD的应用注册,找到API1
  • 切换到「公开API」选项卡
  • 点击「添加权限」→ 选择「我的API」→ 找到API1
  • 在「应用权限」分类下,添加你需要的权限(如果没有,先点击「添加权限」→ 「创建自定义权限」来定义应用权限)
  • 保存设置

3. 给消费者应用授予API1的应用权限

回到消费者应用的应用注册:

  • 切换到「API权限」选项卡
  • 点击「添加权限」→ 「我的API」→ 选择API1
  • 切换到「应用权限」分类,勾选你需要的权限
  • 点击「添加权限」后,必须点击**「授予管理员同意」**(应用权限必须经过租户管理员同意才能生效)

4. 验证令牌请求参数

确保你的token请求参数正确:

  • resource参数必须是API1的应用ID URI或者客户端ID(你当前用的API1-AppID是可行的,但要确认这个ID确实是API1的应用注册ID)
  • 完整的请求体应该是:
    grant_type=client_credentials&client_id=你的消费者应用ID&client_secret=你的消费者应用密钥&resource=API1的应用ID/URI
    

5. 解析令牌确认权限

请求到令牌后,用jwt.ms解析它,检查两个关键字段:

  • aud(受众):必须等于你请求的resource值(API1的ID/URI)
  • roles:应该包含你给消费者应用授予的API1应用权限

如果aud字段不对,检查resource参数是否正确;如果roles为空,说明应用权限没有被正确授予或管理员同意未生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:36