Anmeldeprozess-Flow (AuthnRequest).

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 1 Minute Lesedauer
  • SAML 2.0 gibt ein Webbrowser-SSO-Profil an, bei dem Informationen zwischen einem Identitätsanbieter (IdP), einem Service Provider (SP) und einem Prinzipal (Benutzer) in einem Webbrowser ausgetauscht werden.

    Der Identitätsanbieter kann ein beliebiger SSO-Service sein, der SAML-Authentifizierungsservices anbietet (z. B. SSOCircle). Der Service Provider ist immer eine Instanz. Der Nachrichtenfluss beginnt mit einer Anforderung für eine gesicherte Ressource beim Service Provider.

    Fordern Sie die Zielressource beim SP an

    Der Prinzipal fordert eine Zielressource beim Service Provider an:

    https://instance.service-now.com/

    Die Instanz überprüft die Anforderung, um festzustellen, ob die URL-Parameter SAMLRequest und RelayState vorhanden sind. Wenn sie vorhanden sind, hat der Benutzer bereits eine Validierung beim IdP durchgeführt und kann die Schritte 2 bis 6 überspringen.

    AuthnRequest an Identitätsanbieter ausgeben

    Die Instanz erstellt eine AuthnRequest, die mit dem SAMLRequest- Wert an den IdP gesendet werden soll. Die Instanz erstellt und sendet auch einen RelayState- URL-Parameterwert.

    Das RelayState- Token ist eine undurchsichtige Referenz zu Statusinformationen, die beim Service Provider verwaltet werden. Der Wert des Parameters SAMLRequest ist der dekomprimierte und base64-codierte Wert des<samlp:AuthnRequest> Element:
    <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>

    Die Integration codiert dann die URL<samlp:AuthnRequest> Element und sendet es als SAMLRequest- URL-Parameter.

    Der SSO-Service verarbeitet die<samlp:AuthnRequest> Element durch URL-Decodierung, base64-Decodierung und Aufblasen der Anforderung in dieser Reihenfolge. Anschließend wird eine Sicherheitsprüfung durchgeführt. Wenn der Benutzer keinen gültigen Sicherheitskontext hat, identifiziert der IdP den Benutzer, indem er zur Eingabe von Anmeldeinformationen auffordert. Wenn der Benutzer bereits angemeldet ist, antwortet der IdP einfach mit den URL-Parametern SAMLResponse<tt> und <tt>RelayState (siehe Schritt 3).

    Antworten Sie mit einer SAMLResponse und einem RelayState

    Nach dem Sammeln der erforderlichen Anmeldeinformationen validiert der SSO-Service die Anforderung und antwortet mit einem Dokument, das ein XHTML-Formular enthält:
    <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>
    Der Wert des Parameters RelayState stammt aus diesem Schritt. Der Wert des Parameters SAMLResponse entspricht der base64-Codierung der folgenden<samlp:Response> Element:
    <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>

    Validieren Sie SAMLResponse

    Der SAMLResponse- Wert wird base64-decodiert und erweitert, um das XML-Dokument in Schritt 3 anzuzeigen. Das Anmeldeskript extrahiert den XML-Wert aus dem Element //Subject/NameID und verwendet ihn, um einen vorhandenen Benutzer in der Benutzertabelle zu suchen.

    Das Anmeldeskript extrahiert auch die Sitzungs-ID aus dem Element //AuthnStatement/@SessionIndex und speichert sie für die LogoutRequest.