Sie können an einen externen Sicherheitstokenservice (STS) die Anforderung senden,
SAML-Token mit der Subjektbestätigungsmethode "Holder-of-Key" mit einem öffentlichen Schlüssel in einem X.509-Zertifikat
über das JAX-WS-Programmiermodell (Java™ API for XML-Based Web Services) und WSS-APIs (Web Services Security APIs) auszustellen.
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 asymmetrischem 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 öffentlichen Schlüssel in einem X.509-Zertifikat über WSS-APIs von einem externen STS angefordert werden.
Diese Task konzentriert sich darauf, beim Anfordern von SAML-HoK-Token (Holder-of-Key) ein X.509-Zertifikat an einen externen STS zu senden.
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");
cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService");
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");
Für die Subjektbestätigungsmethode "Holder-of-Key" müssen Sie angeben,
ob ein öffentlicher Schlüssel oder ein symmetrischer Schlüssel in SAML-Token eingebettet werden soll. In diesem Beispiel wird ein öffentlicher Schlüsseltyp angegeben. Dann
wird die Position eines Zertifikats angegeben, das den öffentlichen Schlüssel enthält, und die Position des entsprechenden privaten Schlüssels, damit der Sender
Elemente von SOAP-Nachrichten digital signieren kann, um die Anforderungen der Subjektbestätigungsmethode "Holder-of-Key" zu erfüllen.
- Geben Sie die Position eines X.509-Zertifikats an, das in SAML-Token eingebettet werden soll,
und einen entsprechenden privaten Schlüssel, mit dem Nachrichtenelemente digital signiert werden sollen. Beispiel:
cbackMap1.put(SamlConstants.KEY_TYPE,
"http://docs.oasis-open.org/ws-sx/ws-trust/200512/PublicKey");
cbackMap1.put(SamlConstants.KEY_ALIAS, "soapinitiator" );
cbackMap1.put(SamlConstants.KEY_NAME, "CN=SOAPInitator, O=Example");
cbackMap1.put(SamlConstants.KEY_PASSWORD, "myinitatkeypass");
cbackMap1.put(SamlConstants.KEY_STORE_PATH, "keystores/initiator.jceks");
cbackMap1.put(SamlConstants.KEY_STORE_PASSWORD, "myinitatstorepass");
cbackMap1.put(SamlConstants.KEY_STORE_TYPE, "jceks");
SAMLGenerateCallbackHandler cbHandler1 = new SAMLGenerateCallbackHandler(cbackMap1);
cbHandler1.setWSSConsumingContextForTrustClient(concont1);
cbHandler1.setWSSGenerationContextForTrustClient(gencont1);
SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class, cbHandler1, "system.wss.generate.saml");
Das angegebene X.509-Zertifikat wird in WS-Trust-Anforderungen an den externen STS im Element trust:UseKey gesendet. Weitere Informationen
finden Sie im Artikel zu den im Standard für SAML-Tokenprofile definierten SAML-Zusicherungen.
SSL wird verwendet, um die Integrität und die Vertraulichkeit von WS-Trust-Anforderungs- und -Antwortnachrichten in diesem Beispiel zu schützen.
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 asymmetrischen 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 asymmetrischem Schlüssel
über WSS-APIs weitergeben" beschrieben wird.