AD FS(聯合身份驗證)是一種身份通路解決方案,即使使用者帳戶和應用程式位于完全不同的網絡或組織中,它也可以為用戶端計算機(網絡内部或外部)提供對受保護的面向Internet的應用程式或服務的無縫SSO通路(單點通路)。
概述
1、AD FS概述
當應用程式或服務位于一個網絡中,而使用者帳戶位于另一網絡中,通常,使用者嘗試通路該應用程式或服務時,系統會提示使用者輸入輔助憑據。這些輔助憑據代表應用程式或服務所在的領域中使用者的身份。托管應用程式或服務的Web伺服器通常需要它們,以便它可以做出最适當的授權決策。
借助AD FS,組織可以通過提供信任關系(聯合身份驗證信任)來繞過對輔助憑據的請求,這些組織可以使用該信任關系來投影使用者的數字身份和對可信合作夥伴的通路權限。在這種聯合環境中,每個組織都繼續管理自己的身份,但是每個組織也可以安全地投影并接受其他組織的身份。
聯合身份驗證是一個跨組織和平台邊界實作辨別、身份驗證和授權的過程。
聯合身份驗證需要兩個組織或實體之間的信任關系,并允許組織保留對資源通路和自己的使用者群組帳戶的控制權。當您希望跨該邊界時(域服務作為組織邊界),這是與 Active Directory 域服務相比一個不錯的優勢。它将包含您的組織的使用者、計算機、組和其他對象。Active Directory 聯合身份驗證服務所允許的是一方面信任管理資源,一方面管理帳戶。
2、AD FS的應用場景概述
AD FS可應用于何種場景?以應用對象來看,這會産生在企業之間、企業與員工之間、多個Web應用程式之間等等。是以會有如下的聯合身份驗證方案:
企業到企業的聯合:
如果我要連接配接到某個合作夥伴組織并允許在我的應用程式中使用其帳戶,或者在其應用程式中使用我的帳戶。
企業到消費者或企業到員工的聯合(Web 單一登入方案):
使企業能夠為業務合作夥伴或擁有獨立域的其他業務部門提供單一登入。此服務允許擁有外圍網絡域的企業提供對内部使用者帳戶的身份驗證。
例如,我在工作時可以輕松登入到内部網站。我已登入我的計算機;它使用的是已獲得的身份驗證憑據。我在一天結束後回家。我想通路這些相同的資源,可以實作這個想法嗎?
它允許我通過外部路徑登入到這些資源并使用聯合身份驗證服務将我的内部域帳戶連接配接到此外部資源來實作這個想法,同時允許我使用相同的憑據。
跨多個Web 應用程式的組織内的聯合:
如果出于某些原因,您的組織具有使用不同的、可能不同的身份驗證存儲或無法通過 Windows 本身自動授權使用者的不同身份驗證機制的 Web 應用程式,則您可以使用這個方案。對于這種情況,您還可以使用聯合身份驗證服務。
3、企業部署過程概述
在AD FS的企業部署中,我們通常是在已有AD域中進行部署。關于加域部分将不再贅述,直接闡述AD FS的部署過程。建議AD FS代理伺服器不加入域環境并部署在DMZ區域。在部署過程中,強烈建議關注證書、域要求、權限等内容。
部署過程主要有以下步驟:
- 部署ADFS 群集NLB
- ADFS 安裝與配置
- 部署ADFS 代理伺服器(WAP)群集NLB
- ADFS 代理伺服器(WAP)安裝與配置
關鍵概念
AD FS管理台界面如下圖所示:

1、AD FS相關術語
賬戶夥伴組織
由聯合身份驗證服務中的聲明提供方信任表示的聯合身份驗證夥伴組織。帳戶夥伴組織包含将通路資源合作夥伴中基于Web的應用程式的使用者。
賬戶聯合伺服器
賬戶夥伴組織中的聯合伺服器。賬戶聯合伺服器基于使用者身份驗證向使用者頒發安全令牌。伺服器對使用者進行身份驗證、從特性存儲中提取相關屬性群組成員身份資訊、将此資訊打包到聲明中,并生成和簽名安全令牌(包含聲明)以傳回給使用者(可在以下兩種情況下使用,自己的組織或将其發送給合作夥伴組織)。
AD FS 配置資料庫
一個資料庫,用于存儲代表單個AD FS執行個體或聯合身份驗證服務的所有配置資料。此配置資料可以存儲在SQL Server資料庫中,也可以使用Windows Server 2016,Windows Server 2012和2012 R2以及Windows Server 2008和2008 R2附帶的Windows内部資料庫(WID)功能存儲。
可以使用Fsconfig.exe指令行工具為SQL Server建立AD FS配置資料庫,也可以使用AD FS聯合身份驗證伺服器配置向導為Windows内部資料庫建立AD FS配置資料庫。
聲明提供方
向其使用者提供聲明的組織。請參閱賬戶夥伴組織。
聲明提供方信任
在中的 AD FS 管理 "管理單元-中,聲明提供方信任通常是在資源夥伴組織中建立的信任對象,以表示信任關系中的組織,該組織的帳戶将通路該資源夥伴組織中的資源。聲明提供方信任對象由多種辨別符、名稱和規則組成,這些辨別符、名稱和規則可辨別此夥伴到本地聯合身份驗證服務。
本地聲明提供程式信任
表示AD FS伺服器場中基于AD LDS或第三方LDAP的目錄的信任對象。本地聲明提供程式信任對象由各種辨別符、名稱和規則組成,用于辨別此基于LDAP的目錄到本地聯合身份驗證服務。
聯合中繼資料
用于在聲明提供方和信賴方之間配置通信資訊,以便正确配置聲明提供方信任和信賴方信任的資料格式。資料格式在安全性聲明标記語言(SAML)2.0中定義,并在WS-Federation中擴充。
聯合伺服器
已使用AD FS聯合身份驗證伺服器配置向導配置為充當聯合身份驗證伺服器角色的Windows Server。聯合身份驗證伺服器頒發令牌,并作為聯合身份驗證服務的一部分。
聯合伺服器代理
已使用 AD FS 聯合伺服器代理配置向導進行配置,以充當 Internet 用戶端和位于企業網絡防火牆後面的聯合身份驗證服務之間的中間代理服務的 Windows 伺服器。
主聯合伺服器
在聯合伺服器角色中使用 AD FS 聯合伺服器配置向導配置的 Windows Server,并且具有 AD FS 配置資料庫的讀/寫副本。
當您使用“ AD FS聯合身份驗證伺服器配置向導”并選擇用于建立新聯合身份驗證服務以使該計算機成為伺服器場中的第一台聯合身份驗證伺服器的選項時,将建立主聯合身份驗證伺服器。
此伺服器場中的所有其他聯合伺服器必須将在主聯合伺服器上所做的更改複制到本地存儲的AD FS配置資料庫的隻讀副本。由于所有聯合伺服器可以平等地讀取和寫入到存儲在 SQL Server 上的配置資料庫,AD FS 配置資料庫存儲在 SQL 資料庫時,術語“主聯合伺服器”不适用。
信賴方
接收和處理聲明的組織。請參閱資源夥伴組織。
信賴方信任
在“AD FS管理”管理單元中,信賴方信任是通常在以下情況中建立的信任對象:
- 帳戶夥伴組織,代表信任關系中的組織,其帳戶将通路資源合作夥伴組織中的資源。
- 資源夥伴組織,用于表示聯合身份驗證服務與單個基web的應用程式之間的信任。
信賴方信任對象由各種辨別符、名稱和規則組成,用于此夥伴或本地聯合身份驗證服務的Web應用程式。
資源聯合伺服器
資源夥伴組織中的聯合伺服器。資源聯合伺服器通常基于由帳戶聯合伺服器頒發的安全令牌來向使用者頒發安全令牌。
伺服器接收安全令牌、驗證簽名、将聲明規則邏輯應用到未打包的聲明以産生所需的傳出聲明,并根據傳入的安全令牌中的資訊生成新的安全令牌(帶有傳出聲明),并對新的令牌進行簽名以傳回到使用者,最終傳回到 Web 應用程式。
資源夥伴組織
由聯合身份驗證服務中的信賴方信任表示的聯合身份驗證夥伴。資源夥伴頒發基于聲明的安全令牌,其中包含帳戶夥伴中的使用者可以通路的基于 Web-釋出的應用程式。
2、特性存儲-角色
Active Directory 聯合身份驗證服務使用術語“特性存儲”來指代組織用來存儲其使用者帳戶及其相關屬性值的目錄或資料庫。
在身份提供者組織中進行配置後,AD FS 從存儲中檢索這些屬性值并基于該資訊建立聲明,以便在信賴方組織中托管的Web應用程式或服務可以在聯合使用者(其帳戶存儲在身份提供者組織中的使用者)嘗試通路該應用程式或服務時做出适當的授權決策。
特性存儲如何符合 AD FS 部署目标
使用者特性存儲的位置以及使用者進行身份驗證的位置決定了如何設計AD FS以支援使用者身份。根據特性存儲庫的位置以及使用者通路應用程式的位置(在Intranet或Internet中),可以使用以下部署目标之一:
- 為您的Active Directory使用者提供對聲明感覺的應用程式和服務的通路權限:在此目标中,組織使用者在以下情況下通路受AD FS保護的應用程式或服務(您自己的應用程式或服務或合作夥伴的應用程式或服務) 登入到公司Intranet中的Active Directory。
- 為您的Active Directory使用者提供對其他組織的應用程式和服務的通路權限:在此目标下,組織使用者可以在以下情況下通路受AD FS保護的應用程式或服務(您自己的應用程式或服務或合作夥伴的應用程式或服務),當他們登入到公司Intranet中的特性存儲以及從Internet遠端登入。
- 向另一組織中的使用者提供對聲明感覺應用程式和服務的通路權限:在此目标中,另一個組織中位于該組織企業 intranet 上特性存儲中的使用者帳戶必須通路 AD FS-組織中受保護的應用程式。當位于組織外圍網絡特性存儲中的基于使用者的使用者帳戶必須提供對您組織中受 AD FS 保護的應用程式的通路權限時,此目标也适用。
AD FS 支援的特性存儲
AD FS 支援範圍廣泛的目錄和資料庫存儲,可用于提取管理者-定義的屬性值并使用這些值填充聲明。AD FS 支援任何以下目錄或資料庫作為特性存儲:
- Windows server 2003 中的 Active Directory, (Active Directory 域服務) windows server 2008 中的 AD DS,windows server 2012 和 2012 R2,以及 windows server 2016 中的 AD DS。
- 所有版本的 Microsoft SQL Server 2005、SQL Server 2008、SQL Server 2012、SQL Server 2014 和 SQL Server 2016。
- 自定義特性存儲。
3、聲明-角色
在基于聲明的身份模型中,聲明在聯合過程中起着至關重要的作用。它們是确定所有基于Web的身份驗證和授權請求結果的關鍵元件。此模型支援組織以一種标準化方法跨安全和企業界限安全地投影數字辨別和權限或聲明。
什麼是聲明?以最簡單的形式來說,聲明是關于使用者的簡單聲明(例如,名稱,身份,組),主要用于授權通路Internet上任何位置的基于聲明的應用程式。每個語句對應一個存儲在聲明中的值。
擷取聲明來源
Active Directory 聯合身份驗證服務 (AD FS) 中的聯合身份驗證服務定義哪些聲明在聯合夥伴之間交換。但是,在它可以執行此操作前必須首先借助檢索到的或計算的值填充或擷取聲明來源。每個聲明值表示使用者、組或實體的值,并且以下列兩種方式之一擷取來源:
- 從特性存儲中檢索構成聲明的值時,例如,從 Active Directory 使用者帳戶的特性中檢索銷售部門的屬性值時。
- 在傳入聲明的值轉換為另一個基于在規則中表示邏輯的值時。例如,當具有域管理者值的傳入聲明作為傳出聲明發送之前,轉換為管理者的新值時。
聲明可以包含諸如電子-郵件位址、使用者主體名稱 (UPN)、組成員身份和其他帳戶屬性之類的值。
聲明流
其他方依賴于聲明的值來為其所托管的基于 Web 的應用程式執行授權任務。這些參與方在“AD FS管理”管理單元中稱為“信賴方”。
聯合身份驗證服務負責協調許多不同參與方之間的信任關系。它被設計為用于處理和流動來自最初源聲明(也稱為-AD FS聲明提供方)的受信任聲明交換,并将其傳遞給信賴方。然後信賴方使用這些聲明做出授權決定。
使用此過程的聲明流稱為聲明管道。通過聲明管道的聲明流有三個步驟:
- 從聲明提供方收到的聲明由聲明提供方信任上的接受轉換規則進行處理。這些規則可确定哪些聲明接受自聲明提供方。
- 接受轉換規則的輸出用作頒發授權規則的輸入,這些規則可确定是否允許使用者通路信賴方。
- 接受轉換規則的輸出用作頒發轉換規則的輸入,這些規則可确定将發送到信賴方的聲明。
聲明頒發的方式
在編寫聲明規則時,聲明規則根據傳入聲明源是在聲明提供方信任還是在信賴方信任上,編寫規則不同。在為聲明提供方信任編寫聲明規則時,傳入聲明是從受信任聲明提供方發送到聯合身份驗證服務的聲明。在為信賴方信任編寫規則時,傳入聲明是由适用的聲明提供方信任的聲明規則輸出的聲明。
聲明說明
聲明說明表示 AD FS 支援且可在聯合中繼資料中釋出的聲明類型的清單。
将釋出到聯合中繼資料的聲明說明集合存儲在 AD FS 配置資料庫中。這些聲明說明用于聯合身份驗證服務的各個元件。
每個聲明說明包括聲明類型 URI、名稱、釋出狀态和描述。您可以使用“ AD FS管理”管理單元中的“聲明描述”節點來管理聲明描述集合。您可以使用管理單元修改聲明說明的釋出狀态。可以使用以下設定:
- 在聯合中繼資料中釋出此聲明作為此聯合身份驗證服務可以接受(釋出為已接受)的聲明類型:訓示此聯合身份驗證服務将從其他聲明提供方接受的聲明類型。
- 在聯合中繼資料中釋出此聲明作為此聯合身份驗證服務可以發送(釋出為已發送)的聲明類型:訓示此聯合身份驗證服務提供的聲明類型。它們作為聯合身份驗證服務願意發送給其他服務的聲明類型。聲明提供方發送的實際聲明類型通常是此清單的子集。
4、聲明規則-角色
聲明的轉換規則(通過 Claim Engine執行),規則即:如果伺服器收到聲明A,則頒發聲明B,ADFS向外(relying party應用)發出的聲明受claim rule限制,需要在claim rules事先約定(需要進行轉換/映射)。
5、聲明管道-角色
Active Directory 聯合身份驗證服務(ADFS)中的聲明管道表示聲明在發出之前必須遵循聯合身份驗證服務的路徑。該聯合身份驗證服務管理通過聲明管道的各個階段(也包括聲明規則引擎處理聲明規則)對聲明進行流動的整個端到端過程。
聲明管道過程由三個進階-階段組成。此過程中的每個階段都初始化聲明規則引擎以處理特定于該階段的聲明規則。這些階段(的出現)順序如下:
- 接受傳入聲明 — 聲明管道中的此階段用于從令牌中提取傳入聲明并消除不需要或受信任的聲明。提取這些聲明之後,會運作組成聲明提供方信任的接受轉換規則集的接受規則。這些規則可以用于傳遞或添加新聲明,這些聲明随後可以在聲明管道的後續階段中使用。此階段的輸出用作第二個和第三個階段的輸入。
- 授權聲明請求者 — 此階段由聲明引擎用于基于是否允許令牌請求者擷取給定信賴方的令牌來發出允許或拒絕聲明。但是,需要先運作組成信賴方信任的發出授權規則集或委派授權規則集的授權規則,然後才能進行此階段。
- 發出傳出聲明 — 此階段用于發出傳出聲明并沿管道發送它們(它們在管道中會打包為安全令牌)。但是,需要先運作組成信賴方信任的發出轉換規則集的發出規則(這會确定将作為傳出聲明發出的聲明),然後才能進行此階段。
上面所有三個階段都執行聲明規則處理,但使用不同的規則集。如上所述,每個階段都有一組基于傳入聲明的釋出者(受理規則)或為其釋出聲明的目标服務(授權和釋出規則)的關聯規則。
聲明與令牌無關,但通過封裝在安全令牌中的網絡傳輸。不管傳入或傳出安全令牌的格式如何,聲明規則都會對聲明進行操作。
聲明規則包含管理者-定義的邏輯,聲明引擎通過該邏輯接受傳入聲明、基于請求者的身份授權聲明,并頒發信賴方所需的聲明。最後,由聲明引擎确定哪些聲明将進入在聲明流過聲明管道之後頒發的安全令牌中。
如下圖所示,聲明管道負責将聲明流過各個管道階段的整個-端-到端過程,以便最終獲得發出的聲明,該聲明将通過信賴參與方信任。圖中的傳出聲明表示發出的聲明。
6、聲明引擎-角色
聲明引擎(Claims Engine)是聯合身份驗證服務中的唯一實體,負責在您配置的所有聯合信任關系中運作每個規則集(Claims Rule),并将輸出結果移交給聲明管道(Claims Pipeline)。
7、AD FS 中的URL
統一資源辨別符(URI)是用作唯一辨別符的字元串。在 AD FS 中,URI 用于辨別合作夥伴網絡位址和配置對象。用于辨別合作夥伴網絡位址時,URI 始終是 URL。用于辨別配置對象時,URI 可以是 URN,也可以是 URL。
用作合作夥伴網絡位址的URI
下表介紹了 AD FS 中的管理者最常處理的辨別符:
信賴方辨別符的URI 字首比對
URI 的路徑文法按層次結構組織,并由所有 "/" 字元或所有 ":" 字元分隔。是以,該路徑可以基于分隔字元拆分為多個路徑部分。當字首比對時,每個部分必須與這些規則控制比對大小寫的比對規則完全比對。
在向聯合身份驗證服務發出的請求中辨別信賴方時,AD FS 将使用字首比對邏輯來确定 AD FS 配置資料庫中是否有比對的信賴方信任。
例如,如果 AD FS 配置(資料庫 URI1)中的信賴方辨別符是傳入請求(URI2)中信賴方辨別符的字首,則必須滿足以下條件:
- 必須忽略(結尾分隔符斜杠)和路徑節或頒發機構的冒号。
- URI1 和 URI2 的方案和授權部分必須完全比對(不區分大小寫)。
- URI1 的每個路徑部分必須與 URI2 的(相應路徑部分所選)的區分大小寫完全比對。
- URI2 的路徑部分可以比 URI1 多,但 URI1 的路徑部分不能比 URI2 多。
- URI1 的路徑部分不能比 URI2 多。
- 如果 URI1 具有查詢字元串,它必須與 URI2 查詢字元串完全比對。
- 如果 URI1 具有片段,它必須與 URI2 片段完全比對。
AD FS 原理
下圖為ADFS的整體過程(內建了Azure環境):
1、關鍵原理
- 使用者向ADFS為通路APPX請求令牌(有生存周期)。
- ADFS驗證使用者身份,向AD進行驗證。
- 驗證通過,為其頒發可通路APPX的安全令牌(該安全令牌中包含了此使用者的聲明)。
- 使用者用此安全令牌可通路該應用程式。
2、企業到員工的聯合
- 使用者浏覽app(信任STS),身份未得到驗證。
- 重定向到ADFS的STS以請求安全令牌。
- AD FS向AD進行該使用者的驗證,驗證通過,查詢其使用者屬性并頒發帶有聲明的安全令牌。
- 使用者用此安全令牌進行對app的通路。
- 驗證通過,app向使用者傳回cookies和頁面。
3、企業到企業的聯合
使用者-合作夥伴的、app-你的環境中的:
- 夥伴使用者浏覽你的app,身份未得到驗證,但獲知你ADFS STS的URL。
- 重定向到你的STS(Security Token Service),該使用者非你組織的,你的ADFS通過主領域發現将其組織的ADFS STS的URL傳回。
- 重定向到其組織的STS為其請求ST(安全令牌)。
- 其組織的STS向其AD進行驗證。
- 驗證通過,傳回其組織STS頒發的ST。
- 再次重定向到你的STS,你的STS對其組織頒發的ST進行處理。
- 傳回一個新的可用于通路你的app的ST。
- 夥伴使用者向你的app 發送新ST。
- app驗證通過,為夥伴使用者傳回cookies和頁面。
總結
前面為大家介紹聯合身份驗證是一個跨組織和平台邊界實作辨別、身份驗證和授權的過程,極大的擴充了web應用的能力,并梳理了AD FS相關的概念和知識,最後展示其運作的原理,希望借由了解AD FS能幫助到大家日常的IT運維和營運工作。下期我們将繼續擴大為大家分享AD FS的企業部署,把部署前的各種要求、準備及實施進行讨論。
其他優質文章
【并發操作】協程,線程,程序是什麼,在python中怎麼應用?
恭喜!藍鲸DevOps平台助力中國人保财險通過DevOps持續傳遞标準3級!
【愛嬰島】千店千面多元母嬰零售,雲化系統支援業務發展!
持續內建頻繁的代碼檢查怎麼辦,了解下自動化的靜态代碼檢查!
【深度分析】關于SPN不正确導緻SQL資料庫連接配接失敗