2016-09-14 1 views
0

Ich habe einen SOAP/REST-Dienst in CXF in Red Hat JBoss Fuse (in einem Fabric) implementiert. Ich muss es mit Standardauthentifizierung schützen, und Anmeldeinformationen müssen auf einem LDAP-Server überprüft werden.Schützen Sie den CXF-Dienst in der Sicherung mit der Standardauthentifizierung für LDAP-Benutzer

Kann dies ohne einen benutzerdefinierten Interzeptor erfolgen?

Kann ich vielleicht die Container-JAAS-Sicherheit (konfiguriert mit LDAP) verwenden, um den Dienst genauso zu schützen, wie ich die Konsole schützen kann?

Antwort

0

Ja, der Container-JAAS-Sicherheitsbereich kann zum Schutz eines Web-Service verwendet werden. Ein Beispiel ist here. Die Beispielseite erklärt nicht die Implementierung, sondern ein kurzer Blick auf die blueprint.xml Datei zeigt die folgende Konfiguration:

<jaxrs:server id="customerService" address="/securecrm"> 
    <jaxrs:serviceBeans> 
     <ref component-id="customerSvc"/> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <ref component-id="authenticationFilter"/> 
    </jaxrs:providers> 
</jaxrs:server> 
<bean id="authenticationFilter" class="org.apache.cxf.jaxrs.security.JAASAuthenticationFilter"> 
    <!-- Name of the JAAS Context --> 
    <property name="contextName" value="karaf"/> 
</bean> 

So ist es nur eine Frage der eine JAAS-Authentifizierungsfilter zu konfigurieren. "Karaf" ist der Standard-JAAS-Realm für den Container: Benutzer werden in etc/users.properties definiert. Um weitere Realms zu definieren, lautet die Info here. Um Benutzer in LDAP zu haben, siehe here.

0

Die obige Antwort ist korrekt, aber bitte beachten Sie, dass für neuere Versionen von Fuse (nach 6.1) der "Rang" in der LDAP-Konfiguration größer als 100 sein muss, um den Standard-Karaf-Realm zu überschreiben. Auch

, mit aktuellen Patches installiert, in Fuse 6.2.x, Connection Pooling für die LDAP-Verbindungen können aktiviert werden:

<!-- LDAP connection pooling --> 
    <!-- http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/pool.html --> 
    <!-- http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/config.html --> 
    context.com.sun.jndi.ldap.connect.pool=true 

    </jaas:module> 
</jaas:config> 

Das ist sehr wichtig für hochvolumige Web-Services. Ein Verbindungspool wird zum LDAP-Server geführt. Dies vermeidet sowohl den Verbindungsaufbau-Overhead als auch das Schließen von Sockets, die im TIME-WAIT-Zustand verweilen.

+0

Sehr nützliche Informationen. Können Sie bitte einen Link zu den Dokumenten, die diese Details erklären, veröffentlichen? Vielen Dank. – xtian

+0

Für das Verbindungs-Pooling, siehe: https://access.redhat.com/solutions/2219901 –

Verwandte Themen