You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:36:03