簡體   English   中英

Windows Identity在ASP.NET請求管道中始終是匿名的

[英]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區域中。 不過,這似乎是一個臨時解決方案,而不是實際的解決方案。

理想情況下,我希望擁有以下內容:

  1. 用戶瀏覽到我的網站
  2. 在后台,他們的Windows用戶名被拾取,並針對由該應用程序管理的允許用戶進行身份驗證
  3. 用戶成功通過身份驗證,頁面加載,用戶沒有通過身份驗證的明智選擇

我需要怎么做才能做到這一點?

在此先感謝您的幫助。 如果可以提供更多背景信息,請告訴我。

編輯:忘記添加我正在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM