分享方式:


單一登出 SAML 通訊協定

Microsoft Entra ID 支援 SAML 2.0 Web 瀏覽器單一登出設定檔。 若要讓單一登出正常運作,在應用程式註冊期間必須明確向 Microsoft Entra ID 註冊應用程式的 LogoutURL

如果應用程式已新增至 Azure App 資源庫,則預設可設定此值。 否則,此值必須由將應用程式新增至其 Microsoft Entra 租用戶的人員來決定和設定。 使用者登出之後,Microsoft Entra ID 使用 LogoutURL 將其重新導向。Microsoft Entra ID 支援重新導向繫結 (HTTP GET),而不支援 HTTP POST 繫結。

下圖顯示 Microsoft Entra 單一登出程序的工作流程。

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 的值不應該以數字開頭。 一般的做法是附加 id 至 GUID 的字串表示法。
  • Version - 將此元素的值設定為 2.0。 數值是必要項。
  • IssueInstant - 這是具有國際標準時間 (UTC) 值和來回行程格式 ("o")DateTime 字串。 Microsoft Entra ID 會預期此類型的值,但並不會強制。

根據 SAML 2.0 核心規格的第 3.7 節,除了您的應用程式外,工作階段中還可以有多個參與者 (其他應用程式)。 如果其中一個其他參與者傳送 LogoutRequest 給 Microsoft 身分識別平台 (工作階段授權單位),則其會將 LogoutRequest 傳回給所有工作階段參與者,但傳送初始 LogoutRequest 的參與者除外。 如果另一個參與者同時起始登出,將會有一個競爭,以查看哪些 LogoutRequest 先到達 Microsoft 身分識別平台。 因此,應用程式應該一律做好處理 LogoutRequest 的準備。

Issuer

LogoutRequest 中的 Issuer 元素必須完全符合 Microsoft Entra ID 中雲端服務的其中一個 ServicePrincipalNames。 一般而言,這會設定為應用程式註冊期間指定的 應用程式識別碼 URI

NameID

NameID 元素的值必須完全符合正在登出的使用者的 NameID

注意

在 SAML 登出要求期間,Microsoft Entra ID 不會考慮 NameID 值。
如果單一使用者工作階段為使用中,Microsoft Entra ID 會自動選取該工作階段,且 SAML 登出將會繼續。
如果有多個使用者工作階段為作用中,Microsoft Entra ID 會列舉使用者選取的作用中工作階段。 選取使用者之後,SAML 登出將會繼續。

LogoutResponse

Microsoft Entra ID 會傳送 LogoutResponse 以回應 LogoutRequest 元素。 下列摘錄顯示範例 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 元素中的 IDVersionIssueInstant 值。 它也會將 InResponseTo 元素設定為導出回應的 LogoutRequestID 屬性值。

Issuer

Microsoft Entra ID 會將此值設定為 https://login.microsoftonline.com/<TenantIdGUID>/,其中 <TenantIdGUID> 是 Microsoft Entra 租用戶的租用戶識別碼。

若要正確識別簽發者元素,請使用如 LogoutResponse 範例中所示的 https://login.microsoftonline.com/<TenantIdGUID>/ 值。 此 URL 格式會將 Microsoft Entra 租用戶識別為簽發者,代表負責發出回應的授權單位。

狀態

Microsoft Entra ID 使用 Status 元素中的 StatusCode 元素,來指出登出成功或失敗。登出嘗試失敗時, StatusCode 元素也可包含自訂錯誤訊息。