Flutter应用中Firebase OIDC(Keycloak)认证报错及iOS崩溃问题
Flutter 集成 Firebase OIDC(Keycloak)认证问题排查与解决
初始错误:[firebase_auth/unknown] null
核心排查点
- Firebase自定义OIDC提供商未配置:
必须在Firebase控制台完成Keycloak的自定义OIDC配置:- 进入「认证」→「登录方法」→ 添加提供方 → 选择「自定义OIDC」
- 填入Keycloak的Issuer URL(
https://你的Keycloak域名/realms/你的Realm名)、客户端ID,保存配置
- 凭证参数不完整:
使用OAuthProvider.credential时,除idToken外,建议补充accessToken和rawNonce(若请求Keycloak令牌时使用了nonce):
OAuthCredential oAuthCredential = OAuthProvider(Constants.PROVIDER_ID) .credential( idToken: idToken, accessToken: accessToken, rawNonce: nonce, );
- Keycloak令牌有效性:
确认Keycloak返回的idToken是标准JWT,且包含sub、iss、aud等Firebase要求的核心声明
iOS端崩溃问题(切换signInWithProvider后)
崩溃原因与修复方案
从崩溃日志分析,问题源于iOS端Firebase Auth插件未正确识别自定义OIDC配置,需完成以下操作:
- 配置Info.plist:
打开iOS项目的Info.plist,添加以下内容(替换为你的实际信息):
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>com.googleusercontent.apps.你的Firebase客户端ID</string> <string>keycloak.你的Keycloak客户端ID</string> </array> </dict> </array> <key>FirebaseAuthCustomOAuthProviders</key> <array> <string>${PROVIDER_ID}</string> <!-- 对应Constants.PROVIDER_ID的值 --> </array>
- 更新依赖版本:
将iOS端Firebase Auth SDK和Flutter的firebase_auth插件更新到最新稳定版,旧版本存在自定义OIDC兼容性BUG - 清理项目缓存:
执行flutter clean后重新编译运行iOS项目
关键注意事项
PROVIDER_ID必须与Firebase控制台配置的自定义OIDC提供商ID完全一致- Keycloak客户端需将Firebase回调URL(
https://你的Firebase项目ID.firebaseapp.com/__/auth/handler)添加到「Valid Redirect URIs」列表中
内容的提问来源于stack exchange,提问作者Devendra
相关产品推荐
相关产品推荐

