Flux de processus de connexion (AuthnRequest)

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 2 minutes de lecture
  • 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 .

    Le jeton 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

    Après avoir collecté les identifiants de connexion requis, le service SSO valide la demande et répond avec un document contenant un formulaire XHTML :
    <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>
    La valeur du paramètre 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.