验证 Firebase ID 令牌与获取用户数据

Posted

技术标签:

【中文标题】验证 Firebase ID 令牌与获取用户数据【英文标题】:Verify a Firebase ID-token vs. fetching user data 【发布时间】:2020-11-05 19:26:03 【问题描述】:

我正在构建一个简单的 php 网站,让用户可以使用 Google 或 Facebook 登录。这是在客户端完成的,然后将生成的 ID-token 和 refreshtoken 发送到我的 PHP 脚本以识别数据库中的用户。之后,我使用基于“传统”会话的用户处理。因此,Firebase 令牌是使用 javascript SDK 获取的,并且仅在登录时使用。

我目前在服务器上使用unofficial Firebase Admin PHP SDK 来验证idtoken。但我想知道这是否是矫枉过正和不必要的复杂。 Firebase 有 a REST interface,它让我可以使用 cURL 或 Guzzle 发出简单的 POST 并取回用户数据,或者如果 idtoken 过期或无效,则会显示错误消息。

POST https://identitytoolkit.googleapis.com/v1/accounts:lookup?key=<API_KEY> 

请求正文

"idToken":"&lt;Firebase ID-token&gt;"

响应正文

   
     "kind": "identitytoolkit#GetAccountInfoResponse",
     "users": [
       // User data
     ]
   

或者一个错误:

INVALID_ID_TOKEN

用户的凭据不再有效。用户必须重新登录。

USER_NOT_FOUND

没有与此标识符对应的用户记录。该用户可能已被删除。

这比使用 Admin SDK 简单得多。据我所知,使用 Admin SDK 的主要好处是可以使用私钥/公钥在本地验证令牌。但就我而言,我只需要在登录时验证一次令牌,然后使用老式 PHP 会话。

那么,进行 REST 调用是否足以在登录时“验证”Firebase idtoken?或者这样做是否存在潜在的安全问题?

【问题讨论】:

我想知道被撤销的令牌可能存在问题。 (猜测)这应该比使用 sdk 更安全。 firebase.google.com/docs/auth/admin/… 【参考方案1】:

对 identitytoolkit API 的 REST 请求就足够了。

SDK 提供了很多可用于管理用户数据的方法,例如更新名称、管理数据库访问等。如果您的应用不需要执行任何操作 - 您的代码应该可以正常使用 REST 调用。

此外,SDK 验证令牌的简单方法不会检查 revoked tokens,因为它需要调用 Firebase 后端。但是,如果是 REST 调用,则会对其进行验证。

最后,由于您的应用只调用一次(并在此后保持会话),因此开销应该不会太多。

【讨论】:

小补充:您实际上可以使用 SDK 来检查令牌撤销?

以上是关于验证 Firebase ID 令牌与获取用户数据的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Firebase 中过期的用户 ID 令牌?

如何通过 Firebase Google 身份验证获取带有刷新令牌的 YouTube 数据 API 访问令牌?

在验证其ID令牌(GAE / Firebase)后重定向用户

Firebase React Native——如何获取和传输设备 ID/令牌?

Firebase .NET 令牌验证

使用用户 ID 从 Firebase 获取数据