[英]ASP.NET Windows Authentication + server always getting anonymous user
[英]Windows Identity always anonymous in ASP.NET request pipeline
我正在嘗試為我的MVC網站創建一個簡單的操作篩選器,以根據允許的對該網站的訪問來檢查當前Windows用戶。 由於某些原因, filterContext.HttpContext.User.Identity
對象始終設置為不帶用戶名的匿名對象。 我嘗試在不同的階段(OnAuthenticate和OnAuthorize)抓取它,但是它始終是匿名的。
我目前在IIS中啟用了匿名身份驗證和 Windows身份驗證(實際上遵循此示例來配置Windows身份驗證功能),並且在我的web.config的system.web
節點中具有以下塊:
<authentication mode="Windows" />
<authorization>
<allow users="*" />
<deny users="?" />
</authorization>
但是由於某種原因,身份始終是匿名的,沒有用戶名。 我必須在這里丟失一些東西。 在IIS中設置Windows身份驗證后,總是會提示我輸入用戶名/密碼組合(實際上會失敗,並顯示HTTP401.1錯誤0xc000006d
,盡管我認為這可能是因為我有用於開發的自定義主機頭設置)。 我還閱讀了幾篇文章,這些文章暗示這是因為我的站點被確定為位於Internet區域中,並且答案總是會指出要將該站點添加到Internet Explorer的Intranet區域中。 不過,這似乎是一個臨時解決方案,而不是實際的解決方案。
理想情況下,我希望擁有以下內容:
我需要怎么做才能做到這一點?
在此先感謝您的幫助。 如果可以提供更多背景信息,請告訴我。
編輯:忘記添加我正在Windows 7 SP1,IIS 7.5上運行
在解決方案資源管理器中,在項目上按F4鍵,如果從Visual Studio運行項目,則將“ Windows身份驗證”更改為“啟用”。
在IIS中,選擇“ WebSite” ->“ 身份驗證和禁用 匿名身份驗證” ,並確保“ Windows身份驗證 ”(如果啟用)
嘗試
<system.web>
<identity impersonate="true" />
</system.web>
要么
單擊在項目上不是解決方案=>打開屬性資源管理器, 而不是右鍵單擊屬性=>,您會發現將匿名身份驗證設置為禁用
您需要從iis禁用匿名身份驗證,並僅啟用Windows身份驗證。
這兩個規則在您的代碼中順序錯誤
<allow users="*" />
<deny users="?" />
由於您首先允許所有人,因此甚至不會評估第二條規則。
嘗試切換它們
<deny users="?" />
<allow users="*" />
這樣,您首先將拒絕匿名請求,以便身份驗證管道甚至可以將401返回給客戶端。 當NTLM / Kerberos身份驗證選擇用戶名時,第二條規則允許所有人(這次已通過身份驗證)。
為此,您還必須禁用匿名身份驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.