/
Connecteur - CAS - SSO et SLO

Connecteur - CAS - SSO et SLO

Configurer le connecteur en console

  • Champs spécifique CAS : coché

  • Type de CASPermet de choisir une enveloppe d'attribut qui sera transmise au service tiers pour qu'il identifie l'utilisateur connecté à l'ENT

  • Pattern CAS : Définit un modèle d'URL à associer avec un type de réponse (Type de CAS)

  • URL : URL de service 

  • Logo

Transmettre à l'éditeur les informations connecteur

Demander à l'éditeur les informations

  • URL de service ( à renseigner dans le champs "URL")

Procédures SSO (Single Sign-On)

1 - Demander au serveur CAS d'authentifier l'utilisateur (/cas/login)

Entrer l'URL de login CAS avec en paramètre "service", l'URL du connecteur qui se conforme aux champs "Pattern CAS" pour récupérer un ticket CAS

https://domaine.ent/cas/login?service=http://duckduckgo.com

En cas de succès le navigateur redirige vers l'URL du connecteur avec en paramètre "ticket" : le ticket CAS à utiliser pour récupérer les attributs utilisateurs

https://duckduckgo.com/?ticket=ST-aec6e039-85ff-47fb-93aa-7d2da8d70716

 En cas d'erreur (principalement si l'URL du connecteur n'est pas reconnu) le serveur CAS de l'ENT répond :

INVALID_SERVICE

2 - Collecter les attributs d'authentification /cas/serviceValidate

Entrer l'URL de "validation de service" CAS avec en paramètre "service" l'URL du connecteur et en paramètre "ticket" le ticket récupérer en 1. Pour récupérer les attributs de l'utilisateur 

https://domaine.ent/cas/serviceValidate?ticket=ST-f05adb03-e2e6-465d-a795-bf54311414c7&service=http://duckduckgo.com

    

En cas de succès le serveur CAS de l'ENT répond :

<cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> <cas:authenticationSuccess> <cas:user>74a9412a-60af-4332-a78b-f6fde17d95e9</cas:user> <cas:attributes> <cas:longTermAuthenticationRequestTokenUsed>false</cas:longTermAuthenticationRequestTokenUsed> <cas:authenticationdate>2024-05-28T10:21:47.415</cas:authenticationdate> <cas:isfromnewlogin>false</cas:isfromnewlogin> <cas:userAttributes> <cas:login>abner.evane2</cas:login> <cas:lastName>Evane</cas:lastName> <cas:displayName>Evane Abner</cas:displayName> <cas:birthDate>2024-05-15</cas:birthDate> <cas:email/> <cas:profile>Teacher</cas:profile> <cas:schools> <cas:school externalId="0870045B" main="false" name="Lycée Hugues Capet"> <cas:classes> <cas:classe externalId="LIMOGES-953$1ERE S 1">1ERE S 1</cas:classe> </cas:classes> </cas:school> </cas:schools> </cas:userAttributes> </cas:attributes> </cas:authenticationSuccess> </cas:serviceResponse>

En cas d'erreur le serveur CAS de l'ENT répond avec un code d'erreur et un messsage qui explicite l'erreur

 

<cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> <cas:authenticationFailure code="INVALID_TICKET">the ticket provided was not valid, or the ticket did not come from an initial login and "renew" was set on validation.</cas:authenticationFailure> </cas:serviceResponse>

2 bis - Collecter les attributs d'authentification (/cas/samlValidate)

Poster avec un client HTTP (ci-dessous cURL) le ticket dans une enveloppe SAML comme dans l'exemple suivant

curl "https://domaine.ent/cas/samlValidate?TARGET=http://duckduckgo.com" \ -X POST \ -H "Content-Type: application/xml" \ -d '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> \ <SOAP-ENV:Header/> \ <SOAP-ENV:Body> \ <samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" MajorVersion="1" MinorVersion="1"> \ <samlp:AssertionArtifact>ST-5a057e63-a558-4eb8-a57a-4d9f485af8a9</samlp:AssertionArtifact> \ </samlp:Request> \ </SOAP-ENV:Body> \ </SOAP-ENV:Envelope>'

    

En cas de succès le serveur CAS de l'ENT répond :

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <Response xmlns="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" IssueInstant="2018-09-03T15:40:02.256Z" MajorVersion="1" MinorVersion="1" Recipient="http://localhost.pronote" ResponseID="_683290f2-f006-4ac6-b185-e2d78512c4f3"> <Status> <StatusCode Value="samlp:Success"></StatusCode> </Status> <Assertion xmlns="urn:oasis:names:tc:SAML:1.0:assertion" AssertionID="_42ae9730-663e-4063-b6d8-557e98cd1556" IssueInstant="2018-09-03T15:40:02.256Z" Issuer="localhost" MajorVersion="1" MinorVersion="1"> <Conditions NotBefore="2018-09-03T15:40:02.256Z" NotOnOrAfter="2018-09-03T15:40:32.256Z"> <AudienceRestrictionCondition> <Audience>http://localhost.pronote</Audience> </AudienceRestrictionCondition> </Conditions> <AttributeStatement> <Subject> <NameIdentifier>rafik.djedjig</NameIdentifier> <SubjectConfirmation> <ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:artifact</ConfirmationMethod> </SubjectConfirmation> </Subject> <Attribute AttributeName="categories" AttributeNamespace="http://www.ja-sig.org/products/cas"> <AttributeValue >National_4</AttributeValue > </Attribute > <Attribute AttributeName="nom" AttributeNamespace="http://www.ja-sig.org/products/cas"> <AttributeValue >Djedjig</AttributeValue > </Attribute > <Attribute AttributeName="prenom" AttributeNamespace="http://www.ja-sig.org/products/cas"> <AttributeValue >Rafik</AttributeValue > </Attribute > </AttributeStatement> <AuthenticationStatement AuthenticationInstant="2018-09-03T15:40:02.256Z" AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"> <Subject> <NameIdentifier>rafik.djedjig</NameIdentifier> <SubjectConfirmation> <ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:artifact</ConfirmationMethod> </SubjectConfirmation> </Subject> </AuthenticationStatement > </Assertion> </Response> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Procédure de SLO (Single Log Out)

La déconnexion générale de la plateforme via l’appel GET https://domaine.ent/auth/logout déclenche une procédure de SLO CAS. Les opérations suivantes sont déclenchées :

  • Destruction de session générale de l’utilisateur

  • Récupération des sessions CAS actives de l’utilisateur (sous forme de ticket CAS)

  • Destruction des sessions CAS actives de l’utilisateur

  • Envoie d’un message serveur à serveur sur l’URL de service CAS de chaque ticket CAS)

    • POST <ServiceTicket.serviceURI>

      <samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="[RANDOM ID]" Version="2.0" IssueInstant="[CURRENT DATE/TIME]"> <saml:NameID>@NOT_USED@</saml:NameID> <samlp:SessionIndex>[SESSION IDENTIFIER]</samlp:SessionIndex> </samlp:LogoutRequest>

Le client CAS doit détruire sa session utilisateur en réaction à l’appel POST de la procédure de SLO

 

Related content