jakarta-ee - Tomcat、HTTP 身份验证和 Active Directory

标签 jakarta-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 header 的方式,我从 Axis2 用来创建 WebService 的类中检索它(我不知道如何做,也没有搜索过......)并做同样的事情验证。

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

有什么可以从哪里开始的建议吗?

最佳答案

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

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

如果针对 AD 正确配置领域和容器 (Tomcat) 身份验证,则不需要检索 header 或编写任何代码来执行身份验证 - 容器 (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>

关于jakarta-ee - Tomcat、HTTP 身份验证和 Active Directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048261/

相关文章:

Tomcat 中的 Spring Boot .war - 我可以使用外部属性文件吗?

java - Spring安全 session 创建

jakarta-ee - 使用servlet显示网页中的文件列表

java - 使用java查找文本文件中单词的行号

android - Android M版本中如何根据指纹识别用户?

java - websphere 和 tomcat 之间的共享安全性

java - 将参数传递给 tomcat 实例的最佳方式是什么?

javascript - 如何在express(nodejs)中的路由之间共享/存储数据?

android - 基本认证 android UrlConnection Get

java - 设置 maxHttpHeaderSize 属性 tomcat maven 插件