我正在使用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 =本地
有人能说明为什么我无法使用域用户角色吗?
答案 0 :(得分:0)
你已经做到了。当用户登录时,他所在的所有角色的CN将自动与用户相关联。没有什么可做的。
答案 1 :(得分:0)
你已经完成了第一步。
然后你需要添加&#34; security-constraint&#34;到你的应用程序的上下文。 (通常是web.xml文件)。
答案 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 服务器
享受吧!!!