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 SP
Le principal demande une ressource cible chez le fournisseur de services :
https://instance.service-now.com/
L’instance vérifie la demande pour voir si les paramètres d’URL SAMLRequest et RelayState sont présents. Le cas échéant, l’utilisateur a déjà validé avec l’IdP et peut ignorer les étapes 2 à 6.
Émettre une demande AuthnRequest au fournisseur d’identité
L’instance construit une 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égonflée et codée en 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 code ensuite l’URL de 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> en décodant URL, en décodant base64 et en gonflant la demande, dans cet ordre. Il effectue ensuite un contrôle de sécurité. Si l’utilisateur ne dispose pas d’un contexte de sécurité valide, l’IdP identifie l’utilisateur en l’invitant à fournir des informations d’identification de connexion. Si l’utilisateur est déjà connecté, l’IdP répond simplement avec les paramètres SAMLResponse<tt> et <tt>RelayState URL (voir étape 3).
Répondre avec une SAMLResponse et un 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 en base64 et gonflée 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 User.
Le script de connexion extrait également l’ID de session de l’élément AuthnStatement/@SessionIndex et le stocke pour LogoutRequest.