2017-04-21 38 views
0

我正在使用java 1.7的jboss eap 6.4。 我正在构建一个jee应用程序,现在我正尝试向公司ldap验证(并授权)用户。无法从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 =乌伊 并且这个用户,我敢测试有,的确是组UID = aviera,OU =实习生,DC = ABC,DC = COM,DC = UY成员

我的猜测是,rolesCtxDN deffinition在安全域是错误的,但我没有尝试修复它(我没有使用ldap的经验,所以我可能会犯一个明显的错误)。

回答

0

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