Selbst ausgestellte SAML-HoK-Token mit asymmetrischem Schlüssel über WSS-APIs vom externen STS anfordern

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

  1. 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.

  2. 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.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_configsamlhok_asymmetric_sts_client
Dateiname:twbs_configsamlhok_asymmetric_sts_client.html