如何撤销身份验证令牌?

问题描述 投票:0回答:4

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

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

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

firebase firebase-security
4个回答
16
投票

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


7
投票

您无法真正撤销该特定令牌(除了使生成该令牌的秘密无效之外,但这也会使该秘密颁发的所有其他令牌无效 - 可能不是您想要的)。

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


5
投票

添加@Alex Redwood 的答案

这是重要的部分:

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

文档中的示例具有各种细微差别的情况,例如向数据库写入时间戳以防止在当前令牌过期之前进行读取,这是非常具体的实现情况。重要的是您在正确的

revokeRefreshTokens(uid)
上调用
uid
,并验证
userRecord
是否已修改
userRecord.tokensValidAfterTime
值。这不会使您的活动令牌过期。因此,缩短到期时间以缩短攻击窗口是很有价值的(在我看来,这是比检查时间戳的数据库规则更好的解决方案)。

admin.auth().verifyIdToken(token, true); 验证令牌时,请确保将 verifyIdToken 的第二个选项设置为 true。否则,firebase auth 仍将接受撤销的令牌。

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


© www.soinside.com 2019 - 2024. All rights reserved.