Sta*_*ros 9 java authentication ldap http digest-authentication
最近,我们一直致力于一个项目,该项目将我们的Tomcat Web服务器与移动设备上的一些特定服务集成在一起.在我们与设备交互(通过HTTP)期间我们可以做的事情之一是让设备提示用户提供凭据.用户输入凭据后,我们的服务器会收到一个HTTP帖子,其中包含标准HTTP摘要认证标头(带有nonce,realm,response等的授权标头).没有什么大惊喜.
我们的服务器(按设计)实际上并不包含任何用户的密码.我们保留了密码的SHA512哈希值.对于本地用户,我们可以在登录到应用程序时开始存储"用户名:realm:password"的MD5.当您不存储密码时,这是处理摘要身份验证的常用方法吗?
更重要的是,我们通过我们为验证编写的一些JNDI代码与LDAP服务器进行交互.由于设备被强制通过http与我们的服务器进行身份验证,而digest是唯一支持的授权方法,我们似乎无法找到使用摘要响应通过LDAP对用户进行身份验证的方法.从概念上讲,你能够"代理"摘要请求似乎并不正确.是否有工作流程允许这种类型的"通过"身份验证,如果是这样,它甚至是一个好主意?
谢谢!
一种方法是在客户端和服务器之间通过 HTTPS 使用简单的身份验证,然后针对 LDAP 服务器使用密码。您不需要存储密码,因为客户端将在每次登录时提供该密码。例如,您可以根据存储的 验证密码SHA512(password),然后将明文密码传递到 LDAP 服务器。
如果您无法使用 HTTPS,或者不信任服务器知道密码,那么事情会更加复杂,因为您无法根据提供的 MD5 摘要计算 SASL 响应(除非 LDAP 服务器使用已过时的 DIGEST-MD5 机制) 。在这种情况下,您可以代理 LDAP 服务器和客户端之间的整个 SASL 身份验证交换,并让客户端通过 AJAX 发送响应。然后,密码的知晓将仅限于客户端。