2013-08-02 143 views
4

我使用Windows身份驗證和ASP.NET模擬,通過IIS7對用戶進行WCF服務身份驗證。如何模擬用戶到WCF服務?

在本地調試時,我能夠看到System.Security.Principal.WindowsIdentity.GetCurrent()。名稱與我的Windows憑據相同。當我將此服務部署到服務器時,除非啓用匿名身份驗證,否則WCF將無法運行。

那麼,我們如何得到這個WCF服務與匿名驗證禁用在服務器上運行?

的認證方案主機 ( 'IntegratedWindowsAuthentication')上配置不允許那些 的結合 '的WebHttpBinding' 配置('匿名:嘗試都建議後的錯誤消息:

UPDATE 1 「)。請確保將 SecurityMode設置爲Transport或TransportCredentialOnly。 此外,這可以通過改變認證 方案爲通過IIS管理工具本申請中,通過 的ServiceHost.Authentication.AuthenticationSchemes屬性,則 應用配置文件中的 元件,通過在更新ClientCredentialType屬性來解決綁定, 或通過調整 HttpTransportBindingElement上的AuthenticationScheme屬性。

更新2

應用程序池:該認證以下面的方式設置

  • 身份=網絡服務

網站:

  • 匿名身份驗證=禁用
  • ASP.NET驗證=啓用
  • Windows身份驗證=啓用

WCF應用:

  • 匿名身份驗證=禁用
  • ASP.NET驗證=啓用
  • Windows身份驗證=已啓用

回答

3

這是一個常見問題。您需要設置的安全模式和相應的運輸單元 - 如果使用basicHttpBinding的 - 把下面的文字中配置

<basicHttpBinding> 
    <binding> 
    <security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Windows" /> 
    </security> 
    </binding> 
</basicHttpBinding> 

閱讀下列職位 - http://blogs.msdn.com/b/drnick/archive/2007/03/23/preventing-anonymous-access.aspx http://blogs.msdn.com/b/wenlong/archive/2006/05/18/600603.aspx

+0

謝謝。但是,我們需要使用webHttpBinding而不是basicHttpBinding,這是爲了使我們能夠爲服務定義默認行爲。請看看這個問題,看看我們目前收到的錯誤信息。 – aleafonso

1

其中一個原因錯誤您需要在託管ASP.net的服務器上啓用Kerberos委派。這允許Windows認證令牌傳播到WCF服務託管服務器。

你看看下面的鏈接

Impersonation and Delegation in WCF

HTH

Rauts

+0

非常感謝您的建議。我們已經在AD中啓用服務器進行授權並重新測試。不幸的是,該服務仍然無法使用禁用匿名身份驗證並啓用ASP.NET模擬。顯示的錯誤信息與之前保持一致。任何其他想法? – aleafonso

+0

分別在WCF服務和ASP.Net應用程序上啓用了哪些認證?我認爲如果你有兩個Windows身份驗證,它應該工作。 – rauts

+0

請看看這個問題。我剛更新了所有正在使用的認證值。非常感謝 – aleafonso

0

曾有同樣的問題。對我來說,這是因爲在應用程序的IIS上未啓用Windows身份驗證。

  1. 打開IIS
  2. 選擇你的web應用
  3. 點擊驗證圖標(IIS)
  4. 啓用Windows身份驗證