Java JNDI查找到Microsoft Active Directory(使用Tomcat 6),身份验证失败
其思想是通过配置Tomcat 6容器(使用JNDI领域)来执行身份验证(使用用户名+密码的基本表单),以便它连接到Microsoft Active Directory以检查凭据是否正确 我已经找到了很多关于这个主题的文档,但是我认为我没有正确地配置这个领域 这是我在Oracle网站上找到的文档(与Tomcat4之后的文档相同) 发现这个甲骨文文档很差,但是遇到了其他网站,比如这一个,详细阐述了这个主题 但是,经过多次尝试后,我仍然无法成功进行身份验证:Java JNDI查找到Microsoft Active Directory(使用Tomcat 6),身份验证失败,java,jsp,active-directory,tomcat6,jndi,Java,Jsp,Active Directory,Tomcat6,Jndi,其思想是通过配置Tomcat 6容器(使用JNDI领域)来执行身份验证(使用用户名+密码的基本表单),以便它连接到Microsoft Active Directory以检查凭据是否正确 我已经找到了很多关于这个主题的文档,但是我认为我没有正确地配置这个领域 这是我在Oracle网站上找到的文档(与Tomcat4之后的文档相同) 发现这个甲骨文文档很差,但是遇到了其他网站,比如这一个,详细阐述了这个主题 但是,经过多次尝试后,我仍然无法成功进行身份验证: 当我启动Tomcat时,一切看起来都很好,
<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>
index.jsp
示例安全约束
受保护页
/保护/*
得到
邮递
伦敦
形式
数据库领域
/WEB-INF/login.jsp
/WEB-INF/error.jsp
所有用户
伦敦
提前感谢,,
A.您是否在AD中使用uid或memberUid属性?这些都是非典型的 您可能想用
cn=
替换userPattern
中的uid=
对于roleSearch,这可能实际上应该是
member=
我用cn=在我的用户模式中更改了uid=,但运气不好。roleSearch字段是必需的吗?我添加了第二个领域配置测试,在上面的问题中也失败了。仍然不起作用。有什么想法吗?我对JNDI一无所知——只是从广告的角度来看。到目前为止,解决此问题的最佳方法是获取网络捕获并在WireShark中打开它。你将能够准确地看到什么被发送到广告和相应的调整。我可以在此基础上提供帮助。