In Liberty können Kennwort-Callback-Handler in vielen WS-Security-Szenarien verwendet werden, um Kennwörter abzurufen. Beispielsweise können Kennwörter abgerufen werden, um Benutzernamenstoken zu generieren, Keystores zu öffnen oder auf private Schlüssel zuzugreifen.
Ein Kennwort-Callback-Handler ist für den Provider erforderlich,
wenn Sie PasswordDigest verwenden. Der Kennwort-Callback-Handler muss als Benutzerfeature in Liberty gepackt werden.
Informationen zu diesem Vorgang
Diese Aufgabe beschreibt, wie Sie einen
Kennwort-Callback-Handler entwickeln, um Schlüsselkennwörter für Benutzernamen und Keystore-Schlüssel abzurufen.
Vorgehensweise
- Kennwort-Callback-Handler entwickeln. Das folgende Beispiel zeigt einen Callback-Handler:
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() {
// einige Beispielkennwörter
userPasswords.put("user1", "user1pswd");
userPasswords.put("admin", "adminpswd");
// einige Beispiele für Schlüsselkennwörter
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;
}
}
}
}
- Datei MANIFEST.MF für den Callback-Handler erstellen. Das folgende Beispiel zeigt eine Datei
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
- Callback-Handler in eine JAR-Datei packen. Erstellen Sie eine JAR-Datei mit der Callback-Handler-Klasse und der in den vorherigen Schritten erstellten Datei
MANIFEST.MF. Das folgende Beispiel zeigt den Inhalt einer Beispiel-JAR-Datei mit dem Namen
SampleCbh.jar:
META-INF/MANIFEST.MF
com/ibm/ws/wssecurity/example/cbh/SamplePasswordCallback.class
- Erstellen Sie eine Featuremanifestdatei. Das folgende Beispiel zeigt eine Featuremanifestdatei mit dem Namen
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"
- Callback-Handler als Benutzerfeature in Liberty installieren. Kopieren Sie die Callback-Handler-JAR-Datei und die Feature-Manifestdatei in das Liberty-Benutzerverzeichnis. Das folgende Beispiel zeigt, an welche Position die Dateien kopiert werden müssen:
build.image/wlp/usr/extension/lib/SampleCbh.jar
build.image/wlp/usr/extension/lib/features/wsseccbh-1.0.mf
- Callback-Handler als Benutzerfeature in der Datei server.xml konfigurieren. Definieren Sie den Callback-Handler
in der Datei server.xml als Benutzerfeature. Das folgende Beispiel zeigt, wie der Callback-Handler als Benutzerfeature definiert wird:
<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>
Ergebnisse
Sie haben den Kennwort-Callback-Handler erfolgreich entwickelt und in
Liberty installiert.
Nächste Schritte
Sie können diesen Callback-Handler jetzt verwenden, um Kennwörter für Benutzernamenstoken (UsernameTokens) und private Schlüssel,
die in der WS-Security-Konfiguration verwendet werden, abzurufen.