作者:鄒嘉明 / 臺灣大學計算機及資訊網路中心程式設計組幹事
識別身分同盟的組織也就是Active Directory Federation Services(ADFS)是一種可以讓特定Active Directory(AD)加入的服務。一旦任何的AD 加入了這個同盟組織,ADFS 伺服器可以立刻的知道。而這樣的特性剛l好可以跟單一認證系統SSO做互相的整合與應用,讓之後陸續加入的AD(或跨網域AD) 可以做為單一認證系統SSO的諮詢對象,進而逹到跨網域的控管。
前言
ADFS的目標其實就是為了解決不同網域的使用者一再輸入認證資料的問題。當使用者在一個提供多個服務或系統的環境之中,若缺乏一個普遍的資訊交換技術。使用者必須在切換的同時又要經過一道身份的認證(通常為username/password),這樣不僅會造成使用上的不便,而且也增加了使用者的困擾。
識別身分同盟組織Active Directory Federation Services(ADFS)的概念可以讓使用者只需通過一次身份驗證後,就可以自由存取網路上其它網域的系統服務而不必再重複身份驗證步驟。經由識別身分同盟的組織Active Directory Federation Services(ADFS) 這個服務架構,可以讓使用者登入之後取得使用者的相關資訊而不僅限於同一個網域。
(圖一 Browser User 與 ADFS之間資料傳遞的流程)
Browser User 與 ADFS之間資料傳遞的流程
當使用者嘗試著去瀏覽一個受保護的網頁時,如果該網頁沒有相關的Session Key (也就一組隨機產生的登入代碼),系統則會自動導向 ADFS Proxy,接下來才會再再導向ADFS Server做登入身份的驗證。舉例來說,假如ADFS Proxy的IP是 140.112.6.129、ADFS Server的IP是 140.112.6.135,那麼 ADFS Proxy (140.112.6.129) 就必須跟 ADFS Server(140.112.6.135) 做註冊的申請。更仔細的來說,將來任何使用者身份驗證工作都將由這單一的ADFS Server來做,並以Security Token的方式回傳登入者的相關資料給當時呼叫它的ADFS Proxy(也就是當時跟ADFS Server做註冊申請的網站)。
當使用者嘗試著去瀏覽一個受保護的網頁時,如果該網頁的Session Key(也就一組隨機產生的登入代碼)已經存在了,系統則不會導向 ADFS Proxy做進一步的身份認證。這時Browser User與 ADFS Proxy之間並不會做任何的資料傳遞,取而代之的是系統會利用這組Session Key去問資料庫內這組代碼是誰的,並提供目前這個瀏覽者的資料給該網頁。
(圖二 身分識別感知應用程式架構)
身分識別感知應用程式架構
ADFS使用Windows Identity Foundation (WIF) 的架構來建立身分識別,此架構提供了一些範本用來建置簡單的 ASP.NET STS,而開發人員可以擴充這些 STS 並且實作適合自己需求的實際 STS。如同上圖所示,當ADFS Server授權該使用者,授權者的相關資料會從Account/AttributeStore抓出來並以Security Token回傳給ADFS Proxy。接著ADFS Proxy(也就是ASP.NET STS的程式)會將所接收到的資料寫入資料庫,並隨機產生一組Session Key給Browser。有了這組Session Key,Browser 就可去跟資料庫做查詢並調出目前使用者的相關資料。
總結
如此便可以帶來以下的效益
(1)減少多次身份認證所花的時間,相對的也減少身份認證出錯的可能性。
(2)避免使用者同時保有多個認證資訊而造成混亂。
(3)管理者可以集中管理使用者擁有的存取權並減少維護的時間。
參考資料
1."什麼是Windows Identity Foundation? - MSDN - Microsoft." 3 Jun. 2013
http://msdn.microsoft.com/zh-tw/library/ee748475.aspx
2."How Claims Based Authentication Works - YouTube." 3 Jun. 2013
https://www.youtube.com/watch?v=_DJUvkbcT8E