Kennwort-Callback-Handler für WS-Security entwickeln

In Liberty können Kennwort-Callback-Handler in vielen WS-Security-Szenarien verwendet werden, um Kennwörter abzurufen. Beispielsweise können Kennwörter abgerufen werden, um Benutzernamenstoken zu generieren, Keystores zu öffnen oder auf private Schlüssel zuzugreifen. Ein Kennwort-Callback-Handler ist für den Provider erforderlich, wenn Sie PasswordDigest verwenden. Der Kennwort-Callback-Handler muss als Benutzerfeature in Liberty gepackt werden.

Informationen zu diesem Vorgang

Diese Aufgabe beschreibt, wie Sie einen Kennwort-Callback-Handler entwickeln, um Schlüsselkennwörter für Benutzernamen und Keystore-Schlüssel abzurufen.

Vorgehensweise

  1. Kennwort-Callback-Handler entwickeln. Das folgende Beispiel zeigt einen Callback-Handler:
    package com.ibm.ws.wssecurity.example.cbh;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.security.auth.callback.Callback;
    import javax.security.auth.callback.CallbackHandler;
    import org.apache.ws.security.WSPasswordCallback;
    
    public class SamplePasswordCallback implements CallbackHandler {
    
      private Map<String, String> userPasswords =  new HashMap<String, String>();
      private Map<String, String> keyPasswords = new HashMap<String, String>();
      public SamplePasswordCallback() {
        // einige Beispielkennwörter
        userPasswords.put("user1", "user1pswd");
        userPasswords.put("admin", "adminpswd");
        // einige Beispiele für Schlüsselkennwörter
        keyPasswords.put("alice",  "keypwsd");
        keyPasswords.put("bob",   "keypswd");
      }
      public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        for (int i = 0; i < callbacks.length; i++) {
          WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
          String id = pwcb.getIdentifier();
          String pass = null;
          switch (pwcb.getUsage()) {
            case WSPasswordCallback.USERNAME_TOKEN_UNKNOWN:
            case WSPasswordCallback.USERNAME_TOKEN:
              pass = userPasswords.get(id);
              pwcb.setPassword(pass);
              break;
            case WSPasswordCallback.SIGNATURE:
            case WSPasswordCallback.DECRYPT:
              pass = keyPasswords.get(id);
              pwcb.setPassword(pass);
              break;
          }
        }
      }
    }
  2. Datei MANIFEST.MF für den Callback-Handler erstellen. Das folgende Beispiel zeigt eine Datei MANIFEST.MF:
    Manifest-Version: 1.0
    Bnd-LastModified: 1359415594428
    Build-Identifier: SNAPSHOT-Mon Jan 28 17:26:34 CST 2013
    Bundle-Copyright: The Program materials contained in this file are IBM
    copyright materials. 5724-I63, 5724-J08, 5724-H89, 5724-H88, 5655-W65
    Copyright International Business Machines Corp. 1999, 2012 All Rights
    Reserved * Licensed Materials - Property of IBM US Government Users
    Restricted Rights - Use, duplication or disclosure restricted by GSA ADP
    Schedule Contract with IBM Corp.
    Bundle-Description: An PasswordCallbackHandler; version=1.0.0
    Bundle-ManifestVersion: 2
    Bundle-Name: wssecuritycbh
    Bundle-SymbolicName: com.ibm.ws.wssecurity.example.cbh
    Bundle-Vendor: IBM
    Bundle-Version: 1.0.0
    Created-By: 1.6.0 (IBM Corporation)
    Export-Package: com.ibm.ws.wssecurity.example.cbh;uses:="com.ibm.websphe
    re.ras.annotation,javax.security.auth.callback";version="1.0.0"
    Import-Package: com.ibm.websphere.ras,com.ibm.websphere.ras.annotation,c
    om.ibm.ws.ffdc,javax.security.auth.callback,org.apache.ws.security;version="[1.6,2)"
    Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version>=1.6))"
    Tool: Bnd-2.1.0.20120920-170235
    WS-TraceGroup: WSSecurity
  3. Callback-Handler in eine JAR-Datei packen. Erstellen Sie eine JAR-Datei mit der Callback-Handler-Klasse und der in den vorherigen Schritten erstellten Datei MANIFEST.MF. Das folgende Beispiel zeigt den Inhalt einer Beispiel-JAR-Datei mit dem Namen SampleCbh.jar:
    META-INF/MANIFEST.MF
    com/ibm/ws/wssecurity/example/cbh/SamplePasswordCallback.class
  4. Erstellen Sie eine Featuremanifestdatei. Das folgende Beispiel zeigt eine Featuremanifestdatei mit dem Namen wsseccbh-1.0.mf:
    Subsystem-ManifestVersion: 1
    Subsystem-SymbolicName: wsseccbh-1.0; visibility:=public
    Subsystem-Version: 1.0.0 
    Subsystem-Content: com.ibm.ws.wssecurity.example.cbh; version="[1,1.0.100)";
        location:="lib/"; type="osgi.bundle"; start-phase:=APPLICATION_EARLY
     
    Subsystem-Type: osgi.subsystem.feature
    IBM-Feature-Version: 2
    
    IBM-API-Package: com.ibm.ws.wssecurity.example.cbh; version="1.0"; type="internal"
  5. Callback-Handler als Benutzerfeature in Liberty installieren. Kopieren Sie die Callback-Handler-JAR-Datei und die Featuremanifestdatei in das Liberty-Benutzerverzeichnis. Das folgende Beispiel zeigt, an welche Position die Dateien kopiert werden müssen:
    build.image/wlp/usr/extension/lib/SampleCbh.jar
    build.image/wlp/usr/extension/lib/features/wsseccbh-1.0.mf
  6. Callback-Handler als Benutzerfeature in der Datei server.xml konfigurieren. Definieren Sie den Callback-Handler in der Datei server.xml als Benutzerfeature. Das folgende Beispiel zeigt, wie der Callback-Handler als Benutzerfeature definiert wird:
    <featureManager>
      <feature>usr:wsseccbh-1.0</feature>
      <feature>servlet-3.0</feature>
      <feature>appSecurity-2.0</feature>
      <feature>jaxws-2.2</feature>
      <feature>wsSecurity-1.1</feature>
    </featureManager>

Ergebnisse

Sie haben den Kennwort-Callback-Handler erfolgreich entwickelt und in Liberty installiert.

Nächste Schritte

Sie können diesen Callback-Handler jetzt verwenden, um Kennwörter für Benutzernamenstoken (UsernameTokens) und private Schlüssel, die in der WS-Security-Konfiguration verwendet werden, abzurufen.

Symbol das den Typ des Artikels anzeigt. Taskartikel



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