Propagation de jetons SAML à l'aide de l'API

La fonction de propagation SAML est utile pour les applications qui interagissent avec plusieurs serveurs. Elle communique les informations du jeton depuis le serveur d'origine vers les autres serveurs en aval.

La propagation des jetons SAML peut se faire à l'aide de commandes d'administration, ou de façon programmée en utilisant l'interface de programme d'application (API) SAML. La propagation par les commandes d'administration est présentée dans les rubriques Propagation des jetons SAML et Méthodes de propagation des jetons SAML.

La programmation programmée des jetons SAML s'effectue par une combinaison de programmation explicite et par l'utilisation de l'environnement d'exécution de sécurité des services Web. Vous pouvez, par exemple, extraire le jeton SAML de l'objet org.apache.axis2.jaxws.BindingProvider. Le jeton est ensuite utilisé pour les appels sortants. Dans cet exemple, la sécurité WebSphere n'étant pas requise, la propagation programmée du jeton SAML vous permet d'exploiter la sécurité SAML au niveau de l'application. En outre, le jeton SAML peut être communiqué en aval avec tout protocole.

Utilisez le modèle de code suivant pour extraire le jeton SAML du côté client après la première demande.

Créez un objet Dispatch et appelez la demande :
javax.xml.ws.Dispatch dispatch = ...;
dispatch.invoke();
Obtenez un contexte de réponse et extrayez le jeton SAML :
Map<String, Object> responseContext = dispatch.getResponseContext();
 		SAMLToken samlToken = 
       (SAMLToken ) responseContext.get(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
    SAMLTOKEN_OUT_MESSAGECONTEXT);

Le modèle de code suivant illustre la façon de réutiliser un jeton SAML pour des demandes de services web successives.

Le programme de client de services web crée une instance Dispatch pour appeler un service :
javax.xml.ws.Dispatch dispatch = ...;
Le client de services Web utilise ensuite ce code pour transmettre un jeton SAML au gestionnaire de sécurité des Services Web :
Map<String, Object> requestContext = dispatch.getRequestContext();
     requestContext.put(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
     SAMLTOKEN_IN_MESSAGECONTEXT, samlToken);           

Le fournisseur de services web (récepteur) peut utiliser le code suivant pour extraire un jeton SAML à partir d'une demande de services web entrante.

Extrayez un jeton SAML de requestContext :
Subject subject = (Subject) context.get(com.ibm.wsspi.wssecurity.core.Constants.WSSECURITY_TOKEN_WSSSUBJECT);
SAMLToken samlToken = null;
try {
  samlToken = (SAMLToken) AccessController.doPrivileged(
    new java.security.PrivilegedExceptionAction() {
      public Object run() throws java.lang.Exception {
        final java.util.Iterator authIterator = 
           subject.getPrivateCredentials(SAMLToken.class).iterator();

        if ( authIterator.hasNext() ) {
          final SAMLToken token = (SAMLToken) 
          authIterator.next();
          return token;
        }
        return null;
      }
    });
} catch (Exception ex) {
  // Traitement des erreurs
}
  
Extrayez les attributs SAML :
List<SAMLAttribute> allAttributes;
allAttributes = ((SAMLToken) samlToken).getSAMLAttributes();

L'environnement d'exécution du client de services web peut mettre en cache le jeton SAML. Lors des demandes client suivantes à l'intérieur de l'application, l'environnement d'exécution de sécurité récupère le jeton SAML dans le cache pour l'utiliser avec la cible.


Icône indiquant le type de rubrique Rubrique de concept



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=cwbs_samlapipropagate
Nom du fichier : cwbs_samlapipropagate.html