【问题标题】:How to decrypt the encrypted UID using firestore security rules? [closed]如何使用 Firestore 安全规则解密加密的 UID? [关闭]
【发布时间】:2020-06-02 16:59:49
【问题描述】:
  1. 我得到uid,当用户第一次登录到firebase 使用phone number
  2. 然后我加密了uid
  3. 然后我在 Firestore 中创建了一个 CollectionusersDocument Id uid 如下:users/uid

  4. 现在用户想要写入users/userId,如果 conditiontrue,如下所示:

  match /users/{userId} {
     allow write: if request.auth.uid == userId;
  }

正如我在number 2 中提到的,userId 已加密,但 request.auth.uid 未加密。

那么我们如何在这里解密(userId)

如果我使用散列 sha256,那么如何在客户端解码 sha256?

我正在使用crypto-js

【问题讨论】:

  • 我不知道为什么人们投票反对,而不是一些他们的好意的方向
  • 您可能想要编辑您的问题以显示有关您要完成的任务的更多详细信息,包括您拥有的任何现有代码。
  • 我已编辑您现在可以看到已编辑的问题

标签: javascript firebase google-cloud-firestore firebase-security


【解决方案1】:

根据文档,您可以use hashed values in security rules。如果您不使用所描述的散列算法之一,那么它将不起作用。您可以在release notes 中了解它的工作原理:

新的散列和散列相邻方法是:

hashing.crc32()
hashing.crc32c()
hashing.sha256()
hashing.md5()
<ByteValue>.toBase64()
<ByteValue>.toHexString()
<String>.toUtf8()

例如,以前,如果 Firestore 中的电子邮件版本是 使用 SHA-256 散列,您将无法将该电子邮件与 与 auth 对象一起发送的纯文本电子邮件。现在您可以:

hashing.sha256(request.auth.email.utf8()) == resource.data.ownerEmailHash

或者,如果您在文档中有一个字段供用户存储 他们的中篇小说,你可能想要一个更短的标识符 很长的字符串:

match /novellas/{hash} {
 allow write: if hash == hashing.sha256(request.resource.data.
           novella.utf8()) && resource == null
}

字符串被视为 UTF-8 编码的字节,返回值为 字节类型:

hashing.md5("Tag".utf8()) => b"wQEFjn6iG7vypayJMIjpCw=="

【讨论】:

  • 谢谢,我也可以在客户端使用哈希吗??而不是crypto-js?
  • 如果您向我展示我需要例如在客户端 JavaScript 中使用 hash256 加密,然后在安全规则中解密,我会很高兴
  • 你必须找到一个图书馆才能做到这一点。我无法提出建议。我相信网络搜索会对您有所帮助。
  • 所以请只告诉我安全规则,例如如果我的uid 已经被散列,那么它会像下面这样工作:hashing.sha256(request.auth.uid.utf8()) == userId
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 2018-06-15
  • 2021-03-17
  • 2019-01-07
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多