配置Tomcat使用Windows Active Directory进行身份验证

34

如何最好地配置Tomcat 5.5或更高版本,以使用户可以从Windows Active Directory进行身份验证?

4个回答

25

来自www.jspwiki.org

参见:ActiveDirectoryIntegration

在server.xml中使用你的LDAP设置尝试以下内容:

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
    connectionURL="ldap://youradsserver:389"
    alternateURL="ldap://youradsserver:389"         
    userRoleName="member"
    userBase="cn=Users,dc=yourdomain"
    userPattern="cn={0},cn=Users,dc=yourdomain"
    roleBase="cn=Users,dc=yourdomain"
    roleName="cn"
    roleSearch="(member={0})"
    roleSubtree="false"
    userSubtree="true"/>

在 tomcat-users.xml 和应用程序的 web.xml 文件中定义角色。

按照以下方式编辑 webapp_root/WEB_INF/Web.xml 文件:

<security-constraint>
   <display-name>your web app display name</display-name>
   <web-resource-collection>
     <web-resource-name>Protected Area</web-resource-name>
     <url-pattern>*.jsp</url-pattern>
     <url-pattern>*.html</url-pattern>
     <url-pattern>*.xml</url-pattern>
   </web-resource-collection>
   <auth-constraint>
     <role-name>yourrolname(ADS Group)</role-name>
   </auth-constraint>
 </security-constraint>
 <login-config>
   <auth-method>FORM</auth-method>
   <form-login-config>
     <form-login-page>/login.jsp</form-login-page>
     <form-error-page>/error.jsp</form-error-page>
   </form-login-config>
 </login-config>
 <security-role>
   <description>your role description</description>
   <role-name>yourrolename(i.e ADS group)</role-name>
 </security-role>

由于context.xml中没有指定连接的用户名或密码,因此只有在允许匿名查找获取角色列表时,此方法才能工作。 - Jesse Barnum
链接又变了。我不能百分之百确定,因为我没有看到最初链接的页面,但它现在可能在这里的某个地方 - David Moye
这里有关于每个XML标签的文档吗?我想通过浏览器触发验证,而不是通过登录表单。 - Tomáš Zato

19

Blauhr的回答非常好,但在AD中用户的CN是基于他们的“显示名称”,而不是他们用于登录的saMAccountName。根据他的解决方案,看起来某人必须使用其显示名称才能登录,基于userPattern

我个人使用了以下方法:

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
    connectionURL="ldap://DOMAIN_CONTROLLER:389"
    connectionName="USERID@DOMAIN.com"
    connectionPassword="USER_PASSWORD"
    referrals="follow"
    userBase="OU=USER_GROUP,DC=DOMAIN,DC=com"
    userSearch="(sAMAccountName={0})"
    userSubtree="true"
    roleBase="OU=GROUPS_GROUP,DC=DOMAIN,DC=com"
    roleName="name"
    roleSubtree="true"
    roleSearch="(member={0})"/>

其他的基本上都会运作相同。


嗨@Doug,你是否遇到了登录时间过长的问题? - W. Dan

2
LDAP基于身份验证可以在任何操作系统上无需任何其他步骤即可工作。 http://spnego.sf.net可以用于对已登录Windows域的用户进行静默身份验证。这需要一个在域中注册的域帐户来授权提供的服务。它适用于Windows和Linux。

0
“欢迎来到SPNEGO SourceForge项目 Java中的集成Windows身份验证
该项目的目的是提供一种可替代的库(.jar文件),应用服务器(如Tomcat)可以用作认证客户端(如Web浏览器)的手段。
如果您的组织正在运行Active Directory (AD),并且所有的Web应用程序都经过Microsoft的Internet Information Services (IIS),并且IIS启用了集成的Windows身份验证,并且您组织中的所有人都在使用Internet Explorer (IE),那么这个项目对您可能没有任何兴趣。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接