java - 向 LDAP 服务器代理 HTTP 摘要认证请求

标签 java http authentication ldap digest-authentication

最近我们一直致力于一个项目,将我们的 Tomcat 网络服务器与移动设备上的几个特定服务集成在一起。在与设备(通过 HTTP)交互期间,我们可以做的一件事是让设备提示用户输入凭据。用户输入凭据后,我们的服务器会收到一个 HTTP post,其中包含标准 HTTP 摘要身份验证 header (带有 nonce、领域、响应等的授权 header )。没什么大惊喜。

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

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

谢谢!

最佳答案

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

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

关于java - 向 LDAP 服务器代理 HTTP 摘要认证请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925108/

相关文章:

java - ApplicationContextAware 在 Spring 3.0 中不起作用

java - getTouchMajor() 不精确 : I can not get real value about the touch area length

java - Tomcat 在一定数量的请求后拒绝连接

iphone - 通过检测 URL scheme 替换本地资源

Android:在向量中访问 http 服务器而不是 https(Android Matrix 客户端)

c# - 尝试从 forumsys 测试基于 LDAP 的身份验证?

javascript - 我希望我的登录弹出窗口不显示底部的滚动条

php - php 中的 sql 运行时不返回任何内容

java - FTPClient listFiles 方法返回目录。我该如何过滤?

java - Android:在应用程序生命周期中仅初始化一次套接字