使用ad-b2c-react-native在Expo React Native中无法获取Azure Auth访问令牌
React Native Azure B2C 身份验证无法获取 Access Token
我在React Native中使用Azure B2C进行身份验证时,始终无法在响应中获取到access token。先后尝试了ad-b2c-react-native和react-native-azure-auth两个包,配置如下:
<AuthProvider tenant={'<SomeTenant>'} appId={'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'} loginPolicy="<login-policy>" passwordResetPolicy="<password-reset-policy>" scope={'https://somedev.onmicrosoft.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Access.All'} redirectURI={'msauth://org.myweb.somedev/xxxxxxxxxxxxxxxxxxxxxxxxxxx'} >
身份验证后的响应始终为:
access: "" error:null expiresOn:0 id:"" isAuthentic:false
我怀疑问题出在scope配置上,尝试过微软文档中的不同scope选项,但都没有解决问题。
排查与解决方案
1. 校验Scope的有效性
- 确认
Access.All权限已在Azure B2C应用注册中完成授予+同意:
登录Azure门户,找到目标租户和应用注册,进入「API权限」页面,检查是否已添加对应API的Access.All权限,且点击了「授予管理员同意」(租户级权限需此操作) - 先尝试通用基础scope:
openid offline_access,验证基础身份流程是否正常,再逐步添加自定义API的scope
2. 核对Redirect URI配置
- Azure门户中应用注册的「移动和桌面应用」下,必须添加与代码中完全一致的
msauth://org.myweb.somedev/xxxxxxxxxxxxxxxxxxxxxxxxxxxURI,注意大小写、特殊字符完全匹配 - 检查React Native项目的URL Scheme配置:iOS需在
Info.plist中添加对应scheme,Android需在AndroidManifest.xml中配置intent-filter,确保与redirectURI前缀一致
3. 修正租户与策略参数
tenant参数需填写完整租户域名,比如somedev.b2clogin.com或somedev.onmicrosoft.com,不能保留<SomeTenant>占位符- 确认
loginPolicy是Azure B2C中已创建的用户流全称(比如B2C_1_signupsignin),拼写完全正确
4. 开启调试日志排查隐藏错误
- 给
ad-b2c-react-native的AuthProvider添加debug={true}参数,或开启react-native-azure-auth的日志输出,查看身份验证流程中的详细报错信息(部分错误不会直接返回在响应的error字段中)
5. 简化配置逐步排查
- 先移除自定义scope,仅保留
openid测试是否能获取id token,若正常再逐个添加scope,定位问题所在 - 确认目标API的应用ID URI,与scope中的前缀(
https://somedev.onmicrosoft.com/xxx)完全一致
内容的提问来源于stack exchange,提问作者Saad Mansoor
相关产品推荐
相关产品推荐

