Prozess-Flow für Anmeldung (AuthnRequest).
SAML 2.0 spezifiziert ein Webbrowser-SSO-Profil, das den Austausch von Informationen zwischen einem Identitätsanbieter (IdP), einem Service Provider (SP) und einem Prinzipal (Benutzer) in einem Webbrowser umfasst.
Der Identitätsanbieter kann ein beliebiger SSO-Service sein, der SAML-Authentifizierungsservices anbietet (z. B. SSOCircle). Der Service Provider ist immer eine Instanz. Der Nachrichten-Flow 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://instanz.service-now.de/
Die Instanz prüft die Anforderung darauf, ob die URL-Parameter SAMLRequest und RelayState vorhanden sind. Wenn sie vorhanden sind, hat der Benutzer bereits die Validierung beim IdP durchgeführt und kann die Schritte 2 bis 6 überspringen.
AuthnRequest an Identitätsanbieter ausgeben
Die Instanz erstellt eine AuthnRequest, die mithilfe des SAMLRequest -Werts an den IdP gesendet wird. Die Instanz erstellt und sendet auch einen RelayState- URL-Parameterwert.
RelayState- Token ist ein undurchsichtiger Verweis auf Statusinformationen, die beim Service Provider verwaltet werden. Der Wert des Parameters „SAMLRequest“ ist der dekomprimierte und base64-codierte Wert von<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 URL-codiert dann die<samlp:AuthnRequest> Element und sendet es als SAMLRequest- URL-Parameter.
Der SSO-Service verarbeitet den<samlp:AuthnRequest> -Element durch URL-Decodierung, Base64-Decodierung und Erweiterung 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 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>RelaisState- Parameters stammt aus diesem Schritt. Der Wert des Parameters „SAMLResponse“ ist die base64-Codierung von<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 die SAML-Antwort
Der Wert „SAMLResponse“ 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 in der Benutzertabelle nach einem vorhandenen Anwender zu suchen.
Das Anmeldeskript extrahiert auch die Sitzungs-ID aus dem Element //AuthnStatement/@SessionIndex und speichert sie für den LogoutRequest.