Firebase 如何撤销身份验证令牌?

Firebase 如何撤销身份验证令牌?,firebase,firebase-security,Firebase,Firebase Security,假设我生成了一个身份验证令牌,为了节省处理和远程调用的时间,我将其过期数据设置为未来30天左右 现在我想从我的系统中删除这个帐户,有没有办法撤销我给客户端的身份验证令牌 我认为目前这是不可能的,我当然可以解决这一问题(主要是因为没有这么高的过期时间),但我只是想确保我没有遗漏文档中的某些内容。您不能真正撤销该特定令牌(除了使生成令牌的密钥无效之外,还将使该密钥发布的所有其他令牌无效——可能不是您想要的) 但是,您可以依赖特定于令牌的某些信息(可能您在令牌中包含了一个唯一的用户ID作为数据),并更

假设我生成了一个身份验证令牌,为了节省处理和远程调用的时间,我将其过期数据设置为未来30天左右

现在我想从我的系统中删除这个帐户,有没有办法撤销我给客户端的身份验证令牌


我认为目前这是不可能的,我当然可以解决这一问题(主要是因为没有这么高的过期时间),但我只是想确保我没有遗漏文档中的某些内容。

您不能真正撤销该特定令牌(除了使生成令牌的密钥无效之外,还将使该密钥发布的所有其他令牌无效——可能不是您想要的)


但是,您可以依赖特定于令牌的某些信息(可能您在令牌中包含了一个唯一的用户ID作为数据),并更新安全规则以拒绝任何与该值匹配的操作。

Firebase现在提供了撤销刷新令牌的能力,这是非常新鲜的-于2018年1月4日添加。

添加到@Alex Redwood的答案中

这是重要的部分:

return admin.auth().revokeRefreshTokens(uid)
    .then(() => {
      // Get user's tokensValidAfterTime.
      return admin.auth().getUser(uid);
    })
文档中的示例有各种不同的情况,比如向数据库写入时间戳以防止在当前令牌过期之前读取,这是非常具体的实现情况。重要的部分是调用
revokefreshttokens(uid)
在正确的
uid
上,验证
userRecord
是否修改了
userRecord.tokensValidAfterTime
值。这不会使活动令牌过期。因此,缩短过期时间以缩短攻击窗口是很有价值的(在我看来,这是比检查时间戳的数据库规则更好的解决方案)

发件人:

使用CLI:

firebase logout --token <token>
firebase注销--令牌

另请参见:这是一个边界。您应该在此处扩展您的答案,以包含尽可能多的信息,并仅将链接用于参考。这是一个非常新的功能,我相信我们大多数人在自己完全实现它们之前都不愿意提供示例。以下是我的尝试:从这里开始:编辑:我将把它移动到自己的swer,似乎我不知道如何在注释中放置代码块。如何设置过期时间?Firebase的刷新令牌有无限的时间窗口。“刷新令牌仅在以下情况之一发生时过期:用户被删除用户被禁用用户检测到重大帐户更改。这包括密码或电子邮件地址更新等事件。”发件人:因此开发人员必须编写自己的逻辑,以便在特定时间撤销用户的所有令牌。您编写了”因此,缩短到期时间以缩短攻击窗口是很有价值的。”我还以为你说的是ID令牌。因为这些令牌每小时到期一次,即使刷新令牌被撤销。自2018年以来,出于某种原因,我没有在(新)项目上使用firebase。我的(日期)理解是,当您撤销刷新令牌时,firebase将不允许用户刷新jwt令牌,因此jwt的到期时间很短(比如30分钟)我们将过滤后的jwt的攻击时间限制为jwt的到期时间。因此,如果您有办法撤销可疑活动的刷新令牌,则设置较短的到期时间是很有价值的。(继续新评论)哦,明白了,很抱歉没有在开始时详细解释。我的帖子通常假设您的应用程序使用的是自定义令牌,这样可以更好地控制您的应用程序。@thisismydesign这里有一个链接,指向创建自定义令牌的文档:自定义令牌是对应用程序进行细粒度控制的基本要求在FialBASE(甚至在那时,它仍然是限制性的)。这个答案是过时的,请考虑更新它,如下面的答案或删除它。