シングル サインアウトの SAML プロトコル
Azure Active Directory (Azure AD) は、SAML 2.0 の Web ブラウザー シングル サインアウト プロファイルをサポートします。 シングル サインアウトが正常に動作するためには、アプリケーションの LogoutURL が、アプリケーションの登録時に Azure AD に明示的に登録されている必要があります。 アプリが Azure アプリ ギャラリーに追加された場合は、既定でこの値を設定できます。 それ以外の場合は、アプリを Azure AD テナントに追加するユーザーが値を決定および設定する必要があります。 Azure AD は LogoutURL を使って、サインアウト後のユーザーをリダイレクトします。
Azure AD は、HTTP POST バインディングではなく、リダイレクト バインディング (HTTP GET) をサポートしています。
次の図では、Azure AD のシングル サインアウト プロセスのワークフローを示します。
Note
SAML 2.0 コア仕様のセクション 3.7 にしたがって、お使いのアプリケーションの他にセッションに複数の参加者 (他のアプリケーション) が存在する可能性があります。 他の参加者のいずれかが Microsoft ID プラットフォーム (セッション オーソリティ) に LogoutRequest
を送信すると、Microsoft ID プラットフォームは、最初の LogoutRequest
を送信した参加者を除くすべてのセッション参加者に LogoutRequest
を返送します。 さらに、他の参加者のいずれかが同時にサインアウトを開始した場合、最初に Microsoft ID プラットフォームに到達する LogoutRequest
を確認するための競合が発生します。 その結果、アプリケーションは LogoutRequest
を処理するように常に準備しておく必要があります。
LogoutRequest
クラウド サービスは LogoutRequest
メッセージを Azure AD に送信して、セッションが終了されたことを示します。 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>
LogoutRequest
Azure AD に送信される LogoutRequest
要素には、次の属性が必要です。
ID
- サインアウト要求を示します。ID
の値は、数字以外で始まっている必要があります。 一般的な方法としては、GUID の文字列表現の前に id を付加します。Version
- この要素の値は 2.0に設定します。 この値は必須です。IssueInstant
- 世界協定時刻 (UTC) の値とラウンドトリップ書式 ("o") を含むDateTime
文字列です。 Azure AD ではこの型の値が期待されますが、必須ではありません。
発行者
LogoutRequest
の Issuer
要素は、Azure AD でのクラウド サービスの ServicePrincipalNames のいずれかと厳密に一致する必要があります。 通常、これはアプリケーション登録時に指定される App ID URI に設定されます。
NameID
NameID
要素の値は、サインアウトしているユーザーの NameID
と厳密に一致する必要があります。
LogoutResponse
Azure AD は 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://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
</samlp:LogoutResponse>
LogoutResponse
Azure AD は、LogoutResponse
要素の ID
、Version
、IssueInstant
の値を設定します。 また、InResponseTo
要素には、応答の原因になった LogoutRequest
の ID
属性の値を設定します。
発行者
Azure AD は、この値を https://login.microsoftonline.com/<TenantIdGUID>/
に設定します。<TenantIdGUID> は、Azure AD テナントのテナント ID です。
Issuer
要素の値を評価するには、アプリケーション登録時に指定された App ID URI の値を使用します。
Status
Azure AD は、Status
要素の StatusCode
要素を使用して、サインアウトの成功または失敗を示します。サインアウトの試行が失敗した場合、 StatusCode
要素にはカスタム エラー メッセージを含めることもできます。