使用 firebase 令牌在我的服务器和应用程序之间进行身份验证是否安全?

Is it secure to use firebase tokens for authentication between my server and an application?

我正在考虑使用 firebase 对用户进行身份验证。用户可以通过 pyqt 应用程序注册。他们的电子邮件地址和密码将通过 POST 请求发送到我的服务器 (Django)。在我的服务器上,我会使用 firebase (pyrebase) 来注册它们。然后我会将 firebase 令牌存储在我服务器上的数据库中,并将 return 令牌存储给用户并将其保存在本地。之后,我将始终(或直到用户再次登录,这将 return 一个新令牌)使用此令牌对用户进行身份验证并让他们访问我的数据库。这样安全吗?像这样:

注册时:

用户:

token = requests.post(url, {"email": email, "pwd": pwd)

服务器:

response = auth.create_user_with_email_and_password(email, pwd)
token = response['idToken']
c.execute('INSERT INTO Tabel (email, token) VALUES(?, ?)', (email, token))
return token

报名后:

用户:

some_data = requests.post(url, {"token": token, "email": email)

服务器:

token_in_database = c.execute("SELECT token FROM Tabel WHERE email = (?)", (email,)).fetchone()
if token == token_in_database:
    return some_data

您所描述的与 Firebase 对其身份验证令牌所做的有点相似,因此它确实可以很好地工作。 :)

需要记住的几点:

  • 确保仅通过安全连接将凭据从客户端发送到服务器,并将 ID 令牌从服务器发送到客户端。这减少了中间人获取凭据或令牌的机会。
  • 如果您希望用户的身份验证状态可用于其他 Firebase 产品,请不要忘记在客户端上sign the user in with the custom token
  • 您真的需要将令牌存储在您的数据库中吗? Firebase 服务器通常不会这样做,而是在第一次获取时 verify the token。他们确实在本地缓存验证状态,但是没有当前 ID 令牌的中央数据库有助于可扩展性。
  • 您希望令牌的过期时间相当短,以防恶意行为者访问它。 Firebase 本身使用有效期为 1 小时的 ID 令牌,SDK 会在大约 55 分钟后自动更新。
  • 如果您希望令牌的生命周期更短或更长,请考虑 using a session cookie,它的有效期从 5 分钟到 2 周不等。