Bei Verwendung von WSS-SPIs können Sie einen Benutzernamen und ein Kennwort dynamisch
an den
LTPA-Token-Generator, LTPAGenerateLoginModule, übergeben.
Wenn Sie jedoch Richtliniensätze und Bindungen verwenden müssen,
ist es nicht möglich, ist diese Vorgehensweise in einer Standardkonfiguration nicht möglich,
weil sowohl der Callback-Handler als auch der Benutzername und das Kennwort im Callback-Handler feste Werte sind.
Wenn Sie ein angepasstes JAAS-Anmeldemodul verwenden, können Sie
mit Richtliniensätzen und Bindungen dynamische Kerberos-Token erstellen.
Vorbereitende Schritte
Wenn Sie ein angepasstes JAAS-Anmeldemodul erstellen oder
dem Anforderungskontext eines Clients ein Benutzernamenstoken (UsernameToken) hinzufügen,
können Sie Benutzernamen und Kennwort, die der LTPA-Token-Generator zum Erstellen eines LTPA-Tokens verwendet, anpassen.
Es ist außerdem möglich, das Token direkt anzupassen, indem die vom LTPA-Token-Generator verwendeten
Token-Byte angegeben werden.
Die Angabe der Token-Byte ist nützlich, wenn ein Anwendungsentwickler Code schreiben möchte, der
das LTPA-Token aus dem HTTP-Header einer ankommenden Anforderung abruft und in den Sicherheitsheader einer abgehenden SOAP-Nachricht einfügt.
Informationen zu diesem Vorgang
Mit den SPIs von GenericSecurityTokenFactory können Sie ein Token erstellen,
das LTPAGenerateLoginModule verwenden kann, um das von diesem Modul generierte
LTPA-Token anzupassen.
Diese SPIs ermöglichen die Verwendung dynamischer Benutzernamen und Kennwörter oder die direkte Angabe der Token-Byte.
Diese Funktionalität wird vom Callback-Handler nicht bereitgestellt.
Die folgende Prozedur zeigt, wie Sie mit der Methode des JAAS-Anmeldmoduls im Stack
den Benutzernamen und das Kennwort oder die Token-Byte anpassen.
Nach Ausführung dieser Prozedur können Sie das neu erstellte Token in den Anforderungskontext des Clients aufnehmen.
Wenn Sie weitere Informationen dazu benötigen, wie das Token in den Anforderungskontext des Clients aufgenommen wird,
sehen Sie sich die folgenden Konstanten in der Javadoc
com.ibm.wsspi.wssecurity.core.Constants an.
- com.ibm.wsspi.wssecurity.token.tokenHolder
- com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext
Vorgehensweise
- Dynamisches Token erstellen.
Führen Sie einen der folgenden untergeordneten Schritte aus:
- Einfaches Benutzernamenstoken erstellen, um Benutzernamen und Kennwort anzupassen.
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
...
GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
UsernameToken myUnt = gstFactory.getSimpleUsernameToken("myUsername", "myPassword".toCharArray());
- Einfaches BinarySecurityToken erstellen, um die Token-Byte anzupassen.
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import com.ibm.websphere.wssecurity.wssapi.token.BinarySecurityToken;
import com.ibm.websphere.wssecurity.wssapi.WSSUtilFactory;
...
GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance();
WSSUtilFactory utilFactory = WSSUtilFactory.getInstance();
//callbackHandler wird aus der Initialisierungsmethode im Anmeldemodul abgerufen
Map reqHeaders = utilFactory.getHTTPRequestHeaders(callbackHandler);
//getLtpaHeaderBytes ist eine Methode, die Sie schreiben, um den Header zu ermitteln,
//in dessen Header-Liste das LTPA-Token enthalten ist, und um anschließend die
//codierten Byte aus dem Header zurückzugeben.
String encodedBytes = getLtpaHeaderBytes(reqHeaders);
byte [] decodedBytes = utilFactory.decode(encodedBytes);
BinarySecurityToken bst = factory.getSimpleBinarySecurityToken(com.ibm.websphere.wssecurity.wssapi.token.LTPAv2Token, decodedBytes);
- JAAS-Anmeldemodul erstellen.
package test.tokens;
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
import com.ibm.websphere.wssecurity.wssapi.token.UsernameToken;
import com.ibm.websphere.wssecurity.wssapi.token.BinarySecurityToken;
public class MyUntCustomLoginModule implements LoginModule {
//Aus Gründen der Lesbarkeit ist dieses Anmeldemodul so
//aufgebaut, dass es nicht vor allen Nullzeigerausnahmen (NPEs) schützt
private Map _sharedState;
private Map _options;
private CallbackHandler _handler;
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String, ?> sharedState, Map<String, ?> options) {
this._handler = callbackHandler;
this._sharedState = sharedState;
this._options = options;
}
public boolean login() throws LoginException {
GenericSecurityTokenFactory factory = null;
try {
factory = GenericSecurityTokenFactory.getInstance();
} catch (Exception e) {
throw new LoginException(e.toString());
}
//Der Code, der zum Erstellen des BinarySecurityToken verwendet wurde, kann
//hier anstelle des einfachen Benutzernamenstokens verwendet werden
UsernameToken unt = factory.getSimpleUsernameToken("myUsername", "myPassword".toCharArray());
factory.putGeneratorTokenToSharedState(this._sharedState, unt);
return true;
}
//Implementierung der übrigen Methoden, die die Schnittstelle des Anmeldemoduls
//(LoginModule) erfordert.
}
- Erstellen Sie eine neue JAAS-Anmeldekonfiguration.
- Wählen Sie in der Administrationskonsole
Sicherheit -> Globale Sicherheit aus.
- Wählen Sie unter "Authentifizierung"
Java Authentication and Authorization Service aus.
- Wählen Sie
Systemanmeldungen aus.
- Erstellen Sie zunächst den Generator mit dem angepassten Modul.
- Klicken Sie auf
Neu, und geben Sie Alias = test.generate.ltpa an.
- Klicken Sie auf
Neu, und geben Sie
Name der Modulklasse = test.tokens.MyUntCustomLoginModule an.
- Wählen Sie
Proxy für Anmeldemodul verwenden aus.
- Klicken Sie auf OK.
- Klicken Sie auf
Neu, und wählen Sie
com.ibm.ws.wssecurity.wssapi.token.impl.LTPAGenerateLoginModule aus.
- Klicken Sie auf OK.
- Klicken Sie auf
JAAS - Systemanmeldungen.
- LTPA-Token-Generator für die Verwendung der neuen JAAS-Konfiguration konfigurieren.
- Öffnen Sie die Bindungskonfiguration, die geändert werden soll.
Wählen Sie in der Administrationskonsole WS-Security
> Authentifizierung und Zugriffsschutz aus.
- Wählen Sie unter
"Authentifizierungstoken" das abgehende LTPA-Token aus, das Sie ändern möchten.
- Wählen Sie JAAS-Anmeldung = test.generate.ltpa aus.
- Klicken Sie auf Speichern.
- Starten Sie den Anwendungsserver erneut, um die JAAS-Konfigurationsänderungen anzuwenden.
- Testen Sie Ihren Service.