我有一个托管在apache web服务器上的Web应用程序。我有外部Java应用程序,它运行在集成在此Web应用程序中的tomcat上。
apache是kerberized,我获得了在Intranet中访问它的人的用户名。我想使用相同的用户名并在tomcat上传递它以检查ldap并授权用户。
我正在研究支持LDAP模块的JNDI领域。但问题是我无法访问用户的密码。但我能够获得用户所属的组,并基于我想要对用户进行身份验证。
所以我的问题是我是否可以通过LDAP使用用户名而不是密码来验证用户对Tomcat服务器的身份?
PS:抱歉,此时我没有可以发布的代码或配置。我发现的唯一资源实现了用户名和密码。我无法对tomcat服务器进行kerberize,因为我在网络中有其他问题。
答案 0 :(得分:0)
“我正在研究支持LDAP模块的JNDI领域。但问题是我没有 访问用户的密码。但我能够获得用户所属的组和基础 在那我想要验证用户。“
有人要求我写一些代码来做同样的事情。我找到了一种让它发挥作用的方法。但是,虽然它似乎与Internet Explorer一起工作得很好,它会自动检测Windows用户名(因为我的代码解析了一些只有Internet Explorer作为标题传入的NTLM信息),在Firefox或任何其他浏览器中,用户将被呈现使用身份验证框和他们输入的任何用户名都将被接受!它非常不安全。
(好吧,只有IE传入标题才真的不行。只有IE自动传递它;但是Firefox也会在有人获得认证框后输入它并输入他们想要的任何名称。这就是问题所在。)
我建议编写一个C#.NET服务,在IIS的网络服务器上进行真实身份验证并启用集成身份验证。然后,当有人访问Java站点并且用户名会话变量为null时,重定向到C#服务。让C#服务将信息保存在可信/安全的数据库中,包括IP地址和浏览器,并重定向到Java应用程序,该应用程序读取数据库以验证IP地址和浏览器以及刚创建的记录。
编辑:我刚刚注意到你说你的Apache已经被kerberized并且已经获得了Windows用户名,这可能会导致上面解决NTLM头部无效的不可靠性问题。在这种情况下,如果您可以通过LDAP获取AD组,则可以使用自己的代码对webapp中的用户进行身份验证,但可能不使用官方Tomcat身份验证方案。上面描述的仅仅是因为我的Tomcat不是与Apache服务器配对而是与IIS服务器配对。基本上,它是一样的,除了你不需要C#。