MongoDB如何存储用户密码

时间:2018-01-21 15:01:39

标签: mongodb authentication cryptography

当我在MongoDB数据库中查询存储用户的集合时,我得到一个这样的文档

{ "_id": "admin.123", "user": "123", "db": "admin", "credentials": { "SCRAM-SHA-1": { "iterationCount": 10000, "salt": "f9SdPCCcBOwk71/xDkj6Sw==", "storedKey": "83mNhTYctOdlYsL1sbnfpiA0uxw=", "serverKey": "09H9aEKKufaoCDxqUkHntx6EqrE=" } }, "roles": [] }

  • 这些数据如何用于验证用户身份?我得到了盐 存储在base64中,iterationCount是它的次数 连接到自身,但两个关键字段代表什么?

  • 这些信息是否公开,因为我找不到 文档中的任何内容?

1 个答案:

答案 0 :(得分:1)

MongoDB支持多个authentication mechanisms,包括社区服务器中的SCRAM-SHA-1,X.509和MONGODB-CR以及企业服务器版本中的GSSAPI(Kerberos)和LDAP。

从MongoDB 3.0开始,MongoDB的默认身份验证机制是SCRAM-SHA-1,它取代了以前的专有MONGODB-CR质询 - 响应身份验证。 SCRAM-SHA-1是IETF标准 - 实现细节可以在RFC-5802: Salted Challenge Response Authentication Mechanism (SCRAM) SASL and GSS-API Mechanisms中找到。

  

这些数据如何用于验证用户?

与其他加密challenge/response protocols一样,一般方法是服务器发送身份验证质询,要求客户端计算正确答案作为密码证明(密码),而不提供实际的明文密码。作为协议的一部分,客户端和服务器根据身份验证算法交换计算正确答案所需变量的一些详细信息(例如saltiterationCount)。

为MongoDB的SCRAM-SHA-1凭证存储的字段是:

  • iterationCount:密钥派生的迭代计数
  • salt:在密钥派生期间使用的每用户随机生成的盐
  • StoredKey:服务器用于验证客户端的身份
  • ServerKey:服务器用来向客户证明其身份

有关MongoDB实施的更多信息,请参阅 MongoDB 3.0中改进的基于密码的身份验证:SCRAM part 1part 2