Caller-Konfiguration für ein Benutzernamenstoken ohne Registry-Interaktion konfigurieren

Damit ein Benutzernamenstoken mit einer Caller-Konfiguration authentifiziert werden kann, ohne dass ein Zugriff auf die WebSphere-Registry erforderlich ist, können Sie die Authentifizierungsmethode des Benutzernamenstokenskonsumenten ersetzen und den Caller so konfigurieren, dass er eine alternative JAAS-Anmeldekonfiguration verwendet.

Informationen zu diesem Vorgang

Diese Informationen gelten nur für Java API for XML Web Services (JAX-WS).

Standardmäßig ist UNTConsumeLoginModule, der Web Services Security-Benutzernamenstokenkonsument in JAX-WS, so definiert, dass der Benutzername und das Kennwort, die im Token enthalten sind, immer anhand der WebSphere-Registry validiert werden. Mit den von der GenericSecurityTokenFactory bereitgestellten SPIs können Sie diese Authentifizierungsmethode durch eine eigene Methode ersetzen. Weitere Informationen finden Sie unter Authentifizierungsmethode des Konsumenten des Benutzernamenstokens mit einem JAAS-Anmeldemodul in einem Stack ersetzen.

Wenn den WS-Security-Vorgaben für einen Service-Provider eine Caller-Konfiguration hinzugefügt wird, werden der Benutzername und das Kennwort, die im Benutzernamenstoken enthalten sind, auch anhand der WebSphere-Registry validiert. Werden ein Benutzername und ein Kennwort angegeben, werden beide anhand der WebSphere-Registry validiert. Wird nur ein Benutzername angegeben, muss dieser in der WebSphere-Registry vorhanden sind. Diese Validierungen finden im Modul "com.ibm.ws.security.server.lm.ltpaLoginModule" statt. Dieses Modul ist, wie im folgende Beispiel gezeigt, Teil des wss.caller-JAAS-Konfigurationsstack (Java™ Authentication and Authorization Service):

com.ibm.ws.wssecurity.impl.auth.module.PreCallerLoginModule
com.ibm.ws.wssecurity.impl.auth.module.UNTCallerLoginModule...
com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule
com.ibm.ws.security.server.lm.ltpaLoginModule
com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule

Die Verwendung der JAAS-Konfiguration für den Caller ohne die Anmeldemodule ltpaLoginModule und wsMapDefaultInboundLoginModule wird von der WebSphere-WS-Security-Laufzeit nicht unterstützt.

Damit Sie ein Benutzernamenstoken mit einer Caller-Konfiguration ohne Zugriff auf die WebSphere-Registry verwenden können, müssen Sie verhindern, dass die Module UNTConsumeLoginModule und ltpaLoginModule auf die Registry zugreifen, und Sie müssen alternative Module bereitstellen.

Vorgehensweise

  1. Um den Zugriff des Moduls UNTConsumeLoginModule auf die Registry zu verhindern, ersetzen Sie die Authentifizierungsmethode des Benutzernamenstokenkonsumenten. Weitere Informationen finden Sie im Artikel twbs_replace_authmethod_usernametoken.html.
  2. Entwickeln Sie ein JAAS-Anmeldemodul, das im Stack über dem Modul com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule angeordnet ist. Nachfolgend sehen Sie Beispielcode für ein JAAS-Anmeldemodul:
    package test.tokens;
    
    import java.util.Map;
    import java.util.Hashtable;
    
    import javax.security.auth.Subject;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.login.LoginException;
    import javax.security.auth.spi.LoginModule;
    import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
    import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
    import com.ibm.wsspi.security.token.AttributeNameConstants;
    
    public class MyAuthLoginModule implements LoginModule {
    
      private Map<String, ?> _sharedState;
    
      public void initialize(Subject subject, CallbackHandler callbackHandler,
                             Map<String, ?> sharedState, Map<String, ?> options) {
    
        this._sharedState = sharedState;
      }
    
      public boolean login() throws LoginException {
        //Aus Gründen der Lesbarkeit ist dieses Anmeldemodul so
      //aufgebaut, dass es nicht vor allen Nullzeigerausnahmen (NPEs) schützt
    
    		String username = null;
    	  
    		// Caller-Token abrufen
    		SecurityToken callerIdentityToken = (SecurityToken)this._sharedState.get(
    	    	    com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_CALLER_IDENTITY);
    
    		// wenn es ein Benutzernamenstoken ist, Benutzernamen abrufen
    		if (callerIdentityToken instanceof UsernameToken) {
    	  	  username = ((UsernameToken)callerIdentityToken).getUsername();
    	}
    		if (username == null) {
    	  	  throw new LoginException("Unable to obtain username");
    	}
    
    		Hashtable customProperties = (Hashtable)_sharedState.get(AttributeNameConstants.WSCREDENTIAL_PROPERTIES_KEY);
    	if (customProperties == null) {
    	  	  customProperties = new Hashtable();
    	}
    
    		// bei Angabe von UNIQUEID überspringt ltpaLoginModule die Registry-Prüfung	
    		// Hier wird der Standardrealm verwendet, aber jeder vertrauenswürdige Realm kann verwendet werden
       String uid = "defaultWIMFileBasedRealm/" + username;
       customProperties.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uid)
     //Implementierung der übrigen Methoden, die die Schnittstelle des Anmeldemoduls
      //(LoginModule) erfordert.
    }
  3. Erstellen Sie eine neue JAAS-Anmeldekonfiguration.
    1. Wählen Sie in der Administrationskonsole Sicherheit > Globale Sicherheit aus.
    2. Klicken Sie unter "Authentifizierung" auf Java Authentication and Authorization Service > Systemanmeldungen.
    3. Klicken Sie auf Neu, und geben Sie unter "Alias" test.auth.unt ein.
    4. Fügen Sie die JAAS-Anmeldemodule hinzu. Die folgenden Anmeldemodule müssen in der angegebenen Reihenfolge hinzugefügt werden:
      • com.ibm.ws.wssecurity.impl.auth.module.PreCallerLoginModule
      • com.ibm.ws.wssecurity.impl.auth.module.UNTCallerLoginModule
      • test.tokens.MyAuthLoginModule
        Wichtig: Der Name dieses Moduls muss mit dem Namen des JAAS-Anmeldemoduls, das Sie entwickelt haben, übereinstimmen.
      • com.ibm.ws.wssecurity.impl.auth.module.WSWSSLoginModule
      • com.ibm.ws.security.server.lm.ltpaLoginModule
      • com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule
      Gehen Sie für jedes Anmeldemodul wie folgt vor:
      1. Klicken Sie unter "JAAS-Anmeldemodule" auf Neu.
      2. Geben Sie unter "Name der Modulklasse" den Namen des Anmeldemoduls ein.
      3. Wählen Sie nur für "test.tokens.MyAuthLoginModule" die Option Proxy für Anmeldemodul verwenden aus.
      4. Klicken Sie auf OK.
    5. Klicken Sie auf OK und anschließend auf Speichern.
  4. Konfigurieren Sie den Caller für die Verwendung der neuen JAAS-Konfiguration.
    1. Öffnen Sie in der Administrationskonsole die Bindungskonfiguration, die geändert werden soll.
    2. Wählen Sie WS-Security > Caller aus.
    3. Wählen Sie die Caller-Konfiguration aus, die Sie ändern möchten.
    4. Wählen Sie unter "JAAS-Anmeldung" test.auth.unt aus.
    5. Klicken Sie auf OK und anschließend auf Speichern.
  5. Starten Sie den Anwendungsserver erneut, um die JAAS-Konfigurationsänderungen anzuwenden.
  6. Testen Sie den Service.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_config_wssec_caller_no_reg
Dateiname:twbs_config_wssec_caller_no_reg.html