2013-06-20 53 views
1

我已經使用WebApi構建了一個RESTful Web服務。我正在使用實體框架來連接到數據庫。 Localy工作正常。當我上傳的網站主機提供商,並作出要求,我得到一個401的結果,用下面的標題一起:使用EF的WebApi,Windows身份驗證失敗

HTTP/1.1 401 Unauthorized 
Cache-Control: no-cache 
Pragma: no-cache 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 
X-Powered-By: ASP.NET 
X-Powered-By-Plesk: PleskWin 
Date: Thu, 20 Jun 2013 11:28:47 GMT 
Content-Length: 0 
Proxy-Support: Session-Based-Authentication 

第一個奇怪的是,如果不是EF我用的是經典SqlConnectionSqlCommand它工作正常。 第二個奇怪的是,如果我運行項目本地和連接字符串我連接到遠程服務器,它也可以!

一個雖然剛剛找到我。難道我的連接字符串是這樣的,使用System.Data.SqlClient作爲提供者?

<add name="MyContext" connectionString="Data Source=(local);Initial Catalog=MyDB;User Id=user;Password=password;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 

我在這個SO問題中嘗試了一些建議,但沒有成功。 Disable Windows Authentication for WebAPI

有什麼建議嗎?我一直在爲這3天努力,實施HttpModules,自定義屬性,閱讀處理程序。我現在真的不知所措。

+0

我懷疑這與EF有關。在IIS中啓用日誌記錄並查看此請求的詳細錯誤消息。 –

回答

1

從WWW-Authenticate頭文件中可以看到,Windows身份驗證明顯是踢入的。

WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 

您必須禁用Windows身份驗證。如果您可以使用IIS管理器,請確保身份驗證設置如下所示。

enter image description here

或者你可以使用web.config文件(假設IIS 7集成)。

<system.webServer> 
    <security> 
    <authentication> 
     <anonymousAuthentication enabled="false" /> 
     <basicAuthentication enabled="false" /> 
     <windowsAuthentication enabled="false" /> 
    </authentication> 
    </security> 
    ... 
<system.webServer> 
+0

假設OP在測試時沒有犯錯誤,那麼如何從EF更改爲簡單的'SqlCommand'導致不同的行爲? – Stijn

+0

它不能。我真的懷疑將SqlCommand更改爲EF與401有什麼關係。很顯然,IIS正在將這些標題發送回去。 – Badri

+0

不幸的是,我無法更改IIS配置。用EF和'SqlCommand'進行了多次檢查,但是我又在這個項目上工作了很多天,很多小時,我可能會感到很疲倦。我有時間檢查配置。 – alfoks