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

时间:2020-07-16 07:13:16

标签: php firebase jwt firebase-admin

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

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

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会话即可。

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

1 个答案:

答案 0 :(得分:0)

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

SDK提供了许多可用于管理用户数据的方法,例如更新名称,管理数据库访问等。如果您的应用不需要执行任何操作,那么您的代码就可以在REST调用中正常工作。

此外,SDK验证令牌的简单方法不会检查revoked tokens,因为它需要调用Firebase后端。不过,如果是REST调用,它将得到验证。

最后,由于您的应用仅拨打一次电话(并在此后保持会话状态),因此开销不会太大。