假设我生成了一个身份验证令牌,为了节省处理和远程调用,我将其过期数据设置为未来大约 30 天。
现在我想从我的系统中删除这个帐户,有没有办法撤销我给客户端的身份验证令牌?
我认为目前这是不可能的,我当然可以解决这个问题(主要是没有那么长的过期时间),但我只是想确保我没有错过文档中的某些内容。
Firebase 现在提供撤销刷新令牌的功能,它非常新鲜 - 于 2018 年 4 月 1 日添加。 https://firebase.google.com/docs/auth/admin/manage-sessions#revoke_refresh_tokens
您无法真正撤销该特定令牌(除了使生成该令牌的秘密无效之外,但这也会使该秘密颁发的所有其他令牌无效 - 可能不是您想要的)。
但是,您可以依赖特定于令牌的一些信息(也许您在令牌中包含了唯一的用户 ID 作为数据)并更新安全规则以拒绝与该值匹配的任何操作。
添加@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
使用 CLI:
firebase logout --token <token>
https://firebaseopensource.com/projects/firebase/firebase-tools/#using_with%20ci%20systems