L'API de bibliothèque SAML peut être utilisée pour ajouter des attributs ou
en supprimer d'un jeton SAML non chiffré, puis signer ou resigner le jeton SAML. Chaque
fois que des actions sont effectuées pour modifier l'objet de jeton SAML, s'il existe
déjà une signature numérique sur l'objet, la signature numérique existante est supprimée.
Pourquoi et quand exécuter cette tâche
La procédure ci-après décrit comment modifier un objet
SAMLToken existant, puis appliquer une nouvelle signature numérique au jeton.
Cette tâche ne montre pas comment obtenir l'objet SAMLToken existant.
L'objet SAMLToken existant peut provenir d'un protocole SOAP entrant par le biais
de l'état partagé LoginModule, d'une connexion unique Web SAML par le biais du sujet de
sécurité de base, d'un service STS qui utilise le client d'accréditation ou d'un jeton
auto-généré créé avec les API SAML.
Lorsque les API SAML initialisent
les objets de configuration, la configuration est obtenue du fichier
SamlIssuerConfig.properties.
Vous pouvez choisir d'utiliser les
paramètres du fichier SamlIssuerConfig.properties ou de les
remplacer. Cette procédure explique comment remplacer tous les paramètres de
ce fichier.
- Clonez le jeton SAML existant.
import java.util.ArrayList;
import org.apache.axiom.om.OMElement;
import com.ibm.websphere.wssecurity.wssapi.token.SAMLToken;
import com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory;
import com.ibm.wsspi.wssecurity.saml.config.ProviderConfig;
import com.ibm.wsspi.wssecurity.saml.config.RequesterConfig;
import com.ibm.wsspi.wssecurity.saml.data.SAMLAttribute;
import com.ibm.wsspi.wssecurity.wssapi.OMStructure;
....
//someSAMLToken correspond à l'objet SAMLToken existant
SAMLTokenFactory samlFactory = null;
//initialisation de la fabrique de jetons SAML souhaitée
//samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV20Token11);
//clonage éventuel de l'objet SAMLToken existant.
SAMLToken mySamlToken = factory.newSAMLToken(someSamlToken);
- Ajoutez ou supprimez des attributs dans le jeton.
//ajout d'un attribut
SAMLAttribute sattribute1 = new SAMLAttribute("Purchases", new String[] {"TooMany"}, null, null, null, null);
mySamlToken.addAttribute(sattribute1);
//après ce premier élément addAttribute, il n'y aura pas de signature numérique dans le
//XML du jeton. La modification d'un jeton a invalidé la signature.
//ajout d'une liste d'attributs
SAMLAttribute sattribute2 = new SAMLAttribute("Address", new String[] {"Austin, Texas"},null,null,"IBM NameFormat","IBM FriendlyName");
SAMLAttribute sattribute3 = new SAMLAttribute("Membership",new String[] {"Blue team", "Green Team"},null,null,null,null );
ArrayList al = new ArrayList();
al.add(sattribute2);
al.add(sattribute3);
mySamlToken.addAttribute(al);
//suppression d'un attribut
mySamlToken.deleteAttribute(sattribute3);
....
- Resignez le jeton SAML.
RequesterConfig reqData = null;
//initialisation de la configuration de demandeur souhaitée
//reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
reqData = samlFactory.newBearerTokenGenerateConfig();
//initialisation de l'objet de configuration de fournisseur avec un nom d'émetteur
ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig("myIssuer");
//Ou conservation de l'émetteur existant en affectant à l'URI de l'émetteur la valeur null
//samlIssuerCfg.setIssuerURI(null);
//définition des informations sur le magasin de clés à utiliser avec la signature numérique dans l'objet de configuration de fournisseur
KeyStoreConfig ksc = samlFactory.newKeyStoreConfig( "jks", "/myx509.ks", "myx509");
samlIssuerCfg.setKeyStoreConfig(ksc);
//définition des informations sur la clé à utiliser avec la signature numérique dans l'objet de configuration de fournisseur
KeyInformationConfig kic = samlFactory.newKeyInformationConfig("mySignAlias", "password", "CN=ME");
samlIssuerCfg.setKeyInformationConfig(kic);
//création d'un objet SAMLToken correspondant à un clone signé du jeton en entrée
SAMLToken myNewSamlToken = samlFactory.newSAMLToken(mySamlToken,reqData,samlIssuerCfg);
- Inspectez le XML du jeton SAML pour voir les modifications.
//obtention de l'élément d'assertion SAML
OMElement samlElement = ((OMStructure) myNewSamlToken.getXML()).getNode();
//conversion de l'élément en chaîne
String xmlString = samlElement.toString();