AD FS是什麼,用在什麼場景,原理是什麼?

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、企業到員工的聯合

  1. 用戶瀏覽app(信任STS),身份未得到驗證。
  2. 重定向到ADFS的STS以請求安全令牌。
  3. AD FS向AD進行該用戶的驗證,驗證通過,查詢其用戶屬性並頒發帶有聲明的安全令牌。
  4. 用戶用此安全令牌進行對app的訪問。
  5. 驗證通過,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數據庫連接失敗

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章