【问题标题】:How to share token between Firebase and server?如何在 Firebase 和服务器之间共享令牌?
【发布时间】:2021-07-01 20:37:48
【问题描述】:

我的 Node.js 应用使用 Firebase 产品以及在 App Engine 中运行的服务器。 因此,当用户登录时,他应该能够在两个平台上进行身份验证。我为此使用了custom tokens

在服务器中,我调用了admin.auth().createCustomToken(uid) 并将该令牌发送给客户端。
在客户端,我使用firebase.auth().signInWithCustomToken(token) 并登录。一切都很好。

我还阅读了关于令牌 exp field

自 UNIX 纪元以来令牌过期的时间(以秒为单位)。 ...但是一旦您使用 signInWithCustomToken() 让用户登录,他们将保持登录到设备,直到他们的会话无效或用户退出。

因此,Firebase 会处理令牌刷新和所有操作(如果我错了,请纠正我),我不必担心。此外,Firebase 和我的应用使用相同的密钥(服务帐户密钥)来生成令牌。

自定义令牌是签名的 JWT,其中用于签名的私钥属于 Google 服务帐户。

所以生成的令牌在 firebase 和服务器之间是兼容的。

现在,我陷入困境的是,我需要令牌来向 App Engine 服务器进行身份验证。 firebase.auth().signInWithCustomToken(token) 成功后如何从 firebase 获取最新(未过期)令牌?

我本可以在signInWithCustomToken(token) 中使用token。但这可能会在一小时后过期。所以我想我可以依赖 firebase 身份验证。

谢谢。

【问题讨论】:

标签: javascript firebase firebase-authentication


【解决方案1】:

Firebase SDK 自动刷新的短期令牌称为 ID 令牌,您可以通过在 user 对象上调用 getIDToken(false) 来获取它。这会为您提供当前的 ID 令牌,因此它可能会相对较快地过期 - 尽管通常不会持续至少 5 分钟,因为 SDK 会在此时请求新的 ID 令牌。

您还可以通过调用getIDToken(true) 强制SDK 刷新令牌,这意味着您将获得一个有效期约为一小时的令牌。

【讨论】:

  • 好的。这个idToken 不是我们在signInWithCustomToken(token) 中使用的令牌,对吧?因此,如果我们在原始令牌中有一些额外的声明,这些将不会在 idToken 中可用,对吧?
  • ID 令牌包含该用户的自定义声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
相关资源
最近更新 更多