对LDAP服务器的代理HTTP摘要认证请求

时间:2014-01-04 18:42:10

标签: java http authentication ldap digest-authentication

最近,我们一直在开发一个项目,该项目将我们的Tomcat Web服务器与移动设备上的一些特定服务集成在一起。在我们与设备交互(通过HTTP)期间我们可以做的事情之一是让设备提示用户提供凭据。用户输入凭据后,我们的服务器会收到一个HTTP帖子,其中包含标准HTTP摘要认证标头(带有nonce,realm,response等的授权标头)。没有什么大惊喜。

我们的服务器(按设计)实际上并不包含任何用户的密码。我们保留了密码的SHA512哈希值。对于本地用户,我们可以在登录到应用程序时开始存储“用户名:realm:password”的MD5。当您不存储密码时,这是处理摘要身份验证的常用方法吗?

更重要的是,我们通过我们为验证编写的一些JNDI代码与LDAP服务器进行交互。由于设备被强制通过http与我们的服务器进行身份验证,而digest是唯一受支持的授权方法,我们似乎无法找到使用摘要响应通过LDAP对用户进行身份验证的方法。从概念上讲,你能够“代理”摘要请求似乎并不正确。是否有工作流程允许这种类型的“通过”身份验证,如果是这样,它甚至是一个好主意?

谢谢!

1 个答案:

答案 0 :(得分:3)

一种方法是在客户端和服务器之间使用HTTPS进行简单身份验证,然后对LDAP服务器使用密码。您无需存储密码,因为它将在每次登录时由客户端提供。例如,您可以根据存储的SHA512(password)验证密码,然后将清除密码传递给LDAP服务器。

如果您无法使用HTTPS,或者服务器因信任密码而不受信任,则事情会更复杂,因为您无法从提供的MD5摘要中计算SASL响应(除非LDAP服务器使用DIGEST-MD5机制,已经过时了。 在这种情况下,您可以代理LDAP服务器和客户端之间的整个SASL身份验证交换,并让客户端通过AJAX发送响应。然后,密码的知识将仅限于客户端。