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

Firebase关联微软账号时抛出[firebase_auth/invalid-credential]错误排查

解决Firebase关联微软账号时的invalid-credential错误及Token刷新问题

问题核心

你遇到的两个关键问题:

  • Firebase自带微软登录的Access Token过期后无法自动刷新,需用户重新登录
  • 使用azure_ad_authentication获取的Token关联Firebase时触发firebase_auth/invalid-credential错误

错误原因

Firebase的MicrosoftAuthProvider.credential()需要传入的是微软ID Token,而非调用Graph API用的Access Token。你当前代码传入的是Access Token,导致凭证验证失败。

修复步骤

1. 调整Token获取逻辑,获取ID Token

修改azure_ad_authentication的调用参数,确保获取到ID Token:

if (FirebaseAuth.instance.currentUser == null) {
  return false;
}

// 注意:authority使用正确的端点,不是authorize路径
final AzureAdAuthentication pca = await AzureAdAuthentication.createPublicClientApplication(
  clientId: clientId,
  authority: "https://login.microsoftonline.com/common/v2.0",
);

// 加入openid、profile等身份认证scope,确保返回id_token
UserAdModel? userAdModel = await pca.acquireToken(scopes: [
  "openid",
  "profile",
  "Calendars.Read" // 保留Graph API所需权限
]);
if (userAdModel == null) {
  return false;
}

// 使用idToken而非accessToken创建Firebase凭证
final credential = MicrosoftAuthProvider.credential(userAdModel.idToken!);
await FirebaseAuth.instance.currentUser!.linkWithCredential(credential);

2. 配置Azure AD应用关键项

  • 在Azure Portal的应用注册中,添加Firebase要求的重定向URI(格式通常为https://<你的Firebase项目ID>.firebaseapp.com/__/auth/handler)
  • 确认应用已启用ID令牌(在"身份验证" -> "高级设置" -> "ID令牌"勾选)
  • 在Firebase控制台的"登录方法"中,微软登录的Client ID和Client Secret与Azure Portal完全一致

3. 实现Token自动刷新

使用azure_ad_authentication的静默刷新方法,避免用户重复登录:

// 静默刷新Token(无需用户交互)
Future<UserAdModel?> refreshToken() async {
  final AzureAdAuthentication pca = await AzureAdAuthentication.createPublicClientApplication(
    clientId: clientId,
    authority: "https://login.microsoftonline.com/common/v2.0",
  );
  return await pca.acquireTokenSilent(
    scopes: ["openid", "profile", "Calendars.Read"],
    accountIdentifier: FirebaseAuth.instance.currentUser?.uid, // 或微软账号的唯一标识
  );
}

验证要点

  • 调用userAdModel.idToken前先确认非空,避免空指针
  • 可以用JWT解析工具验证ID Token的格式和有效期,确保包含iss、sub等Firebase所需的标准声明

内容的提问来源于stack exchange,提问作者botato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:05:12