0

我正在使用 Firebase 身份验证登录我的应用,并使用 Firebase 存储来保存一些文件。

问题是,即使我已经定义了这样的存储安全规则:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth!=null;
    }
  }
}

当我从 Authentication Firebase 手动面板中删除或禁用用户时,该用户仍然可以在我们的存储中添加和删除文件。

使用上述规则,我想防止用户在未通过身份验证时读/写。

根据文档:

https://firebase.google.com/docs/auth/admin/manage-sessions

刷新令牌仅在以下情况之一发生时过期: - 用户被删除

从理论上讲,它应该有效。为什么不是?以及如何解决它,知道吗?

4

2 回答 2

0

Firebase 身份验证使用有效期为一小时的 ID 令牌。在用户的现有令牌过期之前,他们可以继续使用该令牌来访问资源。但是他们将无法获得新的 ID 令牌,因此在他们失去完全访问权限之前不会超过一个小时。

如果这对您的方案来说还不够好,您将需要采取额外措施来保护文件。

对于数据库中的数据,文档显示了如何在安全规则中检测 ID 令牌撤销。但这种方法不适用于 Cloud Storage,因为您无法在其中查找已撤销的令牌。

对于 Cloud Storage,您可以实现自己的 API 来控制对文件的访问,然后您可以在其中对已撤销的令牌执行相同的查找。这是我能想到的实现立即撤销的唯一方法。

于 2021-06-21T13:35:18.823 回答
0
allow read, write: if request.auth!=null;

通过添加上述规则,您将您的云存储设为私有,即只允许经过身份验证的用户查看或编辑。

根据文档,您可以通过以下方式删除用户

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");

当删除成功完成时,delete user 方法返回一个空结果。

如果提供的 uid 与现有用户不对应,或者由于任何其他原因无法删除用户,则 delete user 方法会引发错误。

或者,您可以按照此文档revoke refresh user token 来撤销用户令牌

Firebase ID 令牌是短暂的,持续一个小时;刷新令牌可用于检索新的 ID 令牌。刷新令牌仅在发生以下情况之一时过期:

用户被删除 用户被禁用 检测到用户的主要帐户更改。这包括密码或电子邮件地址更新等事件。

Firebase Admin SDK 提供了撤销指定用户的刷新令牌的能力。此外,还提供了用于检查 ID 令牌撤销的 API。借助这些功能,您可以更好地控制用户会话。

或者为了增强安全措施,您可以通过点击此链接在数据库规则中检测 ID 令牌撤销。

于 2021-06-21T14:30:05.330 回答