React Native集成Azure B2C User Flow iOS端无法回调至APP求助
以下是针对你遇到的iOS端选择Google等第三方身份提供商登录后无响应问题的排查和解决步骤:
检查URL Scheme配置
确认Info.plist中的CFBundleURLSchemes完全匹配Azure B2C应用注册里的重定向URI前缀,比如如果重定向URI是msalabc123://oauth/redirect,那么scheme必须是msalabc123,大小写完全一致。另外,在LSApplicationQueriesSchemes中添加第三方身份提供商的scheme,比如Google需要添加com.googleusercontent.apps.你的Google客户端ID,否则跳转回App会被系统拦截。验证重定向URI一致性
Azure B2C应用注册中的重定向URI,必须和你在react-native-app-auth的config里设置的redirectUri完全一致,比如msalabc123://oauth/redirect,不能有任何拼写或格式错误。核对config配置细节
确保config中的以下参数正确:clientId:Azure B2C应用的客户端IDissuer:Azure B2C User Flow的完整地址,格式为https://{租户名}.b2clogin.com/{租户名}.onmicrosoft.com/{用户流名称}/v2.0/responseType:包含id_token(比如['id_token', 'token'])scope:包含openid等必要权限(比如['openid', 'profile'])
检查AppDelegate回调实现
确认iOS项目的AppDelegate.m(或.swift)中已正确添加react-native-app-auth的回调处理:#import <ReactNativeAppAuth.h> // iOS 12及以下 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { return [RNAppAuth application:app openURL:url options:options]; } // iOS 13+ 适配SceneDelegate - (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts { for (UIOpenURLContext *context in URLContexts) { [RNAppAuth application:[UIApplication sharedApplication] openURL:context.URL options:@{}]; } }如果用Swift,对应的代码也要正确实现。
测试纯Azure B2C账号登录
先跳过第三方身份提供商,直接用Azure B2C的账号密码登录。如果能正常回调,说明问题出在第三方身份提供商的配置:- 检查Azure B2C中第三方身份提供商(比如Google)的配置,确保回调URI设置为Azure B2C的授权响应端点,格式为
https://{租户名}.b2clogin.com/{租户名}.onmicrosoft.com/{用户流名称}/oauth2/authresp - 确认第三方平台(比如Google Cloud)的OAuth应用中,已将上述Azure B2C端点添加到授权重定向URI列表中
- 检查Azure B2C中第三方身份提供商(比如Google)的配置,确保回调URI设置为Azure B2C的授权响应端点,格式为
启用调试日志
在config中添加日志记录器,获取更详细的授权流程信息:const config = { // 其他配置... logger: (message) => console.log('[AppAuth Debug]', message) };运行App后查看控制台日志,定位到具体失败的环节。
内容的提问来源于stack exchange,提问作者Learner4Ever

