Flux de processus de connexion (AuthnRequest)
SAML 2.0 spécifie un profil SSO de navigateur Web qui implique l’échange d’informations entre un fournisseur d’identité (IdP), un fournisseur de service (SP) et un principal (utilisateur) sur un navigateur Web.
Le fournisseur d’identité peut être n’importe quel service SSO offrant des services d’authentification SAML (par exemple, SSOCircle). Le fournisseur de service est toujours une instance. Le flux de messages commence par une demande de ressource sécurisée auprès du fournisseur de service.
Demander la ressource cible au niveau du portail de services
Le principal demande une ressource cible au fournisseur de service :
https://instance.service-now.com/
L’instance vérifie la demande pour voir si les paramètres URL SAMLRequest et RelayState sont présents. S’ils existent, l’utilisateur a déjà validé avec l’IdP et peut ignorer les étapes 2 à 6.
Émettre une AuthnRequest au fournisseur d’identité
L’instance construit une demande AuthnRequest à envoyer à l’IdP à l’aide de la valeur SAMLRequest . L’instance construit et envoie également une valeur de paramètre d’URL RelayState .
RelayState est une référence opaque aux informations d’état conservées chez le fournisseur de service. La valeur du paramètre SAMLRequest est la valeur déflatée et codée base64 de l’élément <samlp :AuthnRequest> :<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="identifier_1" Version="2.0" IssueInstant="2004-12-05T09:21:59Z" AssertionConsumerServiceIndex="0"><saml:Issuer>https://sp.example.com/SAML2</saml:Issuer><samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/></samlp:AuthnRequest>L’intégration encode ensuite l’élément <samlp :AuthnRequest> et l’envoie en tant que paramètre d’URL SAMLRequest .
Le service SSO traite l’élément <samlp :AuthnRequest> par décodage d’URL, décodage base64 et gonflage de la demande, dans cet ordre. Il procède ensuite à un contrôle de sécurité. Si l’utilisateur ne présente pas de contexte de sécurité valide, l’IdP l’identifie en l’invitant à entrer des informations d’identification de connexion. Si l’utilisateur est déjà connecté, l’IdP répond simplement avec les paramètres d’URL SAMLResponse<tt> et <tt>RelayState (voir étape 3).
Répondre avec une réponse SAML et RelayState
<formmethod="post"action="https://instance.service-now.com/navpage.do" ...><input type="hidden" name="SAMLResponse" value="response ..." /><input type="hidden" name="RelayState" value="token ..." />
...
<input type="submit" value="Submit" /></form>RelayState provient de cette étape. La valeur du paramètre SAMLResponse est le codage base64 de l’élément <samlp :Response> suivant :<samlp:Responsexmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="s2cdc74f37f923e26fe1aeec42b70a93d24230334f" InResponseTo="90AA6073F01567BFB0DF194F596314E2" Version="2.0" IssueInstant="2010-04-29T23:21:51Z" Destination="https://dloomac.service-now.com/navpage.do"><saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://idp.ssocircle.com</saml:Issuer><samlp:Status xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"><samlp:StatusCode xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Value="urn:oasis:names:tc:SAML:2.0:status:Success"></samlp:StatusCode></samlp:Status><saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="s23e536bfc51b8487d4d3299dec162d9c2e338823b" IssueInstant="2010-04-29T23:21:51Z" Version="2.0"><saml:Issuer>http://idp.ssocircle.com</saml:Issuer><Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
...
</Signature><saml:Subject><saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" NameQualifier="http://idp.ssocircle.com" SPNameQualifier="https://dloomac.service-now.com/navpage.do">david.loo@service-now.com</saml:NameID><saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><saml:SubjectConfirmationData InResponseTo="90AA6073F01567BFB0DF194F596314E2" NotOnOrAfter="2010-04-29T23:31:51Z" Recipient="https://dloomac.service-now.com/navpage.do" /></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore="2010-04-29T23:11:51Z" NotOnOrAfter="2010-04-29T23:31:51Z"><saml:AudienceRestriction><saml:Audience>https://dloomac.service-now.com</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatement AuthnInstant="2010-04-29T23:21:51Z" SessionIndex="s2dbf89ab99001e0e8cdaed67266d9d4b21b968a04"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement></saml:Assertion></samlp:Response>Valider la SAMLResponse
La valeur SAMLResponse est décodée et gonflée en base64 pour révéler le document XML à l’étape 3. Le script de connexion extrait la valeur XML de l’élément Subject/NameID et l’utilise pour rechercher un utilisateur existant dans la table Utilisateur.
Le script de connexion extrait également l’ID de session de l’élément AuthnStatement/@SessionIndex et le stocke pour la LogoutRequest.