2011-04-11 268 views
2

我已經看過模擬的例子,但我仍然有問題。WCF模擬/身份驗證

結構的一些細節:

ASP.net:Windows身份驗證
WCF:在IIS託管,目前正在使用允許匿名用戶

我想實現的是允許通過身份驗證的Windows登錄傳遞給WCF進行訪問控制,例如阻止匿名用戶嘗試調用服務。

使用ASP.net應用程序時,如果計算機以管理員身份登錄,但在Active Directory中失敗,因爲它不是AD下的定義用戶,瀏覽器的彈出窗口將提示輸入用戶名和密碼。

當提示時,用戶將輸入正確的用戶ID和密碼對應於AD。因此,登錄通過。
但是,當我使用WCF的模擬將012窗口身份驗證憑據傳遞給WCF時,它顯示爲管理員而不是ASP.net身份驗證的用戶信息。

我該怎麼做才能獲得正確的ASP.net認證用戶信息,而不是用戶在Windows中登錄的內容。

回答

4

在你的ASP.Net應用程序中,你必須在你的web.config中設置<identity impersonate="true"/>

然後,你將不得不冒充您的來電添加到WCF服務,像這樣的ASP.Net應用內:

using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate()) 
{ 
    WebClient client = new WebClient 
     { 
     Credentials = CredentialCache.DefaultNetworkCredentials 
     }; 
    string result = client.DownloadString("http://someserver"); 
} 

還檢查了patterns & practices: WCF Security Guidance關於如何添加教程一步一步從Web應用程序模擬WCF調用。

+0

投票結果至少與我目前看到的情況不同。至少在明天之前將無法測試。所以要確認,標識impersonate = true是添加在ASP,而不是WCF?但是我曾嘗試過一次ASP,失敗了。我所做的是使用operationalContext。那麼有可能解釋你與你有什麼不同? – 2011-04-11 15:26:10

+0

您需要打開Web應用程序的Windows身份驗證,並使用impersonate = true。這將允許您模擬從asp.net站點調用wvf服務。您可能還必須確保您在域中使用Kerberos,而不僅僅是NTLM。 – 2011-04-11 19:39:55

+0

Web App明智地打開了Windows身份驗證。好吧,我今晚可以試試,如果我有時間 – 2011-04-12 01:06:26