0

在我们的 Intranet 中,所有用户都从 Active Directory 域登录 Windows。我必须开发一种针对 Active Directory 对用户进行身份验证的解决方案,该解决方案在 Tomcat 中运行并适用于 Servlet 和 Axis2。

我已经能够使用基本的 JavaSE 手动验证身份验证。我还创建了一个测试 Servlet,它从 POST 接收登录名和密码并且它也经过身份验证,所以如果我使用 HTTPS,至少我可以使用这个丑陋的解决方案。

我认为 HTTP 身份验证是最好的方法,因为它是 HTTP 标准,适用于 Servlet 和 Axis2 以及浏览器和任何类型的 SOAP 客户端。

对于浏览器,期望的行为是浏览器将打开登录模式窗口,用户将输入登录名和密码,我从 Servlet 中检索它们并针对 AD 进行验证。对于 Axis2,客户端处理其设置 HTTP 标头的方式,我从 Axis2 用于创建 WebService 的类中检索它(如何做到这一点我不知道也没有搜索过......)并做同样的事情确认。

问题是我面临着很多可能性,无法让其中任何一个发挥作用。大多数教程使用conf/tomcat-users.xml并且从不给我密码。其他人使用 NTLM 或 Kerberos,我已经尝试将 spnego 用于 Servlet,但它根本不起作用,并且不适用于 Axis2。我宁愿使用不需要第三方库的本机解决方案。

关于我可以从哪里开始的任何建议?

4

2 回答 2

2

看来您不需要用户单点登录。在这种情况下,您不需要 NTLM 或 Kerberos。您只需要使用 Active Directory 进行服务器端身份验证。

幸运的是,AD 将自己暴露为 LDAP,但有一些怪癖。请查看此答案: Configuring Tomcat to authentication using Windows Active Directory

如果针对 AD 正确配置领域和容器 (Tomcat) 身份验证,则无需检索标头或编写任何代码来进行身份验证 - 容器 (Tomcat) 将为您完成。

编辑:

Web XML 示例:

 <security-constraint>
  <web-resource-collection>
    <web-resource-name>Wildcard means whole app</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>user</role-name>
  </auth-constraint>
 </security-constraint>

      <login-config>
          <auth-method>BASIC</auth-method>
          <realm-name>default</realm-name>
      </login-config>
        <security-role>
           <role-name>user</role-name>
       </security-role>
于 2013-02-24T03:24:49.197 回答
1

Active Directory 环境中唯一合理的方法是仅使用 Kerberos。对用户最好的方法是 Kerberos。如果您使用的是 Tomcat 7,则您有内置支持。Java 6 具备使其工作的一切。这就是我多年来一直在做的事情。

于 2013-02-24T11:57:42.710 回答