Développement d'un gestionnaire d'appel de mot de passe pour la sécurité de services Web

Dans Liberty, les gestionnaires d'appel de mot de passe peuvent être utilisés dans de nombreux scénarios de sécurité de services Web pour extraire des mots de passe. Par exemple, des mots de passe peuvent être extraits pour la génération de jetons d'utilisateur, l'ouverture de fichiers de clés ou l'accès à des clés privées. Un gestionnaire d'appel de mot de passe est requis pour le fournisseur lorsque vous utilisez PasswordDigest. Un gestionnaire d'appel de mot de passe doit être conditionné en tant que fonction utilisateur dans Liberty.

Pourquoi et quand exécuter cette tâche

Cette tâche explique comment développer un gestionnaire d'appel de mot de passe afin d'extraire les mots de passe associés au nom d'utilisateur et aux clés du fichier de clés.

Procédure

  1. Développez un gestionnaire d'appel de mot de passe. L'exemple suivant illustre un gestionnaire d'appel de mot de passe :
    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() {
        // 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;
          }
        }
      }
    }
  2. Créez un fichier MANIFEST.MF pour le gestionnaire d'appel. L'exemple suivant illustre un fichier 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. Conditionnez le gestionnaire d'appel dans un fichier JAR. Créez un fichier JAR avec la classe du gestionnaire d'appel et le fichier MANIFEST.MF que vous avez créés aux étapes précédentes. L'exemple suivant illustre le contenu d'un fichier JAR appelé SampleCbh.jar :
    META-INF/MANIFEST.MF
    com/ibm/ws/wssecurity/example/cbh/SamplePasswordCallback.class
  4. Create a feature manifest file. The following example shows a sample feature manifest file that is called 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. Install the callback handler as a user feature in Liberty. Copy the callback handler JAR file and the feature manifest file to the Liberty user directory. The following example shows where to copy the files:
    build.image/wlp/usr/extension/lib/SampleCbh.jar
    build.image/wlp/usr/extension/lib/features/wsseccbh-1.0.mf
  6. Configurez le gestionnaire d'appel en tant que fonction utilisateur dans le fichier server.xml. Définissez le gestionnaire d'appel en tant que fonction utilisateur dans le fichier server.xml. L'exemple suivant explique comment définir le gestionnaire d'appel en tant que fonction utilisateur :
    <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>

Résultats

Vous avez développé le gestionnaire d'appel de mot de passe et l'avez installé dans Liberty.

Que faire ensuite

A présent, vous pouvez utiliser ce gestionnaire d'appel afin d'extraire des mots de passe pour les jetons de nom d'utilisateur et les clés privées qui sont utilisés dans la configuration de la sécurité de services Web.

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_wssec_callbackhandler.html