Demande de jetons holder-of-key SAML avec une clé asymétrique à partir du service External Security Token Service à l'aide des API WSS

Vous pouvez demander à un service STS d'émettre des jetons SAML avec la méthode de confirmation de sujet holder-of-key avec une clé publique dans un certificat X.509 avec l'API Java™ pour le modèle de programmation XML-Based Web Services (JAX-WS) et les API de sécurité de services Web (API WSS).

Avant de commencer

On considère ici que vous connaissez le modèle de programmation JAX-WS, les API WSS, les concepts de SAML et l'utilisation des ensembles de règles pour configurer et administrer les paramètres des services Web. Procédez comme suit avant de commencer cette tâche :
  • Consultez la documentation sur la propagation des jetons holder-of-key SAML auto-générés avec une clé asymétrique à l'aide des API WSS.
  • Découvrez l'utilisation des matériaux clés imbriqués dans les jetons SAML pour la protection de message en utilisant les API WSS. Votre scénario d'utilisation requiert la demande de jetons SAML à partir d'un STS externe d'utilisation de jetons SAML auto-générés.
  • Consultez la documentation sur la demande de jetons SAML sender-vouches à partir d'un STS externe à propager à l'aide des API WSS avec la protection au niveau des messages
  • Consultez la documentation sur la demande de jetons SAML sender-vouches à partir d'un STS externe à propager à l'aide des API WSS avec la protection au niveau du transport
  • Consultez la documentation sur la demande de jetons porteurs SAML à partir d'un STS externe à propager à l'aide des API WSS avec la protection au niveau du transport
  • Découvrez l'accès à un STS externe à l'aide des API WSS.

Pourquoi et quand exécuter cette tâche

Cette tâche présente un exemple de code pour demander des jetons SAML avec la méthode de confirmation de sujet holder-of-key et la clé publique imbriquée dans un certificat X.509 en utilisant les API WSS, à partir d'un STS externe. Cette tâche se concentre sur l'envoi d'un certificat X.509 à un STS externe lors de la demande de jetons holder-of-key SAML.

Procédure

  1. Spécifiez un STS à partir duquel demander un jeton de sécurité SAML qui contient une méthode de confirmation de sujet holder-of-key, par exemple :
    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 or 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");

    Pour la méthode de confirmation de sujet holder-of-key, vous devez spécifier si une clé publique ou une clé symétrique est imbriquée dans les jetons SAML. Cet exemple spécifie un type de clé publique. Il spécifie alors l'emplacement d'un certificat qui contient la clé publique et l'emplacement de la clé privée correspondante pour que l'expéditeur signe numériquement les éléments de messages SOAP afin de répondre aux besoins de confirmation de sujet holder-of-key.

  2. Spécifiez l'emplacement d'un certificat X.509 à imbriquer dans les jetons SAML et une clé privée correspondante à utiliser pour signer de manière numérique les éléments du message, par exemple :
    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");

    Le certificat X.509 spécifié est envoyé dans des demandes WS-Trust au STS externe dans l'élément trust:UseKey. Pour plus d'informations, consultez la documentation sur les assertions SAML définies dans la norme de profil de jeton SAML. SSL est utilisé pour protéger l'intégrité et la confidentialité de la demande WS-Trust et message de réponse dans cet exemple.

Résultats

Vous avez appris aux blocs de création de clé à demander des jetons SAML avec une méthode de confirmation de sujet holder-of-key et une clé asymétrique à partir d'un STS externe à l'aide des API WSS. Pour que le jeton SAML signe les messages de demande, découvrez l'exemple de code de la rubrique concernant la propagation des jetons holder-of-key SAML auto-générés avec une clé asymétrique en utilisant les API WSS.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_configsamlhok_asymmetric_sts_client
Nom du fichier : twbs_configsamlhok_asymmetric_sts_client.html