Bei Verwendung von WSSAPIs können Sie einen Benutzernamen und ein Kennwort
dynamisch an den
Kerberos-Token-Generator, KRBGenerateLoginModule, übermitteln.
Wenn Sie jedoch Richtliniensätze und Bindungen verwenden müssen,
ist es nicht möglich, in einer Standardkonfiguration
einen Benutzername und ein Kennwort dynamisch an den Kerberos-Token-Generator zu übergeben,
weil sowohl der Callback-Handler als auch der Benutzername und das Kennwort im Callback-Handler feste Werte sind.
Dynamische Kerberos-Token können dann mit Richtliniensätzen und Bindungen erstellt werden, wenn ein angepasstes JAAS-Anmeldemodul verwendet wird.
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 Kerberos-Token-Generator für die Anforderung des Kerberos-Tickets verwendet,
anpassen.
Informationen zu diesem Vorgang
Mit einer SPI von GenericSecurityTokenFactory können Sie ein Token erstellen,
das KRBGenerateLoginModule verwendet,
um den Benutzernamen und das Kennwort anzupassen, die beim Anfordern des Kerberos-Tickets verwendet werden.
Die folgende Prozedur zeigt, wie Sie mit der Methode des JAAS-Anmeldmoduls im Stack
den Benutzernamen und das Kennwort, das
KRBGenerateLoginModule zum Erstellen eines Kerberos-Token verwendet, anpassen können. Sie erhalten dasselbe Ergebnis,
wenn Sie das Benutzernamenstoken (UsernameToken), das in dieser Prozedur erstellt wird, in den Anforderungskontext des Clients aufnehmen.
Ein dynamisches Kerberos-Token kann nur aus einem von Ihnen erstellten
Benutzernamenstoken erstellt werden.
Es ist nicht möglich, ein dynamisches Kerberos-Token aus einem Kerberos-Ticket zu erstellen.
Wenn Sie weitere Informationen dazu benötigen, wie das Token in den Anforderungskontext des Clients aufgenommen wird,
sehen Sie sich die folgenden Konstanten in com.ibm.wsspi.wssecurity.core.Constants an:
- com.ibm.wsspi.wssecurity.token.tokenHolder
- com.ibm.wsspi.wssecurity.token.enableCaptureTokenContext
Vorgehensweise
- Erstellen Sie ein angepasstes JAAS-Anmeldemodul.
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;
public class MyKrbCustomLoginModule 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());
}
UsernameToken unt = factory.getSimpleUsernameToken("username", "password".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.krb an.
- Klicken Sie auf
Neu, und geben Sie
Name der Modulklasse = test.tokens.MyKrbCustomLoginModule an.
- Wählen Sie
Proxy für Anmeldemodul verwenden aus.
- Klicken Sie auf OK.
- Klicken Sie auf
Neu, und wählen Sie Name der Modulklasse = com.ibm.ws.wssecurity.wssapi.token.impl.KRBGenerateLoginModule aus.
- Klicken Sie auf
Neu, und wählen Sie Name der Modulklasse = com.ibm.ws.wssecurity.wssapi.token.impl.DKTGenerateLoginModule aus.
- Klicken Sie auf OK.
- Klicken Sie auf
JAAS - Systemanmeldungen.
- Konfigurieren Sie den Kerberos-Token-Generator für die Verwendung der neuen JAAS-Konfiguration.
- Ö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 Kerberos-Token aus, das Sie ändern möchten.
- Wählen Sie JAAS-Anmeldung = test.generate.krb aus.
- Klicken Sie auf Speichern.
- Starten Sie den Anwendungsserver erneut, um die JAAS-Konfigurationsänderungen anzuwenden.
- Testen Sie Ihren Service.