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