React Native使用react-native-app-auth从Azure AD B2C获取access token异常
react-native-app-auth 对接 Azure AD B2C 双端问题解决方案
通用配置修正(双端都需要先修改)
你当前配置存在租户不统一的核心错误:issuer使用的是ksg1806租户,但是tokenEndpoint、revocationEndpoint使用的是GFKMS租户,Azure AD B2C要求授权、令牌、注销端点必须属于同一个租户和同一个用户流,优先将所有端点的租户、用户流统一为你实际注册应用的对应值:
// 修正后配置示例(替换为你实际的租户、用户流、客户端ID等值) const config = { // 统一使用同一个租户的issuer,或者你配置了serviceConfiguration可以省略issuer避免冲突 issuer: 'https://<你的实际租户名>.b2clogin.com/<你的实际租户名>.onmicrosoft.com/v2.0/', clientId: '你的实际客户端ID', redirectUrl: Platform.OS == 'ios' ? 'msauth.com.gfk.consumervoice://auth' : 'msauth://com.gfkconsumer/Cb7s2L1nogp57%2BKdddohtF8%2Funk%3D', scopes: ['openid', 'offline_access', '你的API访问scope'], // 补充scope才能拿到可用的access token serviceConfiguration: { authorizationEndpoint: 'https://<你的实际租户名>.b2clogin.com/<你的实际租户名>.onmicrosoft.com/b2c_1_signup_signin/oauth2/v2.0/authorize', tokenEndpoint: 'https://<你的实际租户名>.b2clogin.com/<你的实际租户名>.onmicrosoft.com/b2c_1_signup_signin/oauth2/v2.0/token', revocationEndpoint: 'https://<你的实际租户名>.b2clogin.com/<你的实际租户名>.onmicrosoft.com/b2c_1_signup_signin/oauth2/v2.0/logout', }, };
安卓端错误修复
报错Unable to complete authorization as there is no interactive call in progress按以下步骤排查:
- 完成上述通用配置修正,确保所有端点租户、用户流一致
- 检查
AndroidManifest.xml中是否正确添加了redirectUrl对应的intent-filter,示例如下:
<activity android:name="net.openid.appauth.RedirectUriReceiverActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="msauth" android:host="com.gfkconsumer" android:path="/Cb7s2L1nogp57%2BKdddohtF8%2Funk%3D" /> </intent-filter> </activity>
- 检查
getAccessToken方法是否存在重复触发的问题,比如按钮点击未做防抖,短时间内多次调用authorize会覆盖前一次请求,导致报错,调用前可以加状态判断是否有正在进行的授权流程
iOS端授权后无返回修复
- 完成上述通用配置修正
- 检查iOS项目
Info.plist中是否正确添加了URL Scheme,在URL types数组下添加一项,URL Schemes值为msauth.com.gfk.consumervoice,和redirectUrl前缀完全一致 - 检查
AppDelegate中是否添加了链接回调处理代码,示例如下(OC版本):
#import <React/RCTLinkingManager.h> - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { return [RCTLinkingManager application:application openURL:url options:options]; }
- 确认Azure AD B2C应用注册后台已经正确添加iOS端的redirectUrl,拼写完全匹配代码中的配置
内容的提问来源于stack exchange,提问作者Kanwarjeet Singh
相关产品推荐
相关产品推荐

