Desarrollo de un manejador de devolución de llamada de contraseña para WS-Security

En Liberty, se pueden utilizar los manejadores de devolución de llamada de contraseña en muchos escenarios de WS-Security para recuperar las contraseñas. Por ejemplo, se pueden recuperar las contraseñas para generar UsernameTokens, abrir almacenes de claves o acceder a claves privadas. Es necesario un manejador de devolución de llamada de contraseña para el proveedor cuando utiliza PasswordDigest. El manejador de devolución de llamada de contraseña debe estar empaquetado como una característica de usuario en Liberty.

Acerca de esta tarea

En esta tarea se describe cómo desarrollar un manejador de devolución de llamada de contraseña para recuperar el nombre de usuario y las contraseñas de clave de almacén de claves.

Procedimiento

  1. Desarrolle un manejador de devolución de llamada de contraseña. En el ejemplo siguiente se muestra un manejador de devolución de llamada.
    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() {
        // algunas contraseñas de usuario de ejemplo
        userPasswords.put("user1", "user1pswd");
        userPasswords.put("admin", "adminpswd");
        // algunas contraseñas de clave de ejemplo
        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. Cree un archivo MANIFEST.MF para el manejador de devolución de llamada. En el ejemplo siguiente se muestra un archivo 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. Empaquete el manejador de devolución de llamada en un archivo JAR. Cree un archivo JAR con la clase de manejador de devolución de llamada y el archivo MANIFEST.MF que ha creado en los pasos anteriores. El ejemplo siguiente muestra el contenido de un archivo JAR de ejemplo denominado SampleCbh.jar:
    META-INF/MANIFEST.MF
    com/ibm/ws/wssecurity/example/cbh/SamplePasswordCallback.class
  4. Cree un archivo de manifiesto de característica. En el ejemplo siguiente se muestra un archivo de manifiesto de característica de muestra denominado 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. Instale el manejador de devolución de llamada como una característica de usuario en Liberty. Copie el archivo JAR del manejador de devolución de llamada y el archivo de manifiesto de característica en el directorio de usuario de Liberty. En el ejemplo siguiente se muestra dónde copiar los archivos:
    build.image/wlp/usr/extension/lib/SampleCbh.jar
    build.image/wlp/usr/extension/lib/features/wsseccbh-1.0.mf
  6. Configure el manejador de devolución de llamada como una característica de usuario en el archivo server.xml. Defina el manejador de devolución de llamada como una característica de usuario en el archivo server.xml. En el ejemplo siguiente se muestra cómo definir el manejador de devolución de llamada como una característica de usuario:
    <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>

Resultados

Ha desarrollado correctamente el manejador de devolución de llamada de contraseña y ha instalado el manejador de devolución de llamada en Liberty.

Qué hacer a continuación

Puede utilizar ahora este manejador de devolución de llamada para recuperar las contraseñas de las UsernameTokens y las claves privadas que se utilizan en la configuración de WS-Security.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_wssec_callbackhandler.html