SAML 2.0
SAML 2.0プロファイル > WebブラウザSSOプロファイル > SPリダイレクトリクエスト; IdP POST レスポンス

これは、最も一般的なシナリオの1つである。サービスプロバイダは、HTTPリダイレクト・バインディングを使用して、SAMLリクエストをIdP SSOサービスに送信する。アイデンティティプロバイダは、HTTP-POST バインディングを使用してSAMLレスポンスをSPアサーション・ コンシューマー・サービスに返す。
メッセージのフローは、サービスプロバイダのセキュアなリソースに対するリクエストから始まる。
1. SPにターゲット・リソースをリクエスト
プリンシパルは、（HTTPユーザーエージェントを介して）サービスプロバイダにターゲットリソースを要求する。
https://sp.example.com/myresource
サービスプロバイダは、ターゲット・リソースに代わってセキュリティ・チェックを実行する。 サービスプロバイダに有効なセキュリティコンテキストがすでに存在する場合は、ステップ2–7をスキップする。
サービスプロバイダは、使用するアイデンティティプロバイダを発見するために、あらゆる種類のメカニズムを使用する。例：ユーザに尋ねる、事前に設定された IdP を使用する、など。
2. IdP SSO サービスにリダイレクト
サービスプロバイダは、適切な SAMLRequest（およびあればRelayState）を生成し、標準的な HTTP 302リダイレクトを使用してブラウザを IdP SSO サービスにリダイレクトする。
302 Redirect
Location: https://idp.example.org/SAML2/SSO/Redirect?SAMLRequest=request&RelayState=token
RelayStateトークンは、サービスプロバイダで保持している状態情報への不透明な参照である。 SAMLRequestパラメータの値は、<samlp:AuthnRequest>要素のdeflate、base64エンコード、URLエンコードされた値である。
<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>
SAMLRequest は、SP の署名鍵を用いて署名することができる。しかし、通常はその必要はない。
3. IdPへのSSOサービスのリクエスト
ユーザ・エージェントは、アイデンティティプロバイダのSSOサービスにGETリクエストを発行する：
GET /SAML2/SSO/Redirect?SAMLRequest=request&RelayState=token HTTP/1.1
Host: idp.example.org
ここで、SAMLRequestおよびRelayStateパラメータの値は、リダイレクトで提供されたものと同じである。アイデンティティプロバイダのSSOサービスは、<samlp:AuthnRequest>要素を処理して（URL復号、Base64復号、リクエストのinflateの順に行う）、セキュリティチェックを実行する。 ユーザーが有効なセキュリティ・コンテキストを持っていない場合、アイデンティティプロバイダは任意のメカニズムでユーザーを識別する（詳細は省略）。
4. XHTMLフォームで回答する
SSOサービスはリクエストを検証し、XHTMLフォームを含むドキュメントで応答する。
<form method="post" action="https://sp.example.com/SAML2/SSO/POST" ...>
    <input type="hidden" name="SAMLResponse" value="response" />
    <input type="hidden" name="RelayState" value="token" />
    ...
    <input type="submit" value="Submit" />
  </form>
RelayStateパラメータの値は、ステップ 3から保存されている。 SAMLResponseパラメータの値は、次の<samlp:Response>要素のbase64エンコーディングである：
<samlp:Response
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    ID="identifier_2"
    InResponseTo="identifier_1"
    Version="2.0"
    IssueInstant="2004-12-05T09:22:05Z"
    Destination="https://sp.example.com/SAML2/SSO/POST">
    <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer>
    <samlp:Status>
      <samlp:StatusCode
        Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </samlp:Status>
    <saml:Assertion
      xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
      ID="identifier_3"
      Version="2.0"
      IssueInstant="2004-12-05T09:22:05Z">
      <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer>
      <!-- a POSTed assertion MUST be signed -->
      <ds:Signature
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
      <saml:Subject>
        <saml:NameID
          Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">
          3f7b3dcf-1674-4ecd-92c8-1544f346baf8
        </saml:NameID>
        <saml:SubjectConfirmation
          Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
          <saml:SubjectConfirmationData
            InResponseTo="identifier_1"
            Recipient="https://sp.example.com/SAML2/SSO/POST"
            NotOnOrAfter="2004-12-05T09:27:05Z"/>
        </saml:SubjectConfirmation>
      </saml:Subject>
      <saml:Conditions
        NotBefore="2004-12-05T09:17:05Z"
        NotOnOrAfter="2004-12-05T09:27:05Z">
        <saml:AudienceRestriction>
          <saml:Audience>https://sp.example.com/SAML2</saml:Audience>
        </saml:AudienceRestriction>
      </saml:Conditions>
      <saml:AuthnStatement
        AuthnInstant="2004-12-05T09:22:00Z"
        SessionIndex="identifier_3">
        <saml:AuthnContext>
          <saml:AuthnContextClassRef>
            urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
         </saml:AuthnContextClassRef>
        </saml:AuthnContext>
      </saml:AuthnStatement>
    </saml:Assertion>
  </samlp:Response>
5. SPにアサーション・コンシューマー・サービスを要求する
ユーザ・エージェントは、サービスプロバイダのアサーション・コンシューマー・サービスにPOSTリクエストを発行する。
POST /SAML2/SSO/POST HTTP/1.1
Host: sp.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: nnn
 
SAMLResponse=response&RelayState=token
ここで、SAMLResponseおよびRelayStateパラメータの値は、ステップ 4のXHTMLフォームから取得される。
6. ターゲット・リソースにリダイレクト
アサーション・コンシューマー・サービスは、レスポンスを処理し、サービスプロバイダでセキュリティ・ コンテキストを作成し、ユーザ・エージェントをターゲット・リソースにリダイレクトする。
7. SPにターゲット・リソースを再リクエスト
ユーザーエージェントは、サービスプロバイダにターゲット・リソースをリクエストする（再度）：
https://sp.example.com/myresource
8. 要求されたリソースを応答する
セキュリティ・コンテキストが存在するので、サービスプロバイダはリソースをユーザエージェントに返す。