gpt4 book ai didi

Java JNDI 查找 Microsoft Active Directory(使用 Tomcat 6),身份验证失败

转载 作者:行者123 更新时间:2023-12-01 05:39:14 24 4
gpt4 key购买 nike

这个想法是通过配置我的 Tomcat 6 容器来执行身份验证(使用用户名 + 密码的基本形式),以便它连接(使用 JNDI 领域)到 Microsoft Active Directory 以检查凭据是否正确。

我找到了很多关于这个主题的文档,但我相信我未能正确配置领域。

这是我在Oracle网站上找到的文档(自Tomcat 4以来恰好是相同的)http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JNDIRealm

发现这个 Oracle 文档非常糟糕,但遇到了其他网站,例如这个 http://www.jspwiki.org/wiki/ActiveDirectoryIntegration详细阐述了该主题。

但是经过多次尝试我仍然无法成功验证:

  1. 当我启动 Tomcat 时,一切看起来都很好,没有出现警告或任何其他错误消息。
  2. 当我尝试进行身份验证时,我总是被重定向到错误页面。并且不会出现警告或任何其他消息。

这些是我尝试过的 2 个 Realm 配置

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
connectionName="test"
connectionPassword="test"
connectionURL="LDAP://subDomain.myDomain.co.uk:389"
userPattern="uid={0},ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk"
roleBase="ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk"
roleName="cn"
roleSearch="memberUid={1}"
/>

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
connectionName="test"
connectionPassword="test"
connectionURL="LDAP://subDomain.myDomain.co.uk:389"
userBase="ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk"
userSearch="(sAMAccountName={0})"
roleBase="ou=Groups,dc=subDomain,dc=myDomain,dc=co,dc=uk"
roleName="cn"
roleSubtree="true"
roleSearch="(member={0})"
/>

我已经使用 LDAP 浏览器测试了连接凭据,效果很好。

这是我的 web.xml

<web-app>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<security-constraint>
<display-name>Example Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Pages</web-resource-name>
<url-pattern>/protected/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>London</role-name>
</auth-constraint>
</security-constraint>

<!-- Default a login configuration that uses form-based authentication -->
<login-config>
<auth-method>FORM</auth-method>
<realm-name>DBRealm</realm-name>
<form-login-config>
<form-login-page>/WEB-INF/login.jsp</form-login-page>
<form-error-page>/WEB-INF/error.jsp</form-error-page>
</form-login-config>
</login-config>

<!-- Define a logical role for this application, needs to be mapped to an actual role at deployment time -->
<security-role>
<description>All Users</description>
<role-name>London</role-name>
</security-role>
</web-app>

提前致谢,答:

最佳答案

您在 AD 中使用 uid 或 memberUid 属性吗?这些都是非典型的。

您可能希望将 userPattern 中的 uid= 替换为 cn=

对于 roleSearch,实际上可能应该是 member=

关于Java JNDI 查找 Microsoft Active Directory(使用 Tomcat 6),身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7572574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com