据我所知,我不能使用哈希密码表,只能存储HA1 = MD5(username:realm:password),其中需要明文密码-正确吗?
另一方面,似乎可以在Apache httpd中使用哈希密码: Apache httpd doc说:
第一个列值返回查询语句的第一行应该是包含加密密码的字符串。
这是否适用于摘要身份验证?没有参数指定哈希算法。Apache httpd如何决定使用哪个算法? RFC 2617说:
4.13 存储密码
Digest身份验证要求认证代理(通常是服务器)将从用户的用户名和密码派生的一些数据存储在与给定领域关联的"密码文件"中。通常,这可能包含由用户名和H(A1)组成的对,其中H(A1)是如上所述的用户名、领域和密码的消化值。
听起来密码必须为明文。
Servlet 3.0规范说:
尽管密码不会在网络上传输,但HTTP摘要认证要求认证容器具有可用于验证计算期望摘要的接收认证器的清晰文本密码等价物。
这里的"clear text password equivalent"是什么?密码哈希吗?
如果使用DIGEST身份验证和消化密码,则用于生成摘要的明文是不同的。在上面的示例中,{cleartext-password}必须被替换为{username}:{realm}:{cleartext-password}。例如,在开发环境中,这可能采用以下形式testUser:localhost:8080:testPassword。
这里需要一个明文密码。
因此,HTTP摘要身份验证是否可以与已加密的密码一起使用,还是必须使用明文密码?
如果用户从不同的子域请求页面,他是否需要重新输入凭据?
当选项卡关闭时,浏览器是否删除缓存的密码,还是只有整个浏览器关闭时才删除?也许这因浏览器而异 - 我对哪些浏览器会删除它,哪些浏览器会保留它感兴趣。
总体问题是,摘要认证是否适用于我的方案,其中包含具有已加密密码的中央用户数据库。或者我应该使用基于会话的单点登录服务?