Tomcat LDAP角色:找不到角色

时间:2018-10-10 17:15:27

标签: apache ldap tomcat7 jndi web.xml

使用JNDI到LDAP验证域用户帐户(user01)时出现错误。尽管从技术上讲不是错误,但它显示为

 Username user01 does NOT have role Domain Users

我以为及其理解,可以将AD组(用户登录到应用程序所在的位置)映射到web.xml代码中的角色名称,以允许用户登录到应用程序。

我当前的JNDI Realm配置如下:

../ tomcat7 / conf / server.xml

<Realm className="org.apache.catalina.realm.JNDIRealm"
debug="99"
connectionURL="ldap://example.com:389"
authentication="simple"
referrals="follow"
connectionName="cn=administrator,cn=users,dc=example,dc=com"
connectionPassword="xxxxxxxxxx"
userSearch="(sAMAccountName={0})"
userBase="dc=example,dc=com"
userSubtree="true"
userRoleName="memberOf"
roleSearch="(member={0})"
roleName="cn"
roleSubtree="true"
roleBase="dc=example,dc=com" />

../ tomcat7 / webapps / appdir / WEB-INF / web.xml(在此,我尝试在“角色名称”约束下指定AD域“用户组”):

<security-constraint>
    <display-name>Domain User Access</display-name>
    <web-resource-collection>
        <web-resource-name>Entire Application</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
   </web-resource-collection>
    <auth-constraint>
        <role-name>Domain Users</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <description>Webapp Admins</description>
    <role-name>Domain Admins</role-name>
</security-role>

<security-role>
    <description>Webapp Users</description>
    <role-name>Domain Users</role-name>
</security-role>

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>Entire Application</realm-name>
</login-config>
</web-app>

../ tomcat7 / logs / catalina.out(最后10行显示了问题的起因-我认为-但我不知道如何纠正此问题)

Oct 10, 2018 4:53:55 PM org.apache.catalina.authenticator.AuthenticatorBase 
register
FINE: Authenticated 'leeb' with type 'BASIC'
Oct 10, 2018 4:53:55 PM org.apache.catalina.authenticator.AuthenticatorBase 
invoke
FINE:  Calling accessControl()
Oct 10, 2018 4:53:55 PM org.apache.catalina.realm.RealmBase 
hasResourcePermission
FINE:   Checking roles GenericPrincipal[user01(CN=Domain 
Admins,CN=Users,DC=example,DC=com,Domain Admins,)]
Oct 10, 2018 4:53:55 PM org.apache.catalina.realm.RealmBase hasRole
FINE: Username user01 does NOT have role Domain Users
Oct 10, 2018 4:53:55 PM org.apache.catalina.realm.RealmBase 
hasResourcePermission
FINE: No role found:  Domain Users
Oct 10, 2018 4:53:55 PM org.apache.catalina.authenticator.AuthenticatorBase 
invoke
FINE:  Failed accessControl() test

谁能提供任何建议或发现明显的错误?我需要另一双眼睛来查看缺少此配置的地方。

1 个答案:

答案 0 :(得分:0)

域用户是一个内置功能,它报告域中的所有用户都属于该组……除非通过LDAP进行查询,否则不会。如果使用LDAP浏览器查看对象,则该对象不具有“成员”属性。同样,对“(&(memberOf = CN =域用户,CN =用户,DC =域,DC = ccTLD))”的LDAP查询不会返回任何用户。

在我的域中,我创建了一个“所有用户”组,该组是在新用户创建过程中添加的-当用户创建为算法算法时还不错,但对于手动配置而言肯定不理想。我们将此实际组用于希望所有用户都具有基本访问权限的LDAP应用程序。

在没有传统组的情况下,不可能将所有帐户填充为成员,您可以使用ADAM来管理AD并创建一个代理对象,例如,该对象包含(&(primaryGroupID = 513)){组是“域用户”}或(&(objectCategory = person))。我不确定您是否可以在AD LDS(代替ADAM)中做同样的事情,因为几年前我开始使用真正的AD组。