[英]Can a website authenticate against multiple ADFS servers?
我們有一個使用FormsAuthentication的ASP.NET/MVC網站。 通常,當用戶嘗試訪問頁面且沒有有效的FormsAuthentication cookie時,IIS會將其重定向到登錄視圖。 當用戶對登錄控制器執行HttpPost時,我們的控制器操作將調用我們的WebApi Web服務,該服務將針對Sql Server數據庫驗證用戶名,密碼和customerid。 如果認證通過,則控制器操作將設置FormsAuthentication cookie,並重定向到用戶要求的頁面。
現在,銷售“ Single Sign-On”(單點登錄)的聲音越來越大,盡管我不清楚它們的含義。 據我所讀,在Microsoft World中,這通常意味着訪問MS的Active Directory聯合身份驗證服務。
在這一點上,我幾乎不知道它是如何工作的,但是在我深入研究之前,可以將身份驗證代碼放在WebApi Web服務中,在該服務中我們可以選擇針對Sql Server數據庫還是針對哪個ADFS服務器適合指定客戶?
我們的問題是,我們不知道有多少用戶在為數百個客戶服務。 許多客戶不會運行ADFS,而這樣做的客戶將各自擁有自己的ADFS服務器。
關於單一登錄,我看到的大部分內容似乎都涉及到將瀏覽器重定向到ADFS服務器,然后重定向回,並且如果您已經登錄,則看起來根本避免登錄。我認為我們沒有就我們而言,可以做到這一點。 在點擊數據庫之前,我們不知道重定向到哪個ADFS服務器。
因此,問題-是否有可能完全從WebAPI Web服務中的C#代碼進行ADFS身份驗證?
(一種可能的麻煩是-網站本身對任何數據庫的訪問均為零。其web.config中唯一的配置設置是該Web服務的基本URL。無論身份驗證發生在該Web服務中,而不是在該網站中。)
首先,“單點登錄”(SSO)不限於ADFS。 這只是意味着您只鍵入一次憑據,然后您訪問的所有系統都會自動“識別”您; 所有后續授權請求都是透明的。 例如,如果您的公司Intranet(相同的AD域)中有多個使用Windows身份驗證的網站,則您具有SSO:登錄到計算機時進行一次身份驗證,然后您的Web瀏覽器使用NTLM自動對這些網站進行身份驗證或Kerberos。 在這種情況下,沒有ADFS。
ADFS(通常更稱為“聯合會”)允許的是SSO跨越安全邊界。 在Windows世界中,安全區域通常是由Active Directory林創建的。 使用Windows身份驗證提供的SSO可以訪問該林中的所有內容。 但是,一旦離開此區域(SaaS應用程序,另一個公司網絡中的網站),就需要另一個身份驗證協議來執行SSO,並且這些協議是在ADFS中實現的。
然后關於您的特定問題:
完全通過WebAPI中的C#代碼進行ADFS身份驗證
可以在您的服務中“重新實現” ADFS,但是如果這樣做,您將不會獲得SSO。 使用聯合身份驗證時,會將用戶重定向到其公司的ADFS服務器。 此ADFS服務器與他的計算機位於同一域中,因此用戶在此處獲取SSO。 同樣,如果您對自己進行身份驗證,則用戶將無法獲得SSO,因為用戶與您的站點不在同一安全區域中。
向多個身份提供者進行身份驗證時,通常會將其重定向到您自己的 STS。 因此,在這種情況下,您將www.yourapp.com重定向到sts.yourapp.com,后者又重定向到sts.somecustomer.com。
啟用此類數據流的特定工具是home realm參數( whr
)和AD FS Powershell API(允許IDP維護)。
RP-STS充當應用程序的信任點,並管理適當IDP的選擇。 一個RP-STS,許多IP-STS。 您的每個客戶的IP-STS都被設置為AD FS中的“聲明提供者信任”。
與往常一樣,維托里奧(Vittorio)所涵蓋的話題比我能做的要好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.