2010-02-19 107 views
5

我們正在開發基於瀏覽器的Intranet應用程序。所有用戶都有活動的目錄帳戶,因此明顯的選擇是使用集成Windows身份驗證。但是會有多個用戶訪問相同的客戶端機器,因此我們決定使用基於表單的身份驗證(但是針對AD進行身份驗證)。如何驗證ASP.NET和WCF之間的用戶身份?

在這種情況下什麼是我的ASP.NET應用程序(IIS)和WCF服務(另一臺服務器IIS 7)之間進行身份驗證的最佳途徑。我不想使用asp.Net兼容模式或證書。

我想創造另一個域帳戶進行身份驗證ASP.NET和WCF。我還將有關當前ASP.NET用戶的信息作爲標題信息傳遞給WCF。這是正確的方法嗎?以下代碼將從ASP.NET調用以訪問並獲取每種服務方法。

// Call WCF service from ASP.NET Application using a new domain account for each call. 
proxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain"; 
ServiceReference.HelloWorldClient proxy = new ServiceReference.HelloWorldClient(); 
proxy.ClientCredentials.Windows.ClientCredential.UserName = "new_domain_account"; 
proxy.ClientCredentials.Windows.ClientCredential.Password = "password"; 

有沒有更好的辦法從ASP.NET驗證WCF?

感謝, 灰。

回答

0

嗯...如果你有廣告,並且登錄與他們的憑據也不要緊,他們是什麼樣的機器上,只要使用AD。那麼,如果他們使用同一臺機器呢?

在任何情況下,微軟有很多的信息在這裏這個問題:

http://wcfsecurity.codeplex.com/wikipage?title=Application%20Scenarios&referringTitle=Home

檢查出來。

+0

將wcf服務設置爲集成Windows身份驗證。將有許多用戶使用他們的AD帳戶訪問一臺客戶端PC。他們不想註銷窗口來訪問此應用程序。所以我設置表單身份驗證。但是他們登錄後(表單),如果他們訪問WCF,身份將是原始的Windows登錄用戶而不是表單用戶。 – Ash 2010-02-19 01:19:34

+0

啊,我想我明白了,你不想設置Kerberos。如果您設置Kerberos,那麼您可以在Web服務上使用AD進行身份驗證,而無需用戶執行任何操作。或者這是你談論的更好的方式? – Hogan 2010-02-19 01:22:17

+0

是的,我想安裝Kerberos,我想用AD進行身份驗證,但是有任何方法可以將當前已通過身份驗證的ASP.NET窗體用戶傳遞給WCF,以便WCF將其視爲當前用戶。 (AD用戶)。目前WCF進行身份驗證,但不是最新的表單用戶,而是原始的Windows登錄用戶。感謝您的鏈接,但我找不到正確的答案。 – Ash 2010-02-19 01:37:14

3

沒有什麼特別的關於認證一個ASP.NET應用程序WCF服務。所有正常的身份驗證選項都可用(用戶名,X.509,窗口)。

有趣的是,您還想傳遞基於瀏覽器的客戶端憑據。這是一種稱爲可信子系統的已知模式。是的,只要郵件受到保護(加密),您就可以在郵件頭中傳遞這些郵件。

1

這聽起來像它不是一個WCF問題,但瀏覽器透明地驗證問題。

嘗試禁用IIS中集成Windows身份驗證的ASP.NET應用程序,並切換到基本或摘要式身份驗證。這兩種方法仍然會對AD進行身份驗證,但瀏覽器不會透明地對登錄用戶進行身份驗證。

然後在你的ASP.NET應用程序,只是它使用模擬,並通過任何憑據IIS是知道的,以你調用WCF服務。

1

我不知道所有的ASP.NET,但我做了一些WCF,我想你需要做的是獲得「表單登錄」,然後模擬當前線程中的用戶,然後啓動到其他服務器的WCF連接。請看this article on msdn,以便在WCF中完全瞭解其中的一些內容。我不知道你將如何將其整合到ASP.NET方面(就像我說的,我對此技術知之甚少),但從概念上講,我認爲這是你必須要做的。