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. Créez un fichier manifeste de fonction. L'exemple suivant illustre un fichier manifeste de fonction appelé 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. Installez le gestionnaire d'appel en tant que fonction utilisateur dans Liberty. Copiez le fichier JAR du gestionnaire d'appel et le fichier manifeste de la fonction dans l'annuaire d'utilisateurs de Liberty. L'exemple suivant indique où copier les fichiers :
    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



Icône d'horodatage Dernière mise à jour: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_wssec_callbackhandler
Nom du fichier : twlp_wssec_callbackhandler.html