Flutter使用aad_oauth获取Azure AD令牌后无法登录Firebase问题
解决思路
- 修正请求的scope:你当前配置的scope针对的是微软Graph API,不是Firebase身份验证所需的OIDC scope。修改Config的scope字段为:
openid profile offline_access 你的Azure客户端ID,移除Graph相关的scope配置。 - 改用ID令牌构造Firebase凭证:你当前传入的是Graph接口的访问令牌,Firebase验证微软身份需要Azure AD签发的ID令牌。替换
getAccessToken()为getIdToken()获取ID令牌,再构造凭证,修正后代码参考如下:
final Config config = Config( tenant: '你的实际租户ID(单租户不要填common)', clientId: '你的Azure客户端ID', scope: 'openid profile offline_access 你的Azure客户端ID', redirectUri: 'https://login.microsoftonline.com/common/oauth2/nativeclient', ); final AadOAuth oauth = AadOAuth(config); await oauth.login(); // 改为获取ID令牌 String? idToken = await oauth.getIdToken(); final OAuthProvider oAuthProvider = OAuthProvider('microsoft.com'); final OAuthCredential credential = oAuthProvider.credential( idToken: idToken, ); try { final UserCredential authResult = await _firebaseAuth.signInWithCredential(credential); _updateAuthStatus(authResult); } on FirebaseAuthException catch (e) { print('caught firebase auth exception\n ${e.code}\n ${e.message}'); } catch (e) { print('Error -- $e'); }
- 核对Azure应用配置:进入Azure门户的应用注册页面,在「身份验证」-「隐式授权和混合流」设置中,勾选「ID令牌」选项,确保重定向URI和你代码中的配置完全一致。
- 核对Firebase配置:进入Firebase控制台的「身份验证」-「登录提供商」页面,打开Microsoft提供商配置,确认填写的客户端ID、客户端密钥、租户ID和你Azure注册的应用配置完全匹配,租户类型和你实际的Azure租户一致。
- 核对端侧配置:安卓端需确保Firebase控制台已配置正确的SHA1、SHA256签名;iOS端需在项目配置中添加Azure客户端ID反转值作为URL Scheme。
内容的提问来源于stack exchange,提问作者Clement Joseph
相关产品推荐
相关产品推荐

