Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 到LDAP服务器的代理HTTP摘要身份验证请求_Java_Http_Authentication_Ldap_Digest Authentication - Fatal编程技术网

Java 到LDAP服务器的代理HTTP摘要身份验证请求

Java 到LDAP服务器的代理HTTP摘要身份验证请求,java,http,authentication,ldap,digest-authentication,Java,Http,Authentication,Ldap,Digest Authentication,最近,我们正在进行一个项目,该项目将我们的Tomcat web服务器与移动设备上的一些特定服务集成在一起。在与设备交互(通过HTTP)期间,我们可以做的一件事是让设备提示用户输入凭据。用户输入凭据后,我们的服务器将收到一个HTTP post,其中包含标准HTTP摘要身份验证头(带有nonce、realm、response等的授权头)。没有什么大的意外 我们的服务器(按设计)实际上不包含任何用户的密码。我们保留了他们的密码。对于本地用户,我们可以在登录到应用程序时开始存储“username:rea

最近,我们正在进行一个项目,该项目将我们的Tomcat web服务器与移动设备上的一些特定服务集成在一起。在与设备交互(通过HTTP)期间,我们可以做的一件事是让设备提示用户输入凭据。用户输入凭据后,我们的服务器将收到一个HTTP post,其中包含标准HTTP摘要身份验证头(带有nonce、realm、response等的授权头)。没有什么大的意外

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

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


谢谢

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

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

谢谢你的意见。目前,移动设备支持的唯一身份验证方法是摘要。如果不是摘要,该设备基本上会忽略我们在“WWW-Authenticate”中输入的内容。因此,通过HTTPS使用简单(基本?)身份验证不是一个选项。代理SASL身份验证交换的建议是我们感兴趣的。我们在过去几天才开始深入研究SASL。您是否还有其他资源可以帮助我们开始研究?如果设备支持HTTPS,您可以通过POST发送密码,而不是使用HTTP身份验证机制。对于另一种方法,似乎有javascript SASL实现,但我没有尝试过。遗憾的是,我们无法控制设备如何与我们通信。我们正在通过API与设备上的服务进行交互。因此,实现JavaScript前端对我们没有多大好处。我们无法修改设备的行为来向我们发送密码。