ログイン (AuthnRequest) プロセスフロー

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:7分
  • SAML 2.0 は、Web ブラウザで ID プロバイダー (IdP)、サービスプロバイダー (SP)、プリンシパル (ユーザー) の間で情報を交換する Web ブラウザ SSO プロファイルを指定します。

    ID プロバイダーは、SAML 認証サービスを提供する任意の SSO サービス (SSOCircle など) にすることができます。サービスプロバイダーは常にインスタンスです。メッセージフローは、サービスプロバイダーの保護されたリソースの要求から始まります。

    SP でのターゲットリソースの要求

    プリンシパルは、サービスプロバイダーでターゲットリソースを要求します。

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

    インスタンスは要求を確認して、SAMLRequest および RelayState URL パラメーターが存在するかどうかを把握します。存在する場合、ユーザーは IdP で既に検証済みであるため、ステップ 2 〜 6 をスキップできます。

    ID プロバイダーに AuthnRequest を発行

    インスタンスは、SAMLRequest 値を使用して IdP に送信される AuthnRequest を作成します。インスタンスは、さらに RelayState URL パラメーター値も作成して送信します。

    RelayState トークンは、サービスプロバイダーで維持されるステータス情報への不透過型参照です。SAMLRequest パラメーターの値は、<samlp:AuthnRequest> 要素を縮小した base64 エンコード値です。
    <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>

    その後、統合は <samlp:AuthnRequest> 要素を URL エンコードし、それを SAMLRequest URL パラメーターとして送信します。

    SSO サービスは、URL デコード、base64 デコード、拡張の順に <samlp:AuthnRequest> 要素を処理します。次に、セキュリティチェックを実行します。ユーザーが有効なセキュリティコンテキストを持っていない場合、IdP はログイン認証情報を要求してユーザーを識別します。ユーザーがすでにログインしている場合、IdP は単に SAMLResponse<tt> および <tt>RelayState URL パラメーターで応答します (ステップ 3 を参照)。

    SAMLResponse と RelayState での応答

    必要なログイン認証情報を収集した後、SSO サービスは要求を検証し、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>
    RelayState パラメーターの値はこのステップから取得されます。SAMLResponse パラメーターの値は、次の <samlp:Response> 要素の base64 エンコードです。
    <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>

    SAMLResponse の検証

    SAMLResponse の値は base64 でデコードされて拡張され、ステップ 3 の XML ドキュメントが表示されます。ログインスクリプトは //Subject/NameID 要素から XML 値を抽出し、それを使用してユーザーテーブルで既存のユーザーを検索します。

    ログインスクリプトは、//AuthnStatement/@SessionIndex 要素からセッション ID を抽出し、LogoutRequest 用に格納します。