【发布时间】:2023-04-06 16:32:01
【问题描述】:
我正在构建一个简单的 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":"<Firebase ID-token>"}
响应正文
{
"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/…
标签: php firebase jwt firebase-admin