Insertion des attributs SAML à l'aide des API WSS

Vous pouvez insérer des attributs personnalisés dans des jetons SAML auto-émis à l'aide du modèle de programmation Java™ API for XML-Based Web Services (JAX-WS) et des API de sécurité des 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 :
  • Informez-vous sur la propagation des jetons SAML bearer (porteurs) auto-générés à l'aide des API WSS.
  • Consultez la documentation sur la propagation des jetons sender-vouches SAML auto-générés en utilisant les API WSS avec une protection de niveau de message.
  • Consultez la documentation sur la propagation des jetons sender-vouches SAML auto-générés en utilisant les API WSS avec une protection de transport SSL.
  • 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.
  • 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.

A propos de cette tâche

Cette tâche montre un exemple de code qui insère les attributs personnalisés dans des jetons de sécurité SAML auto-générés. Cet exemple particulier utilise la méthode de confirmation de sujet de porteur. Vous pouvez ajouter des attributs aux jetons de sécurité SAML et le même code peut être utilisé avec d'autres méthodes de confirmation de sujet.

Procédure

Insérez les attributs personnalisés lors de la création des jetons de sécurité SAML, par exemple :
import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
import com.ibm.websphere.wssecurity.callbackhandler.SAMLGenerateCallbackHandler;
import com.ibm.websphere.wssecurity.wssapi.token.SAMLToken;
import com.ibm.wsspi.wssecurity.core.token.config.WSSConstants;
import com.ibm.wsspi.wssecurity.saml.config.SamlConstants;
import com.ibm.wsspi.wssecurity.saml.data.SAMLAttribute;

WSSFactory factory = WSSFactory.getInstance();
HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put(SamlConstants.CONFIRMATION_METHOD, "Bearer");
map.put(SamlConstants.Token_REQUEST, "issue");
map.put(SamlConstants.TOKEN_TYPE, WSSConstants.SAML.SAML20_VALUE_TYPE);
map.put(SamlConstants.SAML_NAME_IDENTIFIER, "Alice");
map.put(SamlConstants.SIGNATURE_REQUIRED, "true");
ArrayList<SAMLAttribute> al = new ArrayList<SAMLAttribute>();
String groups[] = {"IBMer", "Texan"};
SAMLAttribute sattribute = new SAMLAttribute("Membership", groups, null,null, null, null);
al.add(sattribute);
String gender[] = {"Female"};
sattribute = new SAMLAttribute("Gender", gender, null,null, null, null);
al.add(sattribute);
map.put(SamlConstants.SAML_ATTRIBUTES, al);
SAMLGenerateCallbackHandler callbackHandler = new SAMLGenerateCallbackHandler(map);	
SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class, callbackHandler,
                                                  "system.wss.generate.saml");

Résultats

Vous avez inséré des attributs personnalisés à un jeton de sécurité SAML.

Exemple

L'exemple suivant montre les attributs personnalisés dans l'assertion SAML :
<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
				              Version="2.0"
                       ID="_E62A1CA3C2F21D9A9B1287772824570"
                       IssueInstant="2010-10-22T18:40:24.531Z">
    <saml2:Issuer>example.com</samls2:Issuer>
    <ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
    ...
    </ds:Signature>
    <saml2:Subject>
        <saml2:NameID>Alice</saml2:NameID>
        <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"></saml2:SubjectConfirmation>
    </saml2:Subject>
    <saml2:Conditions NotBefore="2010-10-22T18:40:24.531Z"
		                  NotOnOrAfter="2010-10-22T19:40:24.531Z">
    </saml2:Conditions>
    <saml2:AttributeStatement>
        <saml2:Attribute Name="Membership">
            <saml2:AttributeValue>IBMer</saml2:AttributeValue>
            <saml2:AttributeValue>Texan</saml2:AttributeValue>
        </saml2:Attribute>
        <saml2:Attribute Name="Gender">
            <saml2:AttributeValue>Female</saml2:AttributeValue>
        </saml2:Attribute>
    </saml2:AttributeStatement>
</saml2:Assertion>

Etape suivante

Fusionnez le code avec l'exemple de code répertorié dans le Propagation de jetons de support SAML auto-émis à l'aide des API WSS rubrique pour générer des jetons de sécurité SAML. Vous pouvez voir des attributs SAML dans les assertions SAML.