成功将 dovecot 和 roundcube 中的身份验证机制从 MD5 切换到 SHA512-CRYPT 后,我努力让 Horde 使用自定义 SQL 查询进行身份验证。
设置$conf['auth']['params']['encryption'] = 'crypt-sha512';
没有太大帮助。
不知何故,占位符返回的哈希\P
似乎被截断了:它是很多太短,等于输出crypt-sha256
,除此之外甚至看起来都不正确。不用说,它与数据库中的哈希不匹配。
通过 Google 搜索并没有真正找到答案,所以我依赖于你的知识。这家伙似乎至少有一个稍微相似的设置,并正在获得合理的哈希值。
这是 php 问题还是 horde 问题?还是只有我一个人有这种问题?
答案1
啊啊。好的。我发现我的错误了。为了确定密码,我还需要修改查询,因为我必须删除前导的 {SHA512-CRYPT}:
$conf['auth']['params']['query_getpw'] = 'SELECT SUBSTRING_INDEX(password,\'}\',-1) FROM virtual_users WHERE email = \L';
然后
$conf['auth']['params']['query_auth'] = 'SELECT * FROM virtual_users WHERE email = \L AND password = concat(\'{SHA512-CRYPT}\',\P)';
有用:)
答案2
$conf['auth']['params']['query_auth'] = 'SELECT * FROM virtual_users WHERE email = \L AND password = concat(\'{SHA512-CRYPT}\',ENCRYPT(\P, SUBSTRING_INDEX(`password`,\'}\',-1)))';
和
$conf['auth']['params']['encryption'] = 'plain';
对我来说似乎有效。但我更愿意使用没有明文密码的 SQL 查询。它不是像第一个问题中预期的那样工作吗?