Nachgeordnete JAX-RS-Ressourcen schützen

Sie können nachgeordnete JAX-RS-Ressourcen (Java™ API for RESTful Web Services) schützen, indem Sie für die Authentifizierung die Methode BasicAuth konfigurieren und den LTPA-JAX-RS-Sicherheitshandler verwenden, um vom Single Sign-on für die Benutzerauthentifizierung profitieren zu können.

Vorbereitende Schritte

Bei dieser Aufgabe wird davon ausgegangen, dass Sie die folgenden Schritte abgeschlossen haben:
  • Sie haben Ihre JAX-RS-Anwendung im Anwendungsserver installiert.
  • Sie haben die Sicherheit für Ihre JAX-RS-Anwendung aktiviert.
  • Sie haben Ihre JAX-RS-Anwendungen im Web-Container gesichert, indem Sie nachgeordnete JAX-RS-Anwendungen so konfiguriert haben, dass sie für die Benutzerauthentifizierung die Basisauthentifizierung (Methode BasicAuth) verwenden.

Informationen zu diesem Vorgang

Wenn JAX-RS-Ressourcen erstellt werden, kann ein neuer LTPA-JAX-RS-Sicherheitshandler für eine nahtlose Authentifizierung bei Aufrufen nachgeordneter Ressourcen verwendet werden.

Wenn eine Anwendung geschützte nachgeordnete JAX-RS-Ressourcen aufruft, muss sie sich gegenüber der Zielressource authentifizieren. Verwendet die Zielressource auf einem nachgeschalteten Server für die Sicherheit die Methode BasicAuth, kann die aufrufende Anwendung vom Single Sign-on (SSO) für JAX-RS-Ressourcen profitieren. Bei Verwendung des Single Sign-on wird ein authentifizierter Kontext an alle nachgeordneten Aufrufe weitergegeben. Mit einem LTPA-basierten Sicherheitsclient-Handler können Sie sich gegenüber nachgeordneten Ressourcen, die serverübergreifend verteilt sind, authentifizieren.

Nehmen wir zur Veranschaulichung dieses Szenarios an, dass Ihre Zelle zwei Server enthält und dass Sie auf beiden Servern JAX-RS-Ressourcen implementiert haben. Angenommen, Sie müssen vom server1 aus eine Ressource aufrufen, die auf server2 implementiert ist. Wenn Ressourcen auf server2 mit der Authentifizierungsmethode BasicAuth geschützt sind, verwenden Sie den LTPA-JAX-RS-Sicherheitshandler, um vom Single Sign-on zu profitieren und die Benutzerauthentifizierung nahtlos an nachgeordnete Aufrufe weitergeben zu können, ohne Benutzeridentitäten und -kennwörter in der Anwendung bereitstellen oder verwalten zu müssen.

Abbildung 1. Nachgeordnete JAX-RS-Ressourcen schützenSie können nachgeordnete Ressourcen schützen, indem Sie die Methode BasicAuth für die Authentifizierung konfigurieren und den LTPA-JAX-RS-Sicherheitshandler verwenden.

Führen Sie die folgende Schritte aus, um die Benutzerauthentifizierung gegenüber einem nachgeschalteten Server mit dem JAX-RS-Sicherheitshandler zur Anwendungserstellungszeit zu konfigurieren.

Vorgehensweise

  1. Verwenden Sie zur Anwendungserstellungszeit den LTPA-basierten Sicherheitsclient-Handler LtpaAuthSecurityHandler, um sich gegenüber nachgeordneten Ressourcen zu authentifizieren, die serverübergreifend verteilt sind.
    • Für JAX-RS 1.1 müssen Sie bei Verwendung der Klasse LtpaAuthSecurityHandler sicherstellen, dass Sie für die Adressierung der Ressourcen das HTTPS-Schema für Ihre URLs verwenden und dass die Zielanwendung SSL-fähig fähig ist. Zum Senden von Benutzerberechtigungsnachweisen und LTPA-Cookies sollten Sie unbedingt SSL-Verbindungen verwenden. In der Klasse LtpaAuthSecurityHandler können Sie explizit das vorausgesetzte SSL inaktivieren, indem Sie für die Methode setSSLRequired des Sicherheitshandlers den Wert false angeben. Der Standardwert ist true.
      yourLtpaAuthSecHandler.setSSLRequired(false);
    • Für JAX-RS 2.0 können Sie mit der Clienteigenschaft com.ibm.ws.jaxrs.client.ltpa.handler das SSO-Cookie festlegen und den Wert auf true setzen.
      ClientBuilder cb = ClientBuilder.newBuilder();
      
              Client c = cb.build();
              c.property("com.ibm.ws.jaxrs.client.ltpa.handler", "true");
              WebTarget t = c.target("http://" + serverIP + ":" + serverPort + "/" + moduleName + "/ComplexClientTest/ComplexResource");
              String res = t.path("echo1").path("test1").request().get(String.class);
              c.close();
              ret.append(res);
    Wenn Sie in JAX-RS 2.0 die SSL-Funktion (Secure Sockets Layer) verwenden möchten, müssen Sie das Feature ssl-1.0 oder appSecurity-2.0 aktivieren. Für die LTPA-Tokenfunktion ist das Feature appSecurity-2.0 erforderlich.
    Anmerkung: Das Feature ssl-1.0 ist ein untergeordnetes Feature des Features appSecurity-2.0. Wenn Sie das Feature jaxrsClient-2.0 und das Feature ssl-1.0 aktivieren, wird das Feature appSecurity-2.0 automatisch aktiviert.
  2. Fügen Sie den Sicherheitshandler zur Handlerkette hinzu.
  3. Erstellen Sie die REST-Clientinstanz.
  4. Erstellen Sie die Ressourceninstanz, mit der Sie interagieren wollen.
  5. Setzen Sie einen Wert für Ihre Ressourcenadresse ein.

Ergebnisse

Sie haben sichere JAX-RS-Ressourcen definiert, sodass Sie beim Aufruf nachgeschalteter Ressourcen das Single Sign-on verwenden und die Benutzerauthentifizierung nahtlos an nachgeordnete Aufrufe weitergeben können, ohne in der Anwendung Benutzeridentitäten und -kennwörter angeben oder verwalten zu müssen.

Beispiel

Das folgende Code-Snippet zeigt für JAX-RS 1.1, wie der im Lieferumfang des JAX-RS-Clients enthaltene Sicherheitshandler verwendet wird.
import org.apache.wink.client.Resource;
 import org.apache.wink.client.RestClient;
 import org.apache.wink.client.ClientConfig;
 import org.apache.wink.client.handlers.LtpaAuthSecurityHandler;

 ClientConfig config = new ClientConfig();
 LtpaAuthSecurityHandler secHandler = new LtpaAuthSecurityHandler();
 
 // Diesen Sicherheitshandler zur Handlerkette hinzufügen
 config.handlers(secHandler);

 // REST-Clientinstanz erstellen
 RestClient client = new RestClient(config);

 // Ressourceninstanz, mit der interagiert werden soll, erstellen
 // Wert für die Ressourcenadresse einsetzen
 resource =  
  client.resource("http://localhost:8080/path/to/resource");

// Ein Aufruf der Ressource kann jetzt erfolgen. 
Das folgende Code-Snippet zeigt für JAX-RS 2.0, wie der im Lieferumfang des JAX-RS-Clients enthaltene Sicherheitshandler verwendet wird.
ClientBuilder cb = ClientBuilder.newBuilder();
Client c = cb.build();
c.property("com.ibm.ws.jaxrs.client.ltpa.handler", "true");

String res = "";
res = c.target("http://" + serverIP + ":" + serverPort + "/" + moduleName + "/rest/ltpa")
                            .request()
c.close();
return res;

Symbol das den Typ des Artikels anzeigt. Taskartikel

Dateiname: twbs_jaxrs_impl_securejaxrs_downstreamresource.html