如何将Ldap组映射到Tomcat Roles(Java)

时间:2016-02-06 19:08:40

标签: java tomcat ldap

我正在使用Servlets / JSP等编写一个Web项目。目前程序使用基本身份验证来保证安全..但我的工作需要从我们的活动目录中获取安全角色。

我已经使用以下内容修改了apache的server.xml:

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
       connectionURL="ldap://adclds001.mycompgroup.local:389"
       connectionName="************.local:389"
       connectionPassword="********"
       userPattern="CN={0},OU=Trainers, OU=Academy, OU=Staff, OU=Users, OU=UK, OU=Countries, DC=mycompgroup, DC=local"
       roleBase="OU=Trainers, OU=Academy, OU=Staff, OU=Users, OU=UK, OU=Countries, DC=mycompgroup, DC=local"
       roleName="cn"
       roleSearch="member={0}"
     />

身份验证工作正常,但我不知道如何映射ldap组 到Tomcat角色。

我尝试过添加group-name等内容  部署描述符的条目,但无济于事。

我也听说过扩展JNDIRealm类并重写 getRoles方法可能会给我我想要的东西..但我找不到满满的 有关可能需要的详细信息。

那么将ldap组映射到tomcat角色的最佳方法是什么?

该应用程序仍未发挥作用。

目前我的领域细节是:

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
       connectionURL="ldap://adclds001.mycomp.local:389"
       connectionName="trainee1@mycomp.local:389"
       connectionPassword="****"
       userPattern="CN={0},OU=Trainers, OU=Academy, OU=Staff, OU=Users, OU=UK, OU=Countries, DC=mycompgroup, DC=local"
       userRoleName="Domain Users"
       roleBase="OU=Trainers, OU=Academy, OU=Staff, OU=Users, OU=UK, OU=Countries, DC=mycompgroup, DC=local"
       roleName="cn"
       roleSearch="member={0}"
     />

我的部署描述符中有一个安全性constaint:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Wildcard means whole app requires authentication</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>
            <role-name>admin_user</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
    </security-constraint>   

web.xml中的安全角色:

    <security-role>
        <role-name>basic_user</role-name>
    </security-role>
    <security-role>
        <role-name>admin_user</role-name>
    </security-role>

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

我也有:

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

另外

我的IT部门告诉我,每个人都在以下组: CN =域用户,CN =用户,DC = mycompgroup,DC =本地

有人能说明为什么我无法使用域用户角色吗?

4 个答案:

答案 0 :(得分:0)

你已经做到了。当用户登录时,他所在的所有角色的CN将自动与用户相关联。没有什么可做的。

答案 1 :(得分:0)

你已经完成了第一步。

然后你需要添加&#34; security-constraint&#34;到你的应用程序的上下文。 (通常是web.xml文件)。

A simple example can be found here

答案 2 :(得分:0)

这里是a description of subclassing JNDIRealm,用于这些目的。他建议使用属性文件。

我做了类似的事情,但是,我允许通过Realm元素中的属性添加条目。为此,请在您的子类中创建JavaBean属性,例如rolesForServer。给定应用程序角色“ event_requester”,“ approver”,“ manager”,setRolesForServer然后可以解析字符串,例如rolesForServer='HR=approver,manager;all=event_requester'

答案 3 :(得分:0)

您可以使用 LDAPAdminExe 来浏览 ldap 结构。并找出您所在的“组”。

例如,您的群组是 CN=Domain Users,CN=Users,DC=mycompgroup,DC=local

第一步。您应该检查角色库中是否有这个组(使用 LDAPAdminExe 检查):

OU=Trainers, OU=Academy, OU=Staff, OU=Users, OU=UK, OU=Countries, DC=mycompgroup, DC=local

如果不是,您应该更改此 roleBase 设置。我认为可以将此配置设置为

DC=mycompgroup,DC=local

所以你将在 server.xml 中设置配置:

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99"
       connectionURL="ldap://adclds001.mycomp.local:389"
       connectionName="trainee1@mycomp.local:389"
       connectionPassword="****"
       userPattern="CN={0},OU=Trainers, OU=Academy, OU=Staff, OU=Users, OU=UK, OU=Countries, DC=mycompgroup, DC=local"
       userRoleName="Domain Users"
       roleBase="DC=mycompgroup,DC=local"
       roleName="cn"
       roleSearch="member={0}"
     />

第 2 步。您应该在 web.xml 中添加组名称:

<security-constraint>
....
    <auth-constraint>
        <role-name>Domain Users</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

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

步骤 3. 重启这个 tomcat 服务器

享受吧!!!