无法从Ldap安全域获取组

时间:2017-04-21 19:33:12

标签: java-ee jboss ldap

我正在使用jboss eap 6.4和java 1.7。 我正在构建一个jee应用程序,现在我正在尝试使用公司ldap验证(并授权)用户。

我在jboss中创建了以下安全域:

            <security-domain name="abcDomain" cache-type="default">
                <authentication>
                    <login-module code="Ldap" flag="required">
                        <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
                        <module-option name="java.naming.provider.url" value="ldap://abc.com.uy:389"/>
                        <module-option name="java.naming.security.authentication" value="simple"/>
                        <module-option name="principalDNPrefix" value="uid="/>
                        <module-option name="principalDNSuffix" value=",ou=Interns,dc=abc,dc=com,dc=uy"/>
                        <module-option name="searchTimeLimit" value="5000"/>
                        <module-option name="roleAttributeID" value="cn"/>
                        <module-option name="rolesCtxDN" value="ou=Groups,ou=Admin,dc=abc,dc=com,dc=uy"/>
                        <module-option name="uidAttributeID" value="member"/>
                        <module-option name="matchOnUserDN" value="true"/>
                        <module-option name="roleAttributeIsDN" value="false"/>
                    </login-module>
                </authentication>
            </security-domain>

我在我的应用程序中使用它来保护一些网页,web.xml中的安全性约束如下:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>pages</web-resource-name>
        <description>Security constraint for pages</description>
        <url-pattern>/pages/*</url-pattern>
        <http-method>POST</http-method>
        <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>SCC-ADMIN</role-name>
        <role-name>SCC-RESPONSABLE</role-name>
        <role-name>SCC-CONSULTA</role-name>
    </auth-constraint>
</security-constraint>

身份验证部分正在运行。这意味着,如果我输入错误的密码或用户,我会收到错误,但如果一切正确,我会继续请求的页面(返回403错误)。 当用户和密码正确时,我尝试使用以下代码获取用户角色:

@ManagedBean
@SessionScoped
public class SesionController implements Serializable {
.
.
.
    @PostConstruct
    public void initSesionController() {
        usuario = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();

        sccAdmin = FacesContext.getCurrentInstance().getExternalContext().isUserInRole("SCC-ADMIN");
.
.
.

“usuario”是正确的。但这个角色是错误的。此外,我收到403 http错误,因为角色不是“被分配”,这似乎是合乎逻辑的。

我的ldap这个组: 的 CN = SCC-ADMIN,OU =组,OU =管理员,DC = ABC,DC = COM,DC = UY 我正在测试的这个用户确实是 uid = aviera,ou =实习生,dc = abc,dc = com,dc = uy

的成员

我的猜测是安全域中的 rolesCtxDN 定义是错误的,但我没有运气试图修复它(我没有使用ldap的经验,所以我可能犯了一个明显的错误)。

1 个答案:

答案 0 :(得分:0)

我下载了一个名为 jxplorer 的工具来查看ldap结构。我注意到在SCC-ADMIN组中存储在名为 uniqueMember 的属性中的成员,而不是 uidAttributeID 中指示的成员安全域的属性。所以改变这解决了我的问题。