Microsoft Azure登录成功返回空scopes,react-native-app-auth调用接口报401
问题排查方案
核心原因
Azure AD v2.0 端点不支持单次授权请求同时申请多个不同资源的权限,你当前配置中同时传入了属于微软Graph服务的User.Read scope和属于自定义后端的api://XXXX/access_as_user scope,会导致token生成逻辑异常,要么返回的token仅适用于其中一个资源,要么scope字段返回为空。
具体排查步骤
- 拆分scope请求
Azure AD签发的access token为单资源专属,一个token只能用于调用一个服务:- 若需要调用微软Graph接口,单独发起一次授权请求,scopes参数仅传入
['openid', 'offline_access', 'profile', 'User.Read'],获取Graph专属的token - 若需要调用自定义后端API,单独发起一次授权请求,scopes参数仅传入
['api://XXXX/access_as_user'],获取后端专属的token,用这个token发起后端请求即可解决401问题
- 若需要调用微软Graph接口,单独发起一次授权请求,scopes参数仅传入
- 校验自定义API的权限配置
进入Azure Portal的应用注册界面,检查自定义后端对应的应用注册配置:- 已正确暴露
access_as_user权限,权限的作用域标识符和你配置的api://XXXX/access_as_user完全一致 - 你的移动端应用注册已被授予该自定义API的
access_as_user权限,若为企业租户,已完成管理员同意操作
- 已正确暴露
- 校验access token有效性
将调用自定义API时使用的access token复制到JWT解析工具中,检查以下字段:aud(受众)字段值必须等于自定义API的应用ID或者你设置的API标识符(api://XXXX),如果值为https://graph.microsoft.com则说明这个token是给Graph服务用的,无法调用你的后端scp(权限)字段必须包含access_as_useriss(签发者)字段必须和你的租户匹配,exp(过期时间)未到点
- 校验后端鉴权配置
确认你的后端API的JWT校验逻辑中,受众、签发者、签名算法配置和Azure AD的配置完全匹配,且权限校验逻辑正确识别access_as_user权限 - 校验基础参数配置
单独请求自定义API的scope后如果依然返回空scopes,检查:- 配置中的
redirectUrl和Azure应用注册中配置的移动端重定向URI完全一致,包含大小写、末尾斜杠都要匹配 tenantId参数填写正确,若为单租户应用不要填common
- 配置中的
内容的提问来源于stack exchange,提问作者gem1234
相关产品推荐
相关产品推荐

