Tomcat,HTTP身份验证和Active Directory

时间:2013-02-24 03:14:36

标签: java-ee authentication tomcat active-directory http-authentication

在我们的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。我宁愿使用不需要第三方库的原生解决方案。

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

2 个答案:

答案 0 :(得分:2)

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

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

如果您正确配置领域和容器(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>

答案 1 :(得分:1)

Active Directory环境中唯一合理的方法是仅使用Kerberos。用户的最佳方法是Kerberos。如果您使用的是Tomcat 7,则内置支持。 Java 6拥有一切可以使它工作的东西。这就是我多年来所做的事情。