2011-09-28 18 views
8

我們使用使用Windows身份驗證的MVC 3在ASP.NET 4.0上創建ASP.NET應用程序。IIS7上的ASP.NET身份驗證問題 - 用於Windows身份驗證的User.Identity.Name爲空

從Visual Studio 2010運行時,一切都按預期工作,但是當推出到IIS7時,Windows登錄用戶永遠不會被填充(檢查User.Identity.Name)。沒有用戶憑證的對話框提示。

web.config中設置:

<authentication mode="Windows" /> 

在IIS中我可以看到,Windows身份驗證被啓用,因爲是匿名的(禁止在故宮403匿名結果,並沒有內容被顯示)。

我已經嘗試啓用和禁用「內核模式身份驗證」(useKernelMode =「true」),但這似乎沒有任何區別。雖然我確實記得我們必須在另一臺服務器上的其他站點上禁用此設置才能使驗證正常工作(可能會指出堆棧中的潛在問題?)。

在情況下,它是非常有用的,從IIS的的applicationHost.config:

<security> 
    <authentication> 
    <anonymousAuthentication enabled="true" /> 
    <digestAuthentication enabled="false" /> 
    <basicAuthentication enabled="false" /> 
    <windowsAuthentication enabled="true" useKernelMode="false"> 
     <providers> 
     <clear /> 
     <add value="NTLM" /> 
     </providers> 
    </windowsAuthentication> 
    </authentication> 
</security> 

任何想法的問題可能是什麼?

在此先感謝您的任何建議。

更新1

我設法找到另一個IIS7服務器上測試,我發現,如果我禁用根據需要匿名訪問一切正常。不過,即使我禁用匿名訪問(我現在仍禁用匿名),我仍然在原始IIS7服務器上遇到問題。所以我猜想一定會有一些問題進一步下降。有任何想法嗎?我需要解決一些問題,因爲它會不斷彈出並咬我們我想象的。

更新2

如果我對這個問題IIS7框,然後我挑戰的登錄提示對話框啓用摘要式身份驗證,一切都按預期工作,如果我提供合適的憑據。但作爲一個內部網絡應用程序,用戶已經登錄到該域,我們並不想用這種方式挑戰它們。應該透明地傳遞憑證,因爲它在第二個IIS7框上工作。

更新3

一些進展......我發現,如果Web應用程序是根,而不是一個子網站,然後直接編輯applicationHost.config文件的IIS7給予以下認證設置允許網站按預期方式工作:

<authentication> 
    <anonymousAuthentication enabled="false" /> 
    <windowsAuthentication enabled="true"> 
    <providers> 
     <clear /> 
     <add value="NTLM" /> 
    </providers> 
    </windowsAuthentication> 
    <digestAuthentication enabled="false" /> 
</authentication> 

使用IIS7的UI來配置身份驗證不會給出正確的結果。身份驗證項目在病房後丟失(因爲我猜IIS7假設他們正在被繼承),或者他們有錯誤的設置(windowsAuthentication似乎需要上面提供的配置工具配置才能正常工作)。

不幸的是,有問題的Web應用程序實際上是一個子應用程序,因爲它有一個內部版本(使用Windows身份驗證> www.site。com/internal)和外部版本(使用表單身份驗證> www.site.com/external)。我仍然無法將身份驗證作爲子應用程序工作。我只是得到一個「錯誤代碼:403禁止」。

+0

檢查這一個:http://stackoverflow.com/questions/1067591/user-identity-name-blank-in-asp-net-mvc –

+0

什麼瀏覽器你測試與?如果是Firefox,你可能想看看:https://addons.mozilla.org/en-US/firefox/addon/integrated-auth-for-firefox/ Firefox沒有正確的啓用windows身份驗證框。 – NotMe

+0

乾杯大衛,但沒有幫助那裏。這個人似乎有問題讓Windows身份驗證工作,因爲他錯過了web.config設置(所以無法在VS或IIS中工作)。在VS中,一切正常,對IIS來說,事情並不像預期的那樣行事。 – Gavin

回答

3

在這種情況下,這是一個Microsoft ISA Server問題。似乎請求是通過ISA內部路由到Windows Authenticated站點的,一旦ISA被移除,問題就消失了。

我不知道很多關於ISA以及它如何路由請求,但我認爲它必須已經從請求中剝離出一些重要信息,因爲某些規則會有人配置。

作爲一個便箋,以幫助診斷類似的設置:網絡管理員的工作人員告訴我,內部流量未通過ISA路由,但在內部ping網站顯示ISA實際上在運行。

0

您提到在另一臺服務器上禁用匿名訪問,但在主服務器上遇到403錯誤。因此,我會檢查站點運行的文件夾的基於文件的權限。在過去,我需要將\ Network Serivce帳戶完全控制權限授予站點文件夾以及所有子文件夾,否則我將遇到403個錯誤。檢查正在工作的服務器上的文件權限,並查看與不工作的服務器是否存在差異。另外,如果這不是問題,我會建議比較兩臺服務器之間的所有其他IIS設置,因爲您知道它可以在一臺服務器上運行,而不在另一臺服務器上運行。找到差異。

+0

感謝佩吉,但仍然沒有喜悅。網絡服務對這些文件夾擁有完全權限,並且也被App Pool使用。我比較服務器,但迄今爲止沒有明顯的差異。我想知道這是否與不同的盒子的AD配置有所不同。將跟蹤運營團隊的成員進行進一步調查和嘗試。 – Gavin

+0

@Gavin,您需要檢查不需要網絡服務的應用程序池標識的權限。 – VinayC

+0

@VinayC - 歡呼聲。在這種情況下,網絡服務正在被應用程序池使用。網絡服務還具有文件位置的完全權限。 – Gavin