Firebase:管理与服务器的用户会话,而无需用户再次登录?

时间:2019-08-11 11:22:48

标签: firebase firebase-authentication google-cloud-functions firebase-admin

我们有一个REST API(Python + Flask),可通过Google云功能向外部用户公开。我们还有一个Web应用程序(React),该应用程序使用此API在网络上显示结果。因此,我们有两个功能接口:REST API和Web。

现在,根据新要求,我们正在网站上实施用户注册/登录模块(使用电子邮件和密码),以便只有注册/登录的用户才能在网站上看到结果。

我们计划使用Firebase。直接将Firebase Client SDK集成到我们的网站中(添加了一个新的登录页面,以便用户可以登录,并且一旦登录,他们将保持登录状态,直到清除浏览器Cookie)。

我们也希望对REST API的用户进行类似的身份验证。 API用户将首先在我们的网站上注册。我们将再公开一个REST API SignIn,他将在其中传递注册的电子邮件和密码,我们将使用Firebase SignInWithPassword(Firebase Admin SDK / Firebase REST API)对其进行验证,并返回ID令牌/刷新令牌。 。现在,在使用任何其他公开的API时,用户需要发送这些令牌IDToken / RefreshToken,我们将使用VerifiyIDToken()进行验证。

问题在于ID令牌存在时间短(有效期为1小时),之后VerifyIdToken将失败。现在,我们不希望API用户再次调用SignIn API以获得新的ID令牌/ RefreshToken或访问我们的网站以获取任何此类令牌。

有什么方法可以刷新API的用户ID令牌,而无需让他再次登录?

1 个答案:

答案 0 :(得分:2)

在Web客户端上管理令牌

网站客户代码可以调用User.getIdToken(forceRefresh?: boolean)

  

返回当前令牌(如果尚未过期)。否则,这将刷新令牌并返回一个新令牌。

每次将令牌发送到服务器时都需要调用此方法。


或者,可以通过会话cookie管理用户会话。

Manage Session Cookies

  

Firebase Auth为依赖会话cookie的传统网站提供服务器端会话cookie管理。与客户端短暂的ID令牌相比,此解决方案具有多个优点,后者可能每次需要使用重定向机制来在到期时更新会话cookie:

     
      
  • 通过基于JWT的会话令牌(只能使用授权的服务帐户生成)来提高安全性。
  •   
  • 无状态会话cookie,它具有使用JWT进行身份验证的所有好处。会话cookie具有与ID令牌相同的声明(包括自定义声明),从而使对会话cookie可执行相同的权限检查。
  •   
  • 能够创建自定义有效期为5分钟到2周的会话cookie。
  •   
  • 根据应用程序要求(域,路径,安全性,httpOnly等)强制执行cookie策略的灵活性。
  •   
  • 当怀疑使用现有的刷新令牌吊销API盗窃令牌时,可以撤销会话cookie。      
        
    • 能够检测到主要帐户更改后的会话撤销。
    •   
  •