繁体   English   中英

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

[英]Verify a Firebase ID-token vs. fetching user data

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

我目前在服务器上使用非官方的 Firebase Admin PHP SDK来验证 idtoken。 但我想知道这是否是矫枉过正和不必要的复杂。 Firebase 有一个 REST 接口,让我可以使用 cURL 或 Guzzle 发出简单的 POST 并获取用户数据已过期或无效的错误消息。

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

请求正文

{"idToken":"<Firebase ID-token>"}

响应正文

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

或错误:

  • INVALID_ID_TOKEN

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

  • USER_NOT_FOUND

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

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

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

对身份工具包 API 的 REST 请求就足够了。

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

此外,SDK 验证令牌的简单方法不会检查已撤销的令牌,因为它需要调用 Firebase 后端。 但是,如果 REST 调用,它将被验证。

最后,由于您的应用程序只调用一次(并在此后维护 session),因此开销应该不大。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM