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
- 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;
}
}
}
}
- 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
- 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
- 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"
- 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
- 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.