Sie können an einen externen Sicherheitstokenservice (STS) die Anforderung senden,
SAML-Token mit der Subjektbestätigungsmethode "Holder-of-Key" mit einem für einen Zielservice verschlüsselten symmetrischen Schlüssel auszustellen. Verwenden
Sie das JAX-WS-Programmiermodell (Java™ API for XML-Based Web Services) und WSS-APIs (Web Services
Security APIs), um diese Task auszuführen.
Vorbereitende Schritte
Für diese Task müssen Sie mit dem Programmiermodell JAX-WS, den WSS-APIs, mit SAML-Konzepten
sowie mit Richtliniensätzen zum Konfigurieren und Verwalten von Web-Service-Einstellungen vertraut sein. Gehen Sie
wie folgt vor, bevor Sie mit dieser Task beginnen:
- Lesen Sie die Informationen zur Weitergabe von selbst ausgestellten SAML-HoK-Token mit symmetrischem Schlüssel über WSS-APIs.
- Machen Sie sich damit vertraut, wie integrierte wichtige Funktionen in SAML-Token für den Nachrichtenschutz über WSS-APIs verwendet werden.
Ihr Einsatzszenario setzt voraus, dass SAML-Token von einem externen STS angefordert und keine selbst ausgestellten SAML-Token verwendet werden.
- Lesen Sie die Informationen zum Anfordern von SAML-Sender-Vouches-Token von einem externem STS zwecks Weitergabe über WSS-APIs mit Nachrichtenschutz.
- Lesen Sie die Informationen zum Anfordern von SAML-Sender-Vouches-Token von einem externem STS zwecks Weitergabe über WSS-APIs mit Transportschutz.
- Lesen Sie die Informationen zum Anfordern von SAML-Bearer-Token von einem externem STS zwecks Weitergabe über WSS-APIs mit Transportschutz.
- Machen Sie sich damit vertraut, wie Sie über WSS-APIs auf einen externen STS zugreifen.
Informationen zu diesem Vorgang
Diese Task zeigt Beispielcode, mit dem SAML-Token mit der Subjektbestätigungsmethode "Holder-of-Key"
und dem eingebetteten, für den Zielservice verschlüsselten symmetrischen Schlüssel, über WSS-APIs von einem externen STS angefordert werden.
Diese Task konzentriert sich darauf, eine WS-Trust-Anforderungsnachricht an einen externen STS zu senden, um SAML-HoK-Token (Holder-of-Key)
mit symmetrischen Schlüsseln anzufordern.
Vorgehensweise
- Geben Sie einen STS an, aus dem ein SAML-Sicherheitstoken, das die Subjektbestätigungsmethode "Holder-of-Key" enthält, angefordert werden soll. Beispiel:
com.ibm.websphere.wssecurity.wssapi.WSSFactory factory =
com.ibm.websphere.wssecurity.wssapi.WSSFactory.getInstance();
WSSGenerationContext gencont1 = factory.newWSSGenerationContext();
WSSConsumingContext concont1 = factory.newWSSConsumingContext();
HashMap<Object, Object> cbackMap1 = new HashMap<Object, Object>();
cbackMap1.put(SamlConstants.STS_ADDRESS, "https://www.example.com/sts"); // STS-URL
cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService"); // Zielservice
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_SOAP_VERSION, "1.1");
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_WSTRUST_NAMESPACE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512");
cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_COLLECTION_REQUEST,
"true"); //RST oder RSTC
cbackMap1.put(SamlConstants.TOKEN_TYPE,
"http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0");
cbackMap1.put(SamlConstants.CONFIRMATION_METHOD, "holder-of-key");
Wenn Sie ein SAML-HoK-Sicherheitstoken vom STS anfordern möchten, müssen Sie angeben,
ob ein symmetrischer Schlüssel oder ein öffentlicher Schlüssel über das Element KeyType
in einer Trust-Anforderung eingebettet werden soll. Für dieses Beispiel ist ein symmetrischer Schlüssel erforderlich, wie im nächsten Schritt beschrieben.
- Geben Sie den symmetrischen Schlüssel an, der in SAML-Sicherheitstoken eingebettet werden soll. Beispiel:
cbackMap1.put(SamlConstants.KEY_TYPE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey");
SAMLGenerateCallbackHandler cbHandler1 = new SAMLGenerateCallbackHandler(cbackMap1);
cbHandler1.setWSSConsumingContextForTrustClient(concont1);
cbHandler1.setWSSGenerationContextForTrustClient(gencont1);
SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class, cbHandler1, "system.wss.generate.saml");
Das angeforderte SAML-Token enthält einen symmetrischen Schlüssel, der für den Zielservice verschlüsselt wird. Der STS gibt den
unverschlüsselten Schlüssel über das Element
WS-Trust RequestedProofToken zurück.
Sehen Sie sich das folgende Beispiel an.
<wst:RequestedProofToken>
<wst:BinarySecret
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="_27325D34CE4BCC83141288966548620">n68rFQba+XTZLNBfEc4prg==</wst:BinarySecret>
</wst:RequestedProofToken>
Das Element RequestedProofToken wird hier zu Ihrer Information angezeigt. Die detaillierte Verarbeitung
ist für Benutzer der WSS-APIs nicht verfügbar. Das Element RequestedProofToken und der symmetrische Schlüssel werden von der
WS-Security-Laufzeitumgebung, oder, genauer gesagt, von dem in der JAAS-Anmeldekonfiguration system.wss.geenrate.saml
definierten SAMLGenerateLoginModule verarbeitet.
Ergebnisse
Sie haben sich mit wichtigen Bausteinen vertraut gemacht, die Sie benötigen, um
SAML-Token mit der Subjektbestätigungsmethode "Holder-of-Key" und einem symmetrischen Schlüssel
über WSS-APIs von einem externen STS anzufordern. Bevor Sie das SAML-Token zum Signieren von Anforderungsnachrichten verwenden,
sollten Sie sich mit dem Beispielcode vertraut machen, der im Artikel "Selbst ausgestellte SAML-HoK-Token mit symmetrischem Schlüssel
über WSS-APIs weitergeben" beschrieben wird.