使用Apache mod_auth_basic和mod_authn_dbd,您可以通过在数据库中查找该用户的密码来验证用户身份。我看到如果密码是明确的,那么工作,但如果我们使用随机字符串作为盐(也存储在数据库中)然后存储连接的哈希值呢?
mod_authn_dbd要求您指定一个查询来选择该密码,以便不确定用户是否通过了身份验证。因此,您无法使用该查询将用户提供的密码与salt连接,然后与存储的哈希值进行比较。
AuthDBDUserRealmQuery "SELECT password FROM authn WHERE user = %s AND realm = %s"
有没有办法让这项工作?
答案 0 :(得分:0)
查看基本身份验证的Password Formats,如果使用apr_md5_encode函数完成哈希,我似乎可以完成这项工作。
找到与此相关的another question并链接到Java implementation。我使用该实现进行了一些小改动来计算我的网站普通用户创建流程中的数据库哈希。在此之后我可以将mod_authn_dbd用于此查询:
AuthDBDUserRealmQuery "SELECT CONCAT('$apr1$',password_salt,'$',password_hash) FROM users WHERE user = %s AND realm = %s"