單一登出

更新日期:2015 年 6 月 19 日

適用對象:Azure

Microsoft Azure Active Directory 存取控制 (也稱為存取控制服務或 ACS) 現在包含選擇性的單一登入功能,可補充單一登入。 結果是與 ACS 整合之 Web 應用程式使用者的完整且一致的登入和登出體驗。

當使用者登出支援單一登入的信賴憑證者應用程式時,ACS 可以自動將使用者登出身分識別提供者網站,以及登出他們使用該身分識別提供者登入的其他所有應用程式。 同樣地,如果客戶登出身分識別提供者網站,ACS 可以自動將客戶登出他們使用該身分識別提供者登入的應用程式。

本主題說明單一登出如何運作,以及如何為信賴憑證者應用程式實作單一登出。 請務必在程式碼範例:ASP.NET MVC 4 搭配同盟登出t,檢閱在 ASP.NET MVC 4 應用程式中實作同盟單一登入的範例程式碼。

系統需求

若要實作單一登出,您需要下列工具和服務。

  • Azure 訂用帳戶

  • Visual Studio 2012

關於單一登出

在每一個瀏覽器工作階段中,客戶可以選取同盟身分識別提供者來登入信賴憑證者應用程式。 如果使用單一登出,當使用者登出身分識別提供者或信賴憑證者應用程式時,客戶會自動登出他們使用相同身分識別提供者登入的所有信賴憑證者應用程式。

例如,客戶使用 Microsoft 帳戶 (Windows Live ID) 登入三個已整合 ACS 的信賴憑證者應用程式。 當客戶登出其中任何一個應用程式時,他們會自動登出 Microsoft 帳戶並登出其他兩個應用程式。

完整單一登出支援適用於自訂 WS-同盟和 ADFS 身分識別提供者。 Facebook、Google、Microsoft 帳戶和 Yahoo! 提供有限的單一登出支援 識別提供者。 這些識別提供者無法起始單一登出。不過,當信賴憑證者應用程式起始單一登出時,客戶會登出這些識別提供者,以及他們使用該身分識別提供者登入的相關信賴憑證者應用程式。

單一登出的運作方式

單一登出可以由身分識別提供者或信賴憑證者應用程式起始。 本節中,我們檢閱其中每一個登出程序,並說明您如何對信賴憑證者應用程式啟用單一登出。

信賴憑證者應用程式起始登出

若要在使用者登出信賴憑證者應用程式時起始單一登出,請將 URL 連同下列參數傳送至 ACS WS-同盟端點。

  • wa:設定為 wsignout1.0

  • wreply:將值設定為 登出頁面的 URL,也就是登出完成時,使用者重新導向的頁面。 此值應該是 RP 功能變數名稱的一部分,例如 「 https://RP.com/" ;

  • wtrealm:設定為 ACS 管理入口網站中信賴憑證者應用程式的 Realm 屬性值。

以下是單一登出的範例 URL。

https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=<YourAppRealm>&wreply=<YourAppRealmLogoutPage>

例如:

https://Fabrikam.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=" https://www.fabrikam.com/" &wreply= https://www.fabrikam.com/logout

如需實作信賴憑證者起始單一登出的範例程式碼,請參閱程式碼範例:使用同盟登出 ASP.NET MVC 4。此範例包含 LogoutController.cs 中的程式碼,可取得wreplywrealm值,並建立SignOutRequestMessage類別的實例。

當 ACS 收到登出 URL 時,ACS 會傳送 wsignout1.0 要求,以結束客戶與識別提供者的會話。 然後,ACS 會將 wsignoutcleanup1.0 訊息傳送給使用者使用識別提供者登入的其他信賴憑證者應用程式。

身分識別提供者起始登出

只有自訂 WS-同盟和 ADFS 身分識別提供者才支援身分識別提供者起始的登出。 Microsoft 帳戶 (Windows Live ID)、Google、Yahoo! 和 Facebook 身分識別提供者無法支援此登出機制,因為當使用者登出時,這些身分識別提供者不會通知 ACS 或信賴憑證者應用程式。

當使用者登出WS-Federation或 ADFS 識別提供者時,識別提供者會傳送 ACS wsignoutcleanup1.0 登出要求訊息,格式如下: https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignoutcleanup1.0

當 ACS 收到wsignoutcleanup1.0訊息時,它會驗證要求源自于與登入要求相同的端點,方法是驗證訊息 HTTP 標頭中的參照者: <Referrer>: https://CustomIDP 其中「參考者 > 」的值 < 是ACSSignOut Cookie 中登入 URL 中的參考者值。

然後,ACS 會將 wsignoutcleanup1.0 訊息傳送至目前使用者用戶端瀏覽器會話中與識別提供者相關聯的所有信賴憑證者應用程式。 此過程類似於「信賴憑證者應用程式起始登出」一節所描述的過程。 身分識別提供者可以將瀏覽器重新導向至它所控制的登出頁面,以完成登出程序。

單一登出程序

本節說明單一登出程序中的每一個步驟。 因為 ACS 會為您處理細節部分,您並不需要了解此程序。 不過,這在自訂或偵錯方面可能會有用。

單一登出逐步說明

  1. 當 ACS 在其WS-Federation端點收到 登出1.0 要求時,ACS 會在 ACSSignOut Cookie 中查閱登出要求啟動器的識別提供者。

    ACS 採用下列比對規則來找出身分識別提供者。

    • 如果在登出要求中指定 wtrealm 參數,ACS 會在每個識別提供者的信賴憑證者清單中搜尋 wtrealm 值。

    • 如果未指定 wtrealm ,而且 ACSSignOut Cookie 中只有一個識別提供者專案,ACS 會使用 ACSSignOut Cookie 中的識別提供者。

    • 否則,ACS 會顯示錯誤頁面,指出嘗試登出失敗,因為 遺漏 wtrealm 參數。

  2. ACS 藉由呈現內嵌框架 (iframe >) < 元素,將 signout1.0 訊息傳送給識別提供者。 ACS 也會將包含SignOutCleanup1.0訊息的 iframe > 元素新增 < 至起始方以外的所有作用中WS-Federation信賴憑證者頁面,而 ACS 會從ACSSignOut Cookie 移除信賴憑證者。

  3. 顯示信賴憑證者登出狀態的頁面也包含 JavaScript,此 JavaScript 會執行一段指定的時間,然後將瀏覽器重新導向。 如果在 ACSSignOut Cookie 中指定 了 wreply 參數,JavaScript 會重新導向至 wreply 值所指示的位址,以完成登出。否則,JavaScript 會重新導向至信賴憑證者的傳回 URL,如 ACS 管理入口網站中所指定。

ACS 會使用名為 ACSSignOut 的工作階段 Cookie,以記錄向應用程式驗證使用者的身分識別提供者。 您可以在工作階段追蹤中檢視此 Cookie。 會話 Cookie 具有下列名稱格式: ACSSignOut.<YourACSNamespace>

ACSSignOut Cookie 會識別信賴憑證者應用程式和驗證使用者的識別提供者。 ACS 在單一登出期間會使用此 Cookie,以確定正確的身分識別提供者已登出,且使用者已登出他們使用該身分識別提供者登入的其他信賴憑證者應用程式。

單一登出的限制

使用單一登出時,請注意下列限制。

  • 只有自訂WS-Federation識別提供者和 ADFS 識別提供者可以起始單一登出。社交身分識別提供者,例如 Yahoo、Google、Microsoft 帳戶 (Windows Live ID) 和 Facebook,在客戶登出識別提供者網站時,不會通知 ACS 或信賴憑證者應用程式。 因此,當身分識別提供者網站上起始登出時,使用這些身分識別提供者的信賴憑證者應用程式使用者不會自動登出。

  • 單一登出不見得在所有環境中都生效。 當 ACS 從信賴憑證者應用程式收到單一登出訊息時,會將 wsignout1.0 要求傳送給識別提供者和 wsignoutcleanup1.0 訊息給其他信賴憑證者應用程式。 當 ACS 收到來自識別提供者 的 wsignoutcleanup1.0 要求訊息時,它會將 wsignoutcleanup1.0 訊息傳送給每個信賴憑證者應用程式。 不過,ACS 無法保證身分識別提供者或信賴憑證者應用程式會將使用者登出,以做出適當的回應。

  • 當使用者在 Internet Explorer 中登出 Google 身分識別提供者時,瀏覽器會顯示 [僅顯示安全的內容] 提示。 若要完成登出,使用者必須按一下 [顯示所有內容]。 登出完成時,瀏覽器會重新導向至 wreply 參數值所指定的 URL。

    當 Internet Explorer 9 和更新版本的 Internet Explorer 在安全頁面上發現不安全的內容時,例如來自不安全伺服器的影像或指令碼,它會顯示安全內容通知。 在此情況下,它會對來自身分識別提供者的安全 (HTTPS/SSL) ACS 內容和非安全 (HTTP) 內容作出反應。 ACS 無法變更或阻止此行為。

    使用者可以隱藏通知,如 Internet Explorer 9 或更新版本中的「僅顯示安全內容」通知中所述。 不過,因為此設定會套用至所有網站,且可能讓使用者電腦易於遭受惡意內容的攻擊,建議採用預設設定來封鎖非安全 (HTTP) 內容。

為了協助使用者起始單一登出,信賴憑證者應用程式的登出頁面應該指示使用者關閉瀏覽器,或明確地登出其他信賴憑證者應用程式和身分識別提供者網站。 只關閉瀏覽器索引標籤、視窗或頁面並不足夠。 如果電腦是共用或位於公共場所,例如資訊站電腦,則使用者在關閉瀏覽器之前應該清除瀏覽器歷程記錄。

另請參閱

概念

程式碼範例:使用同盟登出 ASP.NET MVC 4

其他資源

在 WIF 中 ASP.NET 的被動式驗證