Standardmäßig unterstützt der
WebSphere Application Server-SAML-TAI
(Trust Association Interceptor) das vom IdP eingeleitete SSO (Single Sign-On).
Wenn Sie angepassten Code verwenden,
kann der SAML-TAI so konfiguriert werden, dass er das vom SP eingeleitetes SSO verwendet.
Informationen zu diesem Vorgang
Diese Task stellt eine Beispielklasse bereit und Schritte zum Konfigurieren des von SP eingeleiteten SSO.
Vorgehensweise
- Entwickeln Sie einen SAML-Authentifizierungsanforderungsprovider, der die Schnittstelle
com.ibm.wsspi.security.web.saml.AuthnRequestProvider verwendet.
Die Methode
getAuthnRequest(HttpServletRequest req, String errorMsg, String acsUrl,
ArrayList<String> ssoUrls) muss eine Zuordnung zurückgeben, die vier Einträge für die folgenden Schlüssel enthält:
- AuthnRequestProvider.SSO_URL
- Der Single Sign-on-URL des SAML-Identitätsproviders.
- AuthnRequestProvider.RELAY_STATE
- Der im Single Sign-on-Profil des SAML-Web-Browsers definierte relayState.
- AuthnRequestProvider.REQUEST_ID
- Der Wert für diesen Schlüssel muss mit dem Wert des ID-Attributs in der AuthnRequest-Nachricht übereinstimmen.
- AuthnRequestProvider.AUTHN_REQUEST
- Eine Base64-codierte AuthnRequest-Nachricht gemäß der Definition in der Spezifikation. Ihr Code ist verantwortlich
für das Generieren der AuthnRequest-Nachricht.
public HashMap <String, String> getAuthnRequest(HttpServletRequest req, String errorMsg,
String acsUrl, ArrayList<String> ssoUrls)
throws NotImplementedException {
//Map mit den folgenden Schlüsseln erstellen
HashMap <String, String> map = new HashMap <String, String>();
String ssoUrl = "https://example.com/saml20/Login";
map.put(AuthnRequestProvider.SSO_URL, ssoUrl);
String relayState = generateRandom();
map.put(AuthnRequestProvider.RELAY_STATE, relayState);
String requestId = generateRandom();
map.put(AuthnRequestProvider.REQUEST_ID, requestId);
//AuthnRequest erstellen
String authnMessage = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" "
+"ID=\""+requestID+"\" Version=\"2.0\" "
+ "IssueInstant=\"" +getUTC()+ "\" ForceAuthn=\"false\" IsPassive=\"false\""
+ "ProtocolBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" "
+ "AssertionConsumerServiceURL=\"" +acs+"\" "
+ "Destination=\"" +destination +"\"> "
+ "<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">"
+ issuer
+"</saml:Issuer> <samlp:NameIDPolicy"
+"Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\""
+"SPNameQualifier=\"mysp\""
+"AllowCreate=\"true\" /> <samlp:RequestedAuthnContext Comparison=\"exact\"> "
+"<saml:AuthnContextClassRef xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">"
+"urn:oasis:names:tc:SAML:2.0:ac:classes:</samlp:RequestedAuthnContext> </samlp:AuthnRequest>";
map.put(AuthnRequestProvider.AUTHN_REQUEST, authnMessage);
return map;
}
- Stellen Sie eine
jar-Datei, die Ihre angepasste Klasse enthält, in das Verzeichnis
(WAS_HOME)/lib/ext.
- Konfigurieren Sie den
SAML-Web-SSO-TAI so, dass er Ihre
AuthnRequest-Nachricht verwendet.
- Melden Sie sich an der Administrationskonsole von
WebSphere Application
Server an.
- Klicken Sie auf .
- Klicken Sie unter
Web- und SIP-Sicherheit auf Trust Association.
- Klicken Sie auf Interceptor.
- Klicken Sie auf
com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor
- Klicken Sie für
Angepasste Eigenschaften auf Neu und geben Sie die folgenden
Informationen für angepasste Eigenschaft an, wobei
id für die ID steht, die Sie dem SSO-SP (Service-Provider) zugeordnet haben, für den diese Eigenschaft gelten soll:
- Name: sso_<id>.sp.login.error.page
- Wert: Der Klassenname der angepassten Implementierung von AuthnRequestProvider.