Die SAML-Bibliotheks-API kann verwendet werden, um
einem nicht verschlüsselten
SAML-Token Attribute hinzuzufügen oder Attribute aus dem SAML-Token zu entfernen. Anschließend kann die API verwendet werden, um das SAML-Token
zu signieren oder erneut zu signieren.
Jedes Mal, wenn
Änderungsaktionen für das SAML-Tokenobjekt ausgeführt werden, wird eine vorhandene digitale Signatur des Objekts entfernt.
Informationen zu diesem Vorgang
Die folgende Prozedur beschreibt, wie Sie ein
vorhandenes
SAMLToken-Objekt ändern und anschließend eine neu digitale Signatur für das Token definieren.
Diese Task enthält keine Anweisungen dazu, wie
das vorhandene SAMLToken-Objekt abgerufen wird.
Das vorhandene
SAMLToken-Objekt kann aus einer ankommenden SOAP-Nachricht
über den gemeinsamen
LoginModule-Status kommen,
aus der SAML-Web-SSO über das
Basissicherheitsubjekt, aus einem STS, der
den Trust-Client verwendet, oder es kann sich um ein selbst ausgestelltes Token handeln, das
mit den SAML-APIs erstellt wurde.
Wenn die SAML-APIs Konfigurationsobjekte initialisieren,
wird die Konfiguration aus SamlIssuerConfig.properties abgerufen.
Sie können die Einstellungen in SamlIssuerConfig.properties verwenden oder diese überschreiben.
Diese Prozedur zeigt, wie Sie alle Einstellungen in dieser Datei überschreiben.
- Klonen Sie das vorhandene SAML-Token.
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 ist das vorhandene SAMLTokenObjekt
SAMLTokenFactory samlFactory = null;
//Gewünschte SAML-Token-Factory initialisieren
//samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV20Token11);
//Vorhandenes SAMLToken-Objekt klonen, falls gewünscht.
SAMLToken mySamlToken = factory.newSAMLToken(someSamlToken);
- Fügen Sie dem Token Attribute hinzu oder entfernen Sie Attribut aus dem Token.
//Ein einzelnes Attribut hinzufügen
SAMLAttribute sattribute1 = new SAMLAttribute("Purchases", new String[] {"TooMany"}, null, null, null, null);
mySamlToken.addAttribute(sattribute1);
//Nach dieser ersten addAttribute-Operation gibt es keine digitale Signatur in der
//XML der Tokens. Aufgrund der Änderung wurde die Signatur ungültig.
//Liste mit Attributen hinzufügen
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);
//Attribut löschen
mySamlToken.deleteAttribute(sattribute3);
....
- Signieren Sie das SAML-Token erneut.
RequesterConfig reqData = null;
//Gewünschte Requesterkonfiguration initialisieren
//reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
reqData = samlFactory.newBearerTokenGenerateConfig();
//Providerkonfigurationsobjekt mit dem Namen eines Ausstellers initialisieren
ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig("myIssuer");
//Alternativ den vorhandenen Aussteller beibehalten, indem die Aussteller-URI auf null gesetzt wird
//samlIssuerCfg.setIssuerURI(null);
//Keystore-Informationen festlegen, die mit der digitalen Signatur im Providerkonfigurationsobjekt verwendet werden sollen
KeyStoreConfig ksc = samlFactory.newKeyStoreConfig( "jks", "/myx509.ks", "myx509");
samlIssuerCfg.setKeyStoreConfig(ksc);
//Schlüsselinformationen festlegen, die mit der digitalen Signatur im Providerkonfigurationsobjekt verwendet werden sollen
KeyInformationConfig kic = samlFactory.newKeyInformationConfig("mySignAlias", "password", "CN=ME");
samlIssuerCfg.setKeyInformationConfig(kic);
//Neues SAMLToken-Objekt erstellen, das ein signierter Klon des Eingabetokens ist
SAMLToken myNewSamlToken = samlFactory.newSAMLToken(mySamlToken,reqData,samlIssuerCfg);
- Überprüfen Sie die SAML-Token-XML, um die Änderungen zu sehen.
//SAML-Zusicherungselement abrufen
OMElement samlElement = ((OMStructure) myNewSamlToken.getXML()).getNode();
//Element in eine Zeichenfolge umwandeln
String xmlString = samlElement.toString();