シングル サインアウトの 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 シングル サインアウト プロセスのワークフローを示します。
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
を処理するように常に準備しておく必要があります。
発行者
LogoutRequest
の Issuer
要素は、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
要素には、応答の原因になった LogoutRequest
の ID
属性の値を設定します。
発行者
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
要素にカスタム エラー メッセージを含めることもできます。