Anmeldeprozess-Flow (AuthnRequest).
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.
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
<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 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.