2013-05-14 149 views
0

開發環境:Windows 7企業版具有與Visual Studio .NET 4.0 2010ASP.NET窗體身份驗證下游WCF身份驗證和授權

生產環境:Windows 2008 Server和IIS 7.0

我想找出在ASP.net Web應用程序的單獨安全區域中的獨立機器上運行的WCF服務進行身份驗證和授權的最佳方式。

用戶使用用戶名和密碼登錄我們存儲在數據庫中的憑證。我們沒有實現Membership Provider,但是當用戶的憑證通過芥末時,我們手動創建一個帶有用戶標識的Forms Auth票據。

我確實推出了我自己的實現RoleProvider的角色提供者。因此,我們擁有「標準」ASP .NET角色以及在我們的ASP .NET Web應用程序上工作的表單身份驗證票證。

我需要做的是以某種方式將這些憑據傳遞給坐在另一臺機器上的WCF服務。最初,我想我可能會使用Windows Identity Foundation並創建一個自定義的安全令牌服務(STS)。基本上,如果用戶進行身份驗證,則創建一個令牌並將基於權限的授權和用戶身份添加到令牌中,並將其傳遞給WCF服務。

我們是當前使用.NET Remoting服務(.NET 1.1時間範圍),根本不驗證或授權。

這似乎可能有點矯枉過正,因爲可能有一種方法可以簡單地將當前與用戶相關的信息傳遞給您,因爲您創建Forms Auth票據時,我知道當前的原則是使用IIdentity設置爲「名稱」屬性,設置爲Thread.CurrentIdentity上的用戶標識。

我很確定IsInRole(「WhateverRole」)在這一點上也能正常工作,但所有這些都在Web應用程序端。什麼都不會傳遞給.NET Remoting服務。

看着這兩個類:
AuthenticationService Class
ServiceAuthorization Class
我不認爲他們是我想要的。同樣,我已閱讀Michele Bustamante的Learning WCF,但我並不真正看到這個特定的情況。當我閱讀Windows身份驗證時,我一直認爲需要將其綁定到與內部Windows安全狀況相關的一些內部NTLM或Kerberos中。我們的用戶沒有內部用戶。他們嚴格外部。

現在,我知道如果用戶獲得Forms Auth票據,他們基本上會得到一個有效的原則,並且應該設置角色,對不對?

如果是這樣,有沒有辦法將其傳遞給另一臺機器上的WCF服務設置?如果我將WCF clientCredentialType設置爲windows並將serviceAuthorization principlePermissionMode設置爲「UseAspNetRoles」,那麼當我進行服務調用時,它們是否會在安全上下文中從Web應用程序傳遞到WCF服務?

我可以發現什麼都清楚這是如何發生的。謝謝。

+0

您是否需要WCF服務對用戶憑據進行身份驗證?或者只是Web服務器的憑據?兩臺服務器是否位於同一個Web域(不是Windows域)? –

+0

理想情況下,我希望WCF根據用戶的憑證進行身份驗證。他們不在同一個域中。 – Dan7el

回答

1

我想你想要的是這樣的:

http://thoughtorientedarchitecture.blogspot.com/2009/10/flowing-aspnet-forms-authentication.html

這是不是超級安全的,因爲你有效地創建自己的中間人攻擊,但它可能是足夠安全滿足大多數需求。

本質上講,這歸結爲:

  1. 配置兩臺服務器具有相同的machineKey
  2. 抓住從用戶請求
  3. 安裝cookie來傳出WCF服務調用的FormsAuthentication餅乾
  4. ???
  5. 獲利
+0

好的。我認爲這會做到這一點。萬分感謝。 – Dan7el