HTTP摘要认证

16
我希望使用HTTP Digest身份验证和一个中央数据库存储用户名和加密密码,这些数据应该被不同的服务器使用,例如Apache httpd或Tomcat。客户端将是使用RESTful方式通信的浏览器和其他应用程序用户。
据我所知,我不能使用哈希密码表,只能存储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"是什么?密码哈希吗?

Tomcat documentation说:

如果使用DIGEST身份验证和消化密码,则用于生成摘要的明文是不同的。在上面的示例中,{cleartext-password}必须被替换为{username}:{realm}:{cleartext-password}。例如,在开发环境中,这可能采用以下形式testUser:localhost:8080:testPassword。

这里需要一个明文密码。

因此,HTTP摘要身份验证是否可以与已加密的密码一起使用,还是必须使用明文密码?

如果用户从不同的子域请求页面,他是否需要重新输入凭据?

当选项卡关闭时,浏览器是否删除缓存的密码,还是只有整个浏览器关闭时才删除?也许这因浏览器而异 - 我对哪些浏览器会删除它,哪些浏览器会保留它感兴趣。

总体问题是,摘要认证是否适用于我的方案,其中包含具有已加密密码的中央用户数据库。或者我应该使用基于会话的单点登录服务?

2个回答

6

在这种情况下,你已经有了一个散列密码的数据库,如果它们没有使用相同的函数进行哈希,则无法使用摘要认证。

我认为在这里最好的解决方案是创建一个登录页面,并使用cookie会话来控制用户的权限。通过这个解决方案,您可以得到其他问题的答案:


我使用MD5对我的数据库中的密码进行哈希处理,是否可以使用摘要认证? - vrunoa

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接