HTTP摘要式身份验证

dea*_*mon 15 apache security authentication http digest

我想将HTTP摘要式身份验证与存储用户名和加密密码的中央数据库一起使用.这些数据应该由不同的服务器使用,例如Apache httpd或Tomcat.客户端将是人类,浏览器和其他应用程序以RESTful方式进行通信.

据我所知,我无法使用带有散列密码的表.只能存储 HA1 = MD5(用户名:域名:密码),其中需要明文密码 - 对吗?

另一方面,似乎可以在Apache httpd中使用散列密码:

Apache httpd doc说:

查询语句返回的第一行的第一列值应该是包含加密密码的字符串.

它是否适用于摘要式身份验证?没有参数来指定哈希算法.Apache httpd如何决定使用哪种算法?

RFC 2617说:

4.13存储密码

摘要式身份验证要求身份验证代理(通常是服务器)将从用户名和密码派生的一些数据存储在与给定领域关联的"密码文件"中.通常,这可能包含由用户名和H(A1)组成的对,其中H(A1)是如上所述的用户名,领域和密码的消化值.

听起来密码必须是明文.

Servlet 3.0规范说:

虽然密码不是通过线路发送的,但HTTP摘要身份验证要求对验证容器提供明文密码等效,以便它可以通过计算预期的摘要来验证收到的验证者.

这里的"明文密码等价"是什么?密码哈希?

Tomcat文档说:

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

这是一个需要明文密码.

那么,HTTP摘要身份验证是否可以与已加密的密码一起使用,或者密码是否为明文?

如果用户请求来自其他子域的页面,用户是否必须重新输入其凭据?

选项卡关闭时或仅当整个选项卡关闭时,浏览器是否会删除缓存的密码?也许这在浏览器与浏览器之间有所不同 - 我对哪个浏览器删除它以及保留它有兴趣.

总体问题是,摘要式身份验证是否适用于具有已加密密码的中央用户数据库的情况.或者我应该更好地使用基于会话的单点登录服务?

Ped*_*una 6

在这种已经存在散列密码数据库的情况下,只要不使用相同的函数进行散列,就不可能使用摘要式身份验证.

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