W obszarze Libertyprocedury obsługi wywołania zwrotnego hasła mogą być używane w wielu scenariuszach zabezpieczeń WS-Security w celu pobrania haseł. Na przykład hasła mogą być pobierane w celu wygenerowania znaczników UsernameTokens, otwierania plików kluczy lub uzyskiwania dostępu do kluczy prywatnych. Procedura obsługi wywołania zwrotnego hasła jest wymagana dla dostawcy, gdy używana jest opcja PasswordDigest. Procedura obsługi wywołania zwrotnego hasła musi być spakowana jako składnik użytkownika w Liberty.
Informacje o tej czynności
W tym zadaniu opisano sposób tworzenia procedury obsługi wywołania zwrotnego hasła w celu pobrania haseł kluczy o nazwie użytkownika i pliku kluczy.
Procedura
- Projektowanie procedury obsługi wywołania zwrotnego hasła.
![[22.0.0.8 i nowsze]](../ng_v22008plus.svg)
W poniższym przykładzie przedstawiono procedurę obsługi wywołania zwrotnego:
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.wss4j.common.ext.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;
}
}
}
}
W wersji 22.0.0.7 i wcześniejszych należy zastąpić org.apache.wss4j.common.ext.WSPasswordCallback w poprzednim przykładzie org.apache.ws.security.WSPasswordCallback.
- Utwórz plik MANIFEST.MF dla procedury obsługi wywołania zwrotnego.
W poniższym przykładzie przedstawiono plik
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
- Pakuj procedurę obsługi wywołania zwrotnego do pliku JAR.
Utwórz plik JAR z klasą procedury obsługi wywołania zwrotnego i plikiem MANIFEST.MF , który został utworzony w poprzednich krokach.
W poniższym przykładzie przedstawiono zawartość przykładowego pliku JAR o nazwie
SampleCbh.jar:
META-INF/MANIFEST.MF
com/ibm/ws/wssecurity/example/cbh/SamplePasswordCallback.class
- Utwórz plik manifestu składnika.
W poniższym przykładzie przedstawiono przykładowy plik manifestu składnika o nazwie
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"
- Zainstaluj procedurę obsługi wywołania zwrotnego jako funkcję użytkownika w polu Liberty.
Skopiuj plik JAR procedury obsługi wywołania zwrotnego i plik manifestu składnika do katalogu użytkownika Liberty .
W poniższym przykładzie przedstawiono, gdzie należy skopiować pliki:
build.image/wlp/usr/extension/lib/SampleCbh.jar
build.image/wlp/usr/extension/lib/features/wsseccbh-1.0.mf
- Skonfiguruj procedurę obsługi wywołania zwrotnego jako funkcję użytkownika w pliku server.xml .
Zdefiniuj procedurę obsługi wywołania zwrotnego jako funkcję użytkownika w pliku server.xml .
W poniższym przykładzie przedstawiono sposób definiowania procedury obsługi wywołania zwrotnego jako składnika użytkownika:
<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>
Wyniki
Pomyślnie opracowano procedurę obsługi wywołania zwrotnego hasła i zainstalowaną procedurę obsługi wywołania zwrotnego dla Liberty.
Co dalej
Teraz można użyć tej procedury obsługi wywołania zwrotnego w celu pobrania haseł dla UsernameTokens i kluczy prywatnych używanych w konfiguracji zabezpieczeń WS-Security.