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

React Native调用Azure Logic App自定义API权限与范围配置问题

解决Azure自定义范围API调用401无效令牌问题

核心问题拆解

你碰到的问题根源在于令牌请求的范围格式错误,以及对Azure AD权限配置逻辑的混淆:

  • 自定义范围必须用{API应用ID URI}/{范围名称}的完整格式请求,不能只写范围名
  • 移动端请求令牌时要同时包含Graph和自定义API的所有必要范围,不能遗漏
  • 应用注册添加的API权限,若为租户级权限需完成管理员同意才能生效

具体修复步骤

1. 正确构造请求范围

移动端请求令牌时,要把所有需要的范围完整声明,包括Graph权限和自定义API范围,示例代码如下:

const scopes = [
  "openid",
  "profile",
  "email",
  "offline_access",
  "User.ReadWrite.All",
  "api://{你的Logic App应用注册ID}/custom_scope_name" // 替换为你的自定义范围完整路径
];
  • 这里的api://{Logic App应用注册ID}是你在应用注册「公开API」中设置的应用ID URI
  • 自定义范围必须用完整路径,否则Azure AD不会返回对应权限到令牌中

2. 验证应用注册权限配置

  • 确认移动端应用注册的「API权限」里,已添加自定义API的委托权限(Delegated permissions)
  • 若为租户内应用,点击「授予管理员同意」按钮,确保权限全局生效
  • 检查自定义API的「公开API」设置:范围状态为「已启用」,且允许的受众包含你的移动端应用

3. 调试令牌内容

获取令牌后,用JWT解码工具(比如本地JWT解析库)查看scp字段:

  • 若scp中没有自定义范围,说明请求范围格式错误,或权限未被同意
  • 确保offline_access字段存在,这样才能获取有效刷新令牌维持会话

4. 检查Logic App授权配置

  • 确认Logic App的Azure AD授权策略中,允许的范围包含你定义的自定义范围
  • 检查Logic App触发器是否正确验证令牌的scp字段,确保权限匹配

对你两种尝试方案的修正

  • 方案1问题:你只添加了自定义范围,未包含openid、profile等必需范围及Graph权限,导致令牌缺少对应权限,自然无法调用Graph和获取刷新令牌
  • 方案2问题:你未在请求范围中指定自定义API的完整路径,Azure AD不会自动添加该范围到令牌,因此调用API时返回401

内容的提问来源于stack exchange,提问作者Eduard Farkaš

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:20:39