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