密码哈希算法

我想将 Discourse 中存储的密码哈希用于另一个应用的 htpassword 文件。

Discourse 使用哪种密码哈希算法?

抱歉,如果我理解有误,您的意思是想在自己的应用中复制 Discourse 的哈希算法,以便将您的应用生成的哈希值与 Discourse 存储的哈希值进行匹配吗?这样做是否需要您定期将 Discourse 的密码同步到您的 htpasswd 文件中,处理 Discourse 当前或未来可能使用的盐值,并确保您的哈希算法实现永远与 Discourse 的算法保持同步?

再次抱歉,如果我完全误解了,但出于好奇,我不得不请求澄清。

只是为了验证用户名和密码是否有效。

用户提供用户名和密码。我们根据来自 Discourse 的哈希来验证提供的密码是否有效。我们不会生成任何哈希。

我所说的“生成”并非指存储,而是指验证密码是否正确。


我想知道 Discourse 是否支持反向的 SSO,以便人们可以直接通过 Discourse 登录到其他应用。

是的,Discourse 可以用作登录的权威来源,@csmu 您的路径是正确的。尝试复制哈希方法意味着每次哈希方法变更时,您的登录功能都会失效。

此外,这种方法也无法处理那些没有本地密码的用户。

如果您不愿意或无法阅读源代码来找到您所提问题的答案,那么最好退一步,描述一下您试图解决什么问题。

一旦找到源代码,我就能阅读。我查找了源代码中的 user.password,并主要关注了 user_controller。但没有发现任何明显的问题。如果您能指点我该去哪里查找,我将不胜感激。

对我来说,如果能通过 Discourse 验证用户名/密码,而无需添加 SSO 登录/注册功能,那就太好了。也许可以通过 API 或直接调用某些 Ruby 代码来实现。

哦,是的。只有在知道相关位置后,Rails 才有意义。这里是这个:

但我仍然建议先退一步描述问题,而不是直接从你的解决方案开始。

谢谢 Jay ——

在阅读了 user.rb 中的以下代码后:

 def confirm_password?(password)
    return false unless password_hash && salt
    self.password_hash == hash_password(password, salt)
  end

以下方法适用于纯 Ruby 验证:

user = User.find_by_email('some.email.address')
user.confirm_password?('valid-password')
=> true

我当时正在为服务器配置 .htaccess 文件,并寻找一种通过 Discourse 验证用户名和密码的方法,而无需知道密码来生成 .htaccess 文件。SSO 方法更好,但了解如何在不用 SSO 的情况下验证用户名和密码对我而言也很有用。

你好,

我想了解一下本地登录所使用的密码哈希函数及其相关参数(哈希长度、盐值、实际调用的库)。之前查看提到的 Ruby 文件并未帮到我。出于合规需求,我需要这些信息:遵循 GDPR 的最佳实践(以及更广泛的系统安全领域)要求我记录这些信息。

编辑:在此找到了答案:Export password hashes in the PHC formatdiscourse/docs/SECURITY.md at main · discourse/discourse · GitHub