Par défaut, l'intercepteur de relations de confiance SAML WebSphere Application Server prend en charge la connexion unique initiée par IdP. Une fois le code personnalisé implémenté, l'intercepteur de relations de confiance SAML peut être configuré pour prendre en charge la connexion unique initiée par SP.
Pourquoi et quand exécuter cette tâche
Cette tâche fournit un exemple de classe et décrit les étapes permettant de configurer une connexion unique initiée par SP.
Procédure
- Développez un fournisseur de requête d'authentification SAML qui implémente l'interface com.ibm.wsspi.security.web.saml.AuthnRequestProvider.
La méthode
getAuthnRequest(HttpServletRequest req, String errorMsg, String acsUrl,
ArrayList<String> ssoUrls) doit renvoyer une mappe qui inclut quatre entrées avec les clés suivantes :
- AuthnRequestProvider.SSO_URL
- URL de connexion unique du fournisseur d'identité SAML.
- AuthnRequestProvider.RELAY_STATE
- relayState, tel qu'il est défini par le profil de connexion unique de navigateur Web SAML.
- AuthnRequestProvider.REQUEST_ID
- La valeur de cette clé doit correspondre à la valeur de l'attribut d'ID définie dans le message AuthnRequest.
- AuthnRequestProvider.AUTHN_REQUEST
- Message AuthnRequest codé en base 64 conformément à la définition dans la spécification. Votre code est chargé de générer le message AuthnRequest.
public HashMap <String, String> getAuthnRequest(HttpServletRequest req, String errorMsg,
String acsUrl, ArrayList<String> ssoUrls)
throws NotImplementedException {
//créer une mappe avec les clés suivantes :
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);
//créer AuthnRequest
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;
}
- Placez un fichier jar contenant votre classe personnalisée dans le répertoire (WAS_HOME)/lib/ext.
- Configurez l'intercepteur de relations de confiance de connexion unique Web SAML pour qu'il utilise votre message AuthnRequest.
- Ouvrez une session de console d'administration
WebSphere Application Server.
- Cliquez sur .
- Développez Web et sécurité SIP, puis cliquez sur Relation de confiance.
- Cliquez sur Intercepteurs.
- Cliquez sur com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor
- Pour Propriétés personnalisées, cliquez sur Nouveau, puis indiquez les informations de propriété personnalisée suivantes, où id est l'ID que vous avez affecté au fournisseur de services de connexion unique auquel cette propriété doit s'appliquer :
- Nom : sso_<id>.sp.login.error.page
- Valeur : Nom de classe de votre implémentation AuthnRequestProvider personnalisée.