Firebase身份IDToken

Firebase auth idTokens

我已经阅读了很多关于Web上的Firebase auth的文章,但是找不到关于应该如何在客户端使用idToken的任何明确解释。到目前为止,这是我所知道的

用户登录后,我们可以使用以下方法获取令牌,如果令牌已过期,它将自动刷新令牌

1
2
3
4
5
6
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});

然后我们可以将此令牌发送到后端,在这里我们可以使用firebase admin SDK来验证id令牌并获取用户uid。

1
2
3
4
5
6
admin.auth().verifyIdToken(idToken).then(function(decodedToken) {
    var uid = decodedToken.uid;
    // ...
}).catch(function(error) {
    // Handle error
});

这是我不明白的东西。

  • 在每次对服务器进行API调用以获取idToken之前,是否需要调用getIdToken()方法?
  • Firebase文档说令牌在1小时后过期。因此,我是否应该使用localStorage进行跟踪,然后将令牌重复使用1个小时,直到令牌到期,然后使用getIdToken()发行新的令牌?
  • 我是否应该使用不会过期的uid在后端创建会话,然后使用该会话来验证用户是否已登录?

  • 否;如您所述,令牌有效期为一个小时。除非有理由刷新(例如,如果您添加自定义声明),否则您可以在此期间重用同一令牌。

  • 理想地,当令牌无效时,您的服务器将返回401 Unauthorized或其他内容。大多数REST库都提供了在请求链中添加拦截器的功能,因此您可以检查是否获取了401代码,并且仅在必要时刷新令牌。

  • 除非您的业务逻辑需要,否则不需要后端会话。 Firebase库将为您处理持久性。