Vous pouvez demander à un service STS
(Security Token Service)
externe d'émettre des jetons SAML avec la méthode de confirmation de sujet holder-of-key
avec la clé symétrique chiffrée pour un service cible. Utilisez le modèle de programmation Java™ API for XML-Based Web Services (JAX-WS) et les API Web Services Security (API WSS)
pour effectuer cette tâche.
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é symé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 montre un exemple de code pour demander des jetons SAML à partir
d'un STS externe, avec la méthode de confirmation de sujet holder-of-key et la clé symétrique
imbriquée chiffrée pour le service cible en utilisant les API
WSS. Cette tâche se concentre sur l'envoi d'un message de demande WS-Trust
à un STS externe pour demander des jetons holder-of-key SAML avec des clés symétriques.
Procédure
- 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"); //STS URL
cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService"); //Target Service
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 demander un jeton de sécurité SAML holder-of-key à partir du STS, vous devez spécifier
s'il faut imbriquer une clé symétrique ou une clé publique via l'élément
KeyType dans une demande de confiance. Cet exemple requiert une clé symétrique, comme dans l'exemple de
l'étape suivante.
- Spécifiez la clé symétrique à imbriquer dans les jetons de sécurité SAML,
par exemple :
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");
Le jeton SAML demandé contient une clé symétrique chiffrée pour le service cible. Le STS renvoie également la clé symétrique non chiffrée via l'élément
WS-Trust RequestedProofToken.
Voir l'exemple suivant.
<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>
L'élément RequestedProofToken
est montré ici pour votre information. Le traitement détaillé n'est pas exposé aux utilisateurs des
API WSS. L'élément RequestedProofToken
et la clé symétrique sont gérés par l'environnement d'exécution de sécurité des services Web,
ou plus précisément par le SAMLGenerateLoginModule spécifié dans la configuration
de connexion JAAS system.wss.geenrate.saml.
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,
voyez l'exemple de code de la rubrique concernant la propagation
des jetons holder-of-key SAML auto-générés avec une clé symétrique
en utilisant les API WSS.