0

我有一个托管在 apache Web 服务器上的 Web 应用程序。我有外部 java 应用程序,它在集成在这个 web 应用程序中的 tomcat 上运行。

apache 是 kerberized,我得到了在 Intranet 中访问它的人的用户名。我想使用相同的用户名并将其传递给 tomcat 以检查 ldap 并授权用户。

我正在研究支持 LDAP 模块的 JNDI 领域。但问题是我无权访问用户的密码。但我能够获取用户所属的组,并基于我想要对用户进行身份验证。

所以我的问题是我是否能够通过 LDAP 仅使用用户名而不是密码对 Tomcat 服务器的用户进行身份验证?

PS:抱歉,此时我无法发布任何代码或配置。我发现的唯一资源同时实现了用户名和密码。我无法对 tomcat 服务器进行 kerberize 处理,因为我在网络中有其他问题。

4

1 回答 1

0

“我正在研究支持 LDAP 模块的 JNDI 领域。但问题是我无权访问用户的密码。但我能够获取用户所属的组,并基于我想要对用户进行身份验证。 "

有一次我被要求编写一些代码来做同样的事情。我找到了让它工作的方法。然而,尽管它似乎与 Internet Explorer 一起工作得很好,它会自动检测 Windows 用户名(因为我的代码正在解析一些只有 Internet Explorer 作为标头传入的 NTLM 信息),但在 Firefox 或任何其他浏览器中,用户将被呈现带有身份验证框,他们输入的任何用户名都将被接受!它非常不安全。

(好吧,只有 IE 将标头传递进来并不是真的。只有 IE 会自动传递它;但是 Firefox 也会在有人获得身份验证框并输入他们想要的任何名称后传递它。这就是问题所在。)

我的建议是编写一个 C#.NET 服务来在一个 IIS 并具有集成身份验证的网络服务器上进行真正的身份验证。然后,当有人访问 Java 站点并且用户名会话变量为空时,重定向到 C# 服务。让 C# 服务将信息保存在受信任/安全的数据库中,包括 IP 地址和浏览器,并重定向到 Java 应用程序,该应用程序读取数据库以验证 IP 地址和浏览器以及刚刚创建的记录。

编辑:我刚刚注意到你说你的 Apache 是 kerberized 并且已经获得了 Windows 用户名,这可能会导致上面关于解析 NTLM 标头的不可靠性的问题无效。在这种情况下,如果您可以通过 LDAP 获取 AD 组,您可以使用您自己的代码在您的 web 应用程序中对用户进行身份验证,但可能不使用官方的 Tomcat 身份验证方案。上面描述的只是因为我的Tomcat没有与Apache服务器配对,而是与IIS服务器配对。所以基本上,它是一样的,除了你不需要 C#。

于 2013-04-26T19:05:09.363 回答