2017-07-04 37 views
0

我試圖創建我的MVC網站一個簡單的動作過濾器,檢查對那些允許訪問該網站當前的Windows用戶匿名。出於某種原因,filterContext.HttpContext.User.Identity對象始終設置爲匿名且沒有用戶名。我試圖在不同的階段(OnAuthenticate和OnAuthorize)抓住它,但它始終是匿名的。Windows標識始終在ASP.NET請求管道

我目前在IIS中啓用匿名 Windows身份驗證(居然也跟着this example配置Windows身份驗證功能),而且我在system.web節點我的web.config以下塊:

<authentication mode="Windows" /> 
<authorization> 
    <allow users="*" /> 
    <deny users="?" /> 
</authorization> 

但是出於某種原因,身份始終是匿名的,沒有用戶名。我必須在這裏失去一些東西。使用Windows身份驗證在IIS中設置,我總是被提示輸入用戶名/密碼組合(這實際上失敗,HTTP401.1錯誤0xc000006d,但我認爲這可能是因爲我有很大的發展自定義主機頭設置)。我也看到了暗示,這是因爲我的網站被確定爲在互聯網區和答案必須說明的站點添加到Internet Explorer中的內部網區的幾篇文章。這看起來像是一個創可貼的解決方案,而不是實際的解決方案。

理想情況下,我想有以下幾點:

  1. 用戶瀏覽到我的網站
  2. 的場景,他們的Windows用戶名拾起,並反對由應用程序管理允許用戶通過身份驗證的背後
  3. 用戶認證成功,頁面加載,用戶不明智,他們被認證

我需要做什麼來實現這一目標?

在此先感謝您的幫助。請讓我知道,如果我可以提供更多的上下文。

編輯:忘了補充,我在Windows 7 SP1上運行此,IIS 7.5

+0

您需要完成登錄,而不Windows Identity之前將設置一個401。否則你的身份將是匿名的。就內聯網區域而言,我從來沒有遇到過這個問題。使用本地主機進行身份驗證時可能會出現問題。 –

回答

0

這兩個規則是錯誤的順序在你的代碼

<allow users="*" /> 
<deny users="?" /> 

既然你首先讓大家,第二條規則甚至沒有評估。

嘗試切換他們

<deny users="?" /> 
<allow users="*" /> 

這樣,你先拒絕匿名請求,以便認證管道甚至可以返回401給客戶端。當NTLM/Kerberos認證選擇用戶名時,第二個規則允許每個人(此次認證)。

爲此,您還必須禁用的匿名身份驗證。

+0

這似乎是問題所在!事後看來,拒絕/允許的順序是有道理的。謝謝! –

0

嘗試

<system.web> 
    <identity impersonate="true" /> 
</system.web> 

OR

單擊該項目而不是解決方案=>打開屬性瀏覽器右鍵屬性=>你會發現匿名身份驗證設置爲禁用

0

您需要禁用iis的匿名身份驗證並僅啓用Windows身份驗證。

0

在您的解決方案資源管理器中,按F4 項目,並更改Windows身份驗證,如果你正在運行從Visual Studio項目啓動;

IIS選擇網頁 - >認證禁用匿名身份驗證並確保 「Windows身份驗證」 如果啓用