Weitergabe von SAML-Token über die API
Die Funktion für die Weitergabe von SAML-Token ist nützlich für Anwendungen, die über mehrere Server hinweg miteinander interagieren. Die Weitergabefunktion leitet Tokeninformationen im Downstream-Verfahren an andere Server weiter.
Die programmgesteuerte Weitergabe von SAML-Token wird durch eine Kombination expliziter Programmierungsvorgänge und der Verwendung der Laufzeitumgebung von Web Services Security realisiert. Beispielsweise können Sie das SAMLToken aus dem Objekt org.apache.axis2.jaxws.BindingProvider extrahieren. Das Token wird dann für abgehende Aufrufe verwendet. In diesem Beispiel ermöglicht Ihnen die programmgesteuerte Weitergabe des SAML-Tokens, die SAML-Sicherheit auf Anwendungsebene zu nutzen, da die WebSphere-Sicherheit nicht erforderlich ist. Außerdem kann das SAML-Token mit einem beliebigen Protokoll im Downstream-Verfahren übertragen werden.
Sie können das folgende Beispiel verwenden, um das SAMLToken nach Abschluss der ersten Anforderung clientseitig zu extrahieren.
javax.xml.ws.Dispatch dispatch = ...;
dispatch.invoke();
Gehen Sie wie folgt vor, um einen Antwortkontext abzurufen und das SAMLToken zu extrahieren: Map<String, Object> responseContext = dispatch.getResponseContext();
SAMLToken samlToken =
(SAMLToken ) responseContext.get(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
SAMLTOKEN_OUT_MESSAGECONTEXT);
Der folgende Beispielcode zeigt, wie ein SAMLToken für nachfolgende Web-Service-Anforderungen wiederverwendet wird.
javax.xml.ws.Dispatch dispatch = ...;
Der
Web-Service-Client verwendet diesen Code dann, um ein SAMLToken an den Web-Services-Security-Handler weiterzugeben: Map<String, Object> requestContext = dispatch.getRequestContext();
requestContext.put(com.ibm.wsspi.wssecurity.saml.config.SamlConstants.
SAMLTOKEN_IN_MESSAGECONTEXT, samlToken);
Der Web-Service-Provider (Empfänger) kann den folgenden Code verwenden, um ein SAMLToken aus einer eingehenden Web-Service-Anforderung zu extrahieren.
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) {
// Fehlerbehandlung
}
List<SAMLAttribute> allAttributes;
allAttributes = ((SAMLToken) samlToken).getSAMLAttributes();
Die Laufzeitumgebung des Web-Service-Clients kann das SAML-Token zwischenspeichern. Bei nachfolgenden Clientanforderungen in der Anwendung ruft die Sicherheitslaufzeitumgebung das SAML-Token aus dem Cache ab, um es mit dem Ziel zu verwenden.