如何撤销身份验证令牌?

TTi*_*imo 10 firebase firebase-security

假设我生成了一个身份验证令牌,为了节省处理和远程调用,我将来的30天内设置了它的到期数据.

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

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

小智 11

Firebase现在提供撤销刷新令牌的功能,它非常新鲜 - 添加04/01/2018. https://firebase.google.com/docs/auth/admin/manage-sessions#revoke_refresh_tokens

  • 这是一个界限[仅链接的答案](// meta.stackexchange.com/q/8231)。您应该扩展答案以在此处包含尽可能多的信息,并且仅将链接用作参考。 (2认同)

Ana*_*ant 6

你无法真正撤销该特定令牌(在使生成令牌的秘密失效之外,但这也会使该秘密发出的所有其他令牌无效 - 可能不是你想要的).

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


Lev*_*evi 5

添加@Alex Redwood 的答案

这是重要的部分:

return admin.auth().revokeRefreshTokens(uid)
    .then(() => {
      // Get user's tokensValidAfterTime.
      return admin.auth().getUser(uid);
    })
Run Code Online (Sandbox Code Playgroud)

文档中的示例具有各种细微差别的情况,例如向数据库写入时间戳以防止在当前令牌过期之前进行读取,这是非常具体的实现情况。重要的部分是您调用revokeRefreshTokens(uid)正确的uid,并验证是否userRecord已修改该userRecord.tokensValidAfterTime值。这不会使您的活动令牌过期。因此,缩短到期时间以缩短攻击窗口是很有价值的(在我看来,这是比检查时间戳的数据库规则更好的解决方案)。

来自: https: //firebase.google.com/docs/auth/admin/manage-sessions#revoke_refresh_tokens