2017-04-21 4 views
0

Ich benutze jboss eap 6.4 mit Java 1.7. Ich baue eine Jee-App und jetzt versuche ich, Benutzer mit der Firma ldap zu authentifizieren (und zu autorisieren).Konnte Gruppe von Ldap Sicherheitsdomäne nicht erhalten

ich die folgende Sicherheitsdomäne in meinem Jboss erstellt:

  <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> 

ich es in meiner App verwenden, um einige Web-Seiten zu sichern, ist die Sicherheitsbeschränkung in der web.xml wie folgt:

<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> 

Der Authentifizierungsteil funktioniert. Das heißt, wenn ich das falsche Passwort oder den falschen Benutzer eintrage, erhalte ich einen Fehler, aber wenn alles korrekt ist, fahre ich mit der angeforderten Seite fort (was einen 403 Fehler zurückgibt). Wenn der Benutzer und Passwörter korrekt sind ich versuche, die Benutzerrollen mit diesem Code zu erhalten:

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

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

Die „usuario“ korrekt ist. Aber die Rolle ist falsch. Auch bekomme ich einen 403 HTTP-Fehler, da die Rolle nicht "zugewiesen" ist, scheint dies logisch.

Ich habe in meinem ldap diese Gruppe: cn = SCC-ADMIN, ou = Gruppen, ou = Admin, dc = abc, dc = com, dc = uy und dieser Benutzer, die ich bin Tests mit, ist in der Tat ein Mitglied der Gruppe uid = aviera, ou = Interns, dc = abc, dc = com, dc = uy

Meine Vermutung ist, dass die rolesCtxDN deffinition in der Sicherheitsdomäne ist falsch , aber ich hatte kein Glück, es zu reparieren (ich habe keine Erfahrung mit ldap, also könnte ich einen offensichtlichen Fehler machen).

Antwort

0

Ich habe ein Tool namens jxplorer heruntergeladen, um die ldap-Struktur anzuzeigen. Ich bemerkte, dass in der SCC-ADMIN-Gruppe die Mitglieder in einem Attribut namens uniqueMember, anstelle von Mitglied, die ich in der uidAttributeID Eigentum der Sicherheitsdomäne war gespeichert. So änderte das mein Problem.

Verwandte Themen