Tworzenie procedury obsługi wywołania zwrotnego hasła dla zabezpieczeń WS-Security

W obszarze Libertyprocedury obsługi wywołania zwrotnego hasła mogą być używane w wielu scenariuszach zabezpieczeń WS-Security w celu pobrania haseł. Na przykład hasła mogą być pobierane w celu wygenerowania znaczników UsernameTokens, otwierania plików kluczy lub uzyskiwania dostępu do kluczy prywatnych. Procedura obsługi wywołania zwrotnego hasła jest wymagana dla dostawcy, gdy używana jest opcja PasswordDigest. Procedura obsługi wywołania zwrotnego hasła musi być spakowana jako składnik użytkownika w Liberty.

Informacje o tej czynności

W tym zadaniu opisano sposób tworzenia procedury obsługi wywołania zwrotnego hasła w celu pobrania haseł kluczy o nazwie użytkownika i pliku kluczy.

Procedura

  1. Projektowanie procedury obsługi wywołania zwrotnego hasła.
    [22.0.0.8 i nowsze]W poniższym przykładzie przedstawiono procedurę obsługi wywołania zwrotnego:
    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.wss4j.common.ext.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() {
        // some example user passwords
        userPasswords.put("user1", "user1pswd");
        userPasswords.put("admin", "adminpswd");
        // some example key passwords
        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;
          }
        }
      }
    }

    W wersji 22.0.0.7 i wcześniejszych należy zastąpić org.apache.wss4j.common.ext.WSPasswordCallback w poprzednim przykładzie org.apache.ws.security.WSPasswordCallback.

  2. Utwórz plik MANIFEST.MF dla procedury obsługi wywołania zwrotnego.
    W poniższym przykładzie przedstawiono plik 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. Pakuj procedurę obsługi wywołania zwrotnego do pliku JAR.
    Utwórz plik JAR z klasą procedury obsługi wywołania zwrotnego i plikiem MANIFEST.MF , który został utworzony w poprzednich krokach.
    W poniższym przykładzie przedstawiono zawartość przykładowego pliku JAR o nazwie SampleCbh.jar:
    META-INF/MANIFEST.MF
    com/ibm/ws/wssecurity/example/cbh/SamplePasswordCallback.class
  4. Utwórz plik manifestu składnika.
    W poniższym przykładzie przedstawiono przykładowy plik manifestu składnika o nazwie 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. Zainstaluj procedurę obsługi wywołania zwrotnego jako funkcję użytkownika w polu Liberty.
    Skopiuj plik JAR procedury obsługi wywołania zwrotnego i plik manifestu składnika do katalogu użytkownika Liberty .
    W poniższym przykładzie przedstawiono, gdzie należy skopiować pliki:
    build.image/wlp/usr/extension/lib/SampleCbh.jar
    build.image/wlp/usr/extension/lib/features/wsseccbh-1.0.mf
  6. Skonfiguruj procedurę obsługi wywołania zwrotnego jako funkcję użytkownika w pliku server.xml .
    Zdefiniuj procedurę obsługi wywołania zwrotnego jako funkcję użytkownika w pliku server.xml .
    W poniższym przykładzie przedstawiono sposób definiowania procedury obsługi wywołania zwrotnego jako składnika użytkownika:
    <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>

Wyniki

Pomyślnie opracowano procedurę obsługi wywołania zwrotnego hasła i zainstalowaną procedurę obsługi wywołania zwrotnego dla Liberty.

Co dalej

Teraz można użyć tej procedury obsługi wywołania zwrotnego w celu pobrania haseł dla UsernameTokens i kluczy prywatnych używanych w konfiguracji zabezpieczeń WS-Security.