シングル サインアウトの SAML プロトコル

Microsoft Entra ID は、SAML 2.0 Web ブラウザーのシングル サインアウト プロファイルをサポートしています。 シングル サインアウトが正常に動作するためには、アプリケーションの LogoutURL が、アプリケーションの登録時に Microsoft Entra ID に明示的に登録されている必要があります。

アプリが Azure アプリ ギャラリーに追加された場合は、既定でこの値を設定できます。 それ以外の場合は、アプリを Microsoft Entra テナントに追加するユーザーが値を決定および設定する必要があります。 Microsoft Entra ID では、LogoutURL を使って、サインアウト後にユーザーをリダイレクトします。Microsoft Entra ID は、HTTP POST バインドではなく、リダイレクト バインド (HTTP GET) をサポートしています。

次の図では、Microsoft Entra シングル サインアウト プロセスのワークフローを示します。

Screenshot of the Microsoft Entra Single Sign Out Workflow.

LogoutRequest

クラウド サービスでは、セッションが終了したことを示すために、LogoutRequest メッセージが Microsoft Entra ID に送信されます。 LogoutRequest 要素の例を次に示します。

<samlp:LogoutRequest xmlns="urn:oasis:names:tc:SAML:2.0:metadata" ID="idaa6ebe6839094fe4abc4ebd5281ec780" Version="2.0" IssueInstant="2013-03-28T07:10:49.6004822Z" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.workaad.com</Issuer>
  <NameID xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
</samlp:LogoutRequest>

Microsoft Entra ID に送信される LogoutRequest 要素には、次の属性が必要です。

  • ID - サインアウト要求を示します。 ID の値は、数字以外で始まっている必要があります。 一般的な方法としては、GUID の文字列表現の前に id を付加します。
  • Version - この要素の値は 2.0に設定します。 この値は必須です。
  • IssueInstant - 世界協定時刻 (UTC) の値とラウンドトリップ書式 ("o") を含む DateTime 文字列です。 Microsoft Entra ID では、この型の値が期待されますが、必須ではありません。

SAML 2.0 コア仕様のセクション 3.7 にしたがって、お使いのアプリケーションの他にセッションに複数の参加者 (他のアプリケーション) が存在する可能性があります。 他の参加者のいずれかが Microsoft ID プラットフォーム (セッション オーソリティ) に LogoutRequest を送信すると、最初の LogoutRequest を送信した参加者を除くすべてのセッション参加者に LogoutRequest が返送されます。 別の参加者が同時にサインアウトを開始した場合、最初に Microsoft ID プラットフォームに到達する LogoutRequest を確認するための競合が発生します。 そのため、アプリケーションは LogoutRequest を処理するように常に準備しておく必要があります。

発行者

LogoutRequestIssuer 要素は、Microsoft Entra ID でのクラウド サービスの ServicePrincipalNames のいずれかと厳密に一致する必要があります。 通常、これはアプリケーション登録時に指定される App ID URI に設定されます。

NameID

NameID 要素の値は、サインアウトしているユーザーの NameID と厳密に一致する必要があります。

Note

SAML ログアウト要求中は、NameID の値が Microsoft Entra ID で考慮されることはありません。
1 人のユーザー セッションがアクティブな場合、Microsoft Entra ID では、そのセッションが自動的に選択され、SAML ログアウトが続行します。
複数のユーザー セッションがアクティブな場合、Microsoft Entra ID では、ユーザーが選択できるようにアクティブなセッションが列挙されます。 ユーザーを選択すると、SAML ログアウトが続行されます。

LogoutResponse

Microsoft Entra ID では、LogoutRequest 要素に応答して LogoutResponse が送信されます。 LogoutResponseの例を次に示します。

<samlp:LogoutResponse ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/</Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
  </samlp:Status>
</samlp:LogoutResponse>

Microsoft Entra ID では、LogoutResponse 要素に ID 値、Version 値、IssueInstant 値が設定されます。 また、InResponseTo 要素には、応答の原因になった LogoutRequestID 属性の値を設定します。

発行者

Microsoft Entra ID では、この値が https://login.microsoftonline.com/<TenantIdGUID>/ に設定されます。ここで、<TenantIdGUID> は、Microsoft Entra テナントのテナント ID です。

Issuer 要素を正しく識別するには、サンプルの LogoutResponse に示すように、https://login.microsoftonline.com/<TenantIdGUID>/ の値を使用します。 この URL 形式を使うと、Microsoft Entra テナントが、応答の発行を担当する機関を表す Issuer として識別されます。

Status

Microsoft Entra ID では、Status 要素で StatusCode 要素を使って、サインアウトの成功または失敗を示します。サインアウトの試行が失敗した場合は、StatusCode 要素にカスタム エラー メッセージを含めることもできます。