2016-01-24 190 views
0

我們將加強Intranet Web應用程序的身份驗證和授權系統。在閱讀了ADFS,STS,基於聲明的身份驗證,asp.net身份之後的幾天。仍然不確定這些東西是如何協同工作的。從Windows註銷經過身份驗證的ADFS,並以身份驗證的不同用戶身份登錄

我們大部分的內聯網web應用程序使用Windows集成身份驗證,我們使用Windows組AzMan的或做作用的基礎授權。我們有很少的應用程序(供應商應用程序)使用它自己的用戶數據庫和表單基礎認證。

我們希望爲我們的Web應用程序添加以下功能。

  1. 對於Windows身份驗證的應用程序,我們要讓用戶登出以不同的使用者/註冊。因此,當用戶A使用他/她的計算機訪問應用程序時,它將自動登錄(默認的Windows集成身份驗證)。當他/她註銷時,它將重定向到表單以允許輸入其他用戶憑證。

  2. 我們希望允許用戶登錄到系統使用系統B的用戶名/密碼。 例如對於Windows身份驗證的應用程序,我們希望允許用戶登錄使用的形式基本應用程序(供應商應用程序)的證書申請通過簽證

我不知道是否能ADFS解決這兩個問題。

從我的理解,ADFS的主要目的是允許訪問互聯網從內部應用程序,它需要SSL。

我們的應用程序都是在Intranet,我們不想要管理的SSL證書。

但是,通過使用ADFS,或許我可以在我的應用程序能夠在Windows和窗體身份驗證,所以然後讓使用註銷並重新引導他登錄形式,它就像他訪問外部公司網絡。它應該解決的問題1.

對於問題2,如果我能創造什麼自定義STS使用形式基本驗證appliaction的用戶數據庫發佈的安全令牌。然後我可以使用基於聲明的身份驗證,並允許一個應用程序可以使用ADFS和我的STS。它應該解決我的問題2.

我的方向是否正確?還是我複雜的問題?

回答

0

如果沒有SSL,ADFS將無法正常工作。

此外,所有的RP都必須使用SSL。

在內部,用戶將使用WIA無縫登錄。當他們註銷時,他們將會再次無縫登錄。

此外,ADFS v3.0及更低版本只能對AD進行身份驗證。

0

雖然您希望使用ADFS,但問題在於它是否是一個好主意並且值得付出麻煩。讓用戶退出機器並使用其他帳戶登錄可能更合適,因此您可以使用集成Windows身份驗證(IWA)。編寫自己的安全基礎架構充滿了危險。

如果你真的覺得這些都是很難的要求,這是值得的麻煩,以下可能工作。

編寫一個基於Katana和enable Integrated Windows Authentication的ASP.NET Web應用程序。這將確保首次完全未經身份驗證的請求進入時,應用程序將挑戰瀏覽器。隨後的請求將在HttpContext.UserThread.CurrentPrincipal中填充一個WindowsPrincipal。

現在,寫一塊OWIN middleware,檢查是否存在驗證Cookie。如果cookie不存在,它會檢查Thread.CurrentPrincipal並將聲明序列化爲安全cookie。

如果安全Cookie存在,它會用根據Cookie中的聲明創建的新的ClaimsPrincipal覆蓋WindowsPrincipalThread.CurrentPrincipal

現在,當用戶第一次導航到Web應用程序時,他/她將使用IWA自動登錄並創建Cookie。現在,提供一個註銷操作,刪除身份驗證cookie並向用戶顯示用戶名和密碼對話框。

在該操作的POST處理程序中,使用WIF到ADFS中的talk to the username endpoint(使用WS-Trust協議)並嘗試使用所提供的憑證對用戶進行身份驗證。如果成功,請使用返回的令牌中的聲明來創建新的身份驗證Cookie。