Benutzernamenstoken
Mit dem Element <UsernameToken> können Sie einen Benutzernamen und optional Kennwortinformationen weitergeben. Außerdem können mit diesem Tokentyp Daten für die Basisauthentifizierung übertragen werden. Für die Authentifizierung der SOAP-Nachricht werden ein Benutzername und ein Kennwort verwendet.
OASIS: Web Services Security: UsernameToken Profile 1.0
Ein Element <UsernameToken> mit Benutzernamen wird für die Zusicherung der Identität verwendet. Dabei wird die Identität des Benutzers auf der Basis des Vertrauensverhältnisses festgestellt.
Das folgende Beispiel zeigt die Syntax des Elements <UsernameToken>:
<wsse:UsernameToken wsu:Id="Example-1">
<wsse:Username>
...
</wsse:Username>
<wsse:Password Type="...">
...
</wsse:Password>
<wsse:Nonce EncodingType="...">
...
</wsse:Nonce>
<wsu:Created>
...
</wsu:Created>
</wsse:UsernameToken>
Die Spezifikation "Web Services Security" definiert die folgenden Kennworttypen:
- http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText (default)
- Dieser Typ gibt das tatsächliche Kennwort für den Benutzernamen an.
- http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest
- Dieser Typ gibt einen Auszug (Digest) des Kennworts für den Benutzernamen an. Der Wert ist ein gemäß Base64-SHA1 verschlüsselter Hash-Wert des in UTF8 codierten Kennworts.
WebSphere Application Server unterstützt den Standardtyp PasswordText. Das Produkt bietet jedoch keine Unterstützung für Nachrichtenauszüge, weil die Sicherheitsrichtlinien der meisten Benutzerregistrys nicht zulassen, dass das Kennwort gegenüber der Anwendungssoftware offengelegt wird.
<S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<S:Header>
...
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>Joe</wsse:Username>
<wsse:Password>ILoveJava</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</S:Header>
</S:Envelope>
OASIS: Web Services Security: UsernameToken Profile 1.1
WebSphere Application Server unterstützt die Standards Username Token Profile 1.0 und Version 1.1.
WebSphere Application Server bietet keine Unterstützung für folgende Funktionen:
- In beiden Versionen der Spezifikation "Username Token Profile" wird der Digest-Kennworttyp nicht unterstützt.
- In beiden Versionen der Spezifikation "Username Token Profile" wird die Schlüsselableitung auf der Basis eines Kennworts nicht unterstützt.
Sie können Richtliniensätze verwenden, um das Element "UsernameToken" über die Administrationskonsole zu konfigurieren. Außerdem können Sie die WS-Security-APIs verwenden, um das Benutzernamenstoken der SOAP-Nachricht zuzuordnen. In der folgenden Abbildung wird die Erstellung und Validierung des Benutzernamenstokens für die Programmiermodelle JAX-RPC und JAX-WS beschrieben.
Erstellung und Validierung des Benutzernamenstokens mit dem JAAS-Anmeldemodul und dem JAAS-Callback-Handler in JAX-RPC

Erstellung und Validierung des Benutzernamenstokens mit dem JAAS-Anmeldemodul und dem JAAS-Callback-Handler in JAX-WS

Auf der Generatorseite wird das Benutzernamenstoken unter Verwendung des JAAS-Anmeldemoduls erstellt, und mit dem JAAS-Callback-Handlers werden die Authentifizierungsdaten übergeben. Das JAAS-Anmeldemodul erstellt das UsernameToken-Objekt und übergibt es an die Laufzeitumgebung von Web Services Security.
Auf der Konsumentenseite wird das XML-Format des Benutzernamenstokens zur Validierung bzw. Authentifizierung an das JAAS-Anmeldemodul übergeben, und der JAAS-Callback-Handler wird verwendet, um die Authentifizierungsdaten von der Laufzeitumgebung von Web Services Security an das JAAS-Anmeldemodul zurückzugeben. Nach der Authentifizierung des Tokens wird ein UsernameToken-Objekt erstellt und an die Laufzeitumgebung von Web Services Security übergeben.
Der folgende Beispielcode veranschaulicht die Erstellung von Benutzernamenstoken:
WSSFactory factory = WSSFactory.getInstance();
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Benutzernamenstoken der Nachricht zuordnen
UNTGenerationCallbackHandler ugCallbackHandler =
newUNTGenerationCallbackHandler("alice", "ecila");
SecurityToken ut = factory.newSecurityToken(ugCallbackHandler,
UsernameToken.class);
gencont.add(ut);
// WS-Security-Header generieren
gencont.process(msgctx);