Firebase 令牌过期和处理刷新令牌的最佳实践

jre*_*emi 2 firebase firebase-authentication

我目前正在使用客户端上的 firebase 用户身份验证方法在客户端应用程序(基于 Cordova 的移动应用程序)上使用 Firebase:

  • 用电子邮件和密码登录
  • FacebookAuthProvider

根据我目前对会话到期的理解和经验:

身份验证会话不会随着 Firebase 登录而过期。但 ID 令牌必须每小时刷新一次,以保持对服务的访问。

我认为这意味着我应该编写一个每 59 分钟运行一次的后台进程方法并运行 firebase 方法:

firebase.auth().currentUser.getIdToken(true) // true 表示根据 firebase 文档强制刷新,无论当前令牌到期。

我只是想确保我已经解决了这个问题。

我正在做一些像这样简单的事情......这应该可以解决问题:

  let firebaseTokenRefresh = setInterval(function(){
     console.log('running firebase token refresh...');
     // true = forceRefresh
     firebase.auth().currentUser.getIdToken(true); 
  }, 3540000); // 59 minutes firebase token refresh (1 hr expiration)
Run Code Online (Sandbox Code Playgroud)

谢谢。

boj*_*eil 5

无需主动刷新令牌(这样做成本太高)。无论何时您需要 ID 令牌,您只需调用user.getIdToken(). 如果当前令牌已过期,这将返回缓存的未过期令牌或刷新它。您可以在向服务器发送经过身份验证的请求时随时调用它。如果您使用 Firestore 或实时数据库,它们会在需要时自动为您刷新令牌。您可以通过auth.onIdTokenChanged()侦听器侦听令牌更新。

  • 这是不正确的,它们确实会在 1 小时后过期,如果您使用 getIdToken 的结果并将令牌存储在 prefs 中,以便您可以在需要请求时将其发送到您的 API,并在 1 小时后向他们发送相同的令牌而不刷新它首先,将导致他们的 firebase 调用返回“过期令牌”,因此他们将向您返回 401 Unauthorized。 (3认同)
  • 当然它们会过期。它们是具有过期时间的 JWT。阅读答案。您不会将它们存储在本地。它们已经为您存储和管理。需要时调用官方 API。它为您刷新他们。 (2认同)