Firebase 不接受从 Google Identity Platform 的 REST API 获取的 JWT:“自定义令牌格式不正确。”

Posted

技术标签:

【中文标题】Firebase 不接受从 Google Identity Platform 的 REST API 获取的 JWT:“自定义令牌格式不正确。”【英文标题】:Firebase not accepting JWT acquired from Google Identity Platform's REST API: 'The custom token format is incorrect.' 【发布时间】:2021-06-19 03:31:46 【问题描述】:

我正在尝试在我的 Flutter 项目中启用多因素身份验证,该项目仅针对 Web 平台。据我了解,最新版本的 FlutterFire SDK 不支持 MFA。这就是我尝试使用Google Identity Platform APIs 将功能添加到我的应用程序的原因。

我已经可以从 REST API 获取令牌,但是在将其传递给 signInWithCustomToken() 方法时,我总是收到此错误:'自定义令牌格式不正确...'

这是我尝试让用户登录的方式:

    使用http package 发布到https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword 通过发布到 https://identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start 来启动 MFA 从发送到用户手机号的短信中获取短信验证码。 发帖到https://cloud.google.com/identity-platform/docs/reference/rest/v2/accounts.mfaSignIn/finalize 带有短信验证码。 从响应正文中获取idToken。 将获取的idToken 传递给FirebaseAuth.signInWithCustomToken() 方法。

查看这个 Firebase 文档,我从 GIP REST API 获得的令牌的格式似乎不同。

我可以做些什么来让 Firebase SDK 接受我从 Google Identity Platform REST API 获得的令牌?

【问题讨论】:

【参考方案1】:

Firebase signInWithCustomToken() 方法采用 a token generated by the Admin SDK,而不是 Google 身份令牌。

GCIP (Google Cloud Identity Platform) 返回的令牌与 Firebase 使用的 Auth ID 令牌相同。调用finalizeMfa 后,您实际上已经登录了 Firebase,如果您开始使用 SDK,您会发现它此时无需任何转换即可工作。

【讨论】:

这是否意味着 FlutterFire SDK 会自动识别有登录用户,即使登录过程是使用 REST API 进行的? 如果没有,我如何让 FlutterFire 知道我已经让用户使用 GCIP REST API 登录?有可能吗? 您为什么要这样做而不是仅仅使用 SDK?从您要解决的用例开始,这样我们就不必玩旋转木马了:D 见XY problem

以上是关于Firebase 不接受从 Google Identity Platform 的 REST API 获取的 JWT:“自定义令牌格式不正确。”的主要内容,如果未能解决你的问题,请参考以下文章

Firebase |从Google oAuth中检索高清参数

flutter firebase google登录以及如何从多个类访问

如何从一个片段中删除数据,这些片段应该反映在google firebase中的其他片段中

如何在flutter中将标记从firebase(真实数据库)检索到新的google maps api

如何从 Firebase Cloud Function 在 Google Pub/Sub 中发布消息?

将登录屏幕切换到家庭 firebase 和 google