Iis

解決 IIS7.5 和 Windows 身份驗證的訪問問題

  • January 25, 2017

我正在 IIS 7.5 伺服器(Win Server 2008 R2)上安裝 Web 應用程序,但遇到了 Windows 身份驗證問題。我已經完成了數十次安裝,但這一次讓我卡住了,所以非常歡迎任何建議。

概括

只有管​​理員可以通過 Windows 身份驗證連接到我的網站,但我希望所有使用者都經過身份驗證。管理員既可以通過 localhost 從機器連接,也可以從另一個工作站連接。其他使用者會被提示輸入憑據,而不是自動進行身份驗證,並且被拒絕訪問。儘管讓每個人都可以完全控制 Web 目錄,但仍然如此。

詳細場景

  • 使用作為 NETWORK SERVICE 執行的應用程序池創建的 Web 應用程序。啟用 Windows 身份驗證,禁用所有其他身份驗證。Windows 身份驗證具有核心模式 =true(即 IIS 預設值),並且提供程序的順序為 NTLM、協商(儘管我也嘗試過相反的方法)。所有登錄都在同一個域中,並且 Web 伺服器在該域中。
  • 應用程序安裝在C:\MyApplication\App\
  • 當登錄到伺服器(作為管理員帳戶)時,我可以導航到http://localhost/MyApp並自動進行身份驗證。
  • 登錄到伺服器(作為管理員帳戶)時,我導航到http://webserver.full.domain.com/MyApp並提示輸入憑據。輸入它們 3 次後,我得到 401.1 未經授權的頁面。
  • 當以普通使用者帳戶登錄到工作站並導航到時,系統會http://webserver/MyApp提示我輸入憑據 3 次,然後顯示拒絕訪問消息。
  • 當以在伺服器上工作的管理員帳戶身份登錄到工作站時,我還可以導航到http://webserver/MyApp並自動進行身份驗證。使用其他帳戶登錄不起作用。這對我來說似乎特別奇怪,這表明它只是關於權限……但權限似乎很好?!
  • 即使根據本文啟用了詳細的 Kerberos 日誌記錄,安全事件日誌中也沒有記錄任何故障。
  • SPN 似乎設置正確,因為我使用另一台機器上的“setspn -L servername”並看到兩個條目HOST/servernameHOST/servername.full.domain.com.
  • 伺服器上有另一個應用程序作為 NETWORK SERVICE 執行,在 IIS 中使用匿名身份驗證,然後使用 SQL Integrated Security 連接到 SQL Server。它不使用模擬,因此連接到 SQL Server 作為機器身份DOMAIN\SERVER$。這工作正常。我提到這一點是因為它表明機器在域上沒有基本問題,因為它的身份被 SQL Server 接受。
  • 我已將 NETWORK SERVICE 完全控制權授予應用程序所在的 Web 伺服器文件夾 ( C:\MyApplication\)。我已授予 Authenticated Users 讀取/列出/執行權限。來自工作站的 Internet Explorer 正確辨識http://webserver/MyApp為 Intranet 區域
  • Internet Explorer 已啟用 Windows 身份驗證。
  • 我還嘗試創建另一個虛擬目錄C:\MyApplication\test,其中包含一個文件 test.html,也僅啟用了 Windows 身份驗證並具有適當的權限。相同的症狀,但我得到的是 401.2 Unauthorized 而不是 401.1。
  • 伺服器最初沒有安裝 IIS 角色,所以我添加了它。我第一次忘記選擇“Windows 身份驗證”,所以當我嘗試為我的應用程序打開 Windows 身份驗證時添加了這個角色服務。
  • 當我最初安裝 IIS 角色並導航到http://localhost預設應用程序池時,我會看到一條伺服器故障消息。將預設應用程序池切換為作為網路服務執行解決了這個問題。我現在想知道這是否意味著伺服器上存在可能導致我的身份驗證問題的其他問題。例如這個修補程序,雖然作為網路服務執行時不應該影響我。
  • 重新啟動伺服器並重新測試,以防萬一。沒運氣。
  • 創建了一個測試文件c:\inetpub\wwwroot\testwwwroot\test.html,僅在網站上設置 Windows 身份驗證並嘗試從工作站訪問它。相同的症狀。因此,這是一個適用於 wwwroot 以及其他文件夾的問題。
  • 讓每個人都完全控制該文件夾並重新測試,仍然無法訪問。
  • 授予最終使用者對該文件夾的完全控制權並重新測試,仍然無法訪問。
  • 從 IE 將站點放入受信任的站點(而不是 Intranet 區域)並重新測試,沒有運氣。已刪除,因此它再次成為 Intranet 區域。
  • 將 Intranet Zone 的 IE 設置更改為“使用使用者名和密碼自動登錄”,仍然無法訪問。
  • 刪除了 Negotiate 作為選項,因此它只會強制 NTLM,仍然無法訪問。
  • http://<ipaddress>/Myapp使用而不是伺服器名稱從工作站測試。提示輸入憑據(預期),但在輸入正確詳細資訊時提示 3 次,然後無法訪問。
  • 嘗試將網路服務添加為 IIS_IUSRS 組的成員(沒有特別的原因可能會有所幫助),仍然無法訪問。
  • 將預設應用程序池的標識從 NETWORK SERVICE 更改回 ApplicationPoolIdentity。從伺服器導航到http://localhost並收到伺服器錯誤。事件日誌中有以下消息:

錯誤:應用程序池 DefaultAppPool 已被禁用。Windows Process Activation Service (WAS) 在啟動工作程序為應用程序池提供服務時遇到故障。

警告:應用程序池 DefaultAppPool 的標識無效。為標識指定的使用者名或密碼可能不正確,或者使用者可能沒有批量登錄權限。如果沒有更正身份,應用程序池將在應用程序池收到第一個請求時被禁用。如果批處理登錄權限導致問題,則必須在授予權限後更改 IIS 配置儲存中的標識,然後 Windows Process Activation Service (WAS) 才能重試登錄。如果在處理應用程序池的第一個請求後身份仍然無效,則應用程序池將被禁用。數據欄位包含錯誤號。

警告:應用程序池 DefaultAppPool 已被禁用。Windows Process Activation Service (WAS) 未創建工作程序來為應用程序池提供服務,因為應用程序池標識無效。

  • 將身份設置回 NETWORK SERVICE 解決了上述問題。但我確實想知道這是否相關。
  • 我使用 F12 開發工具查看請求/響應標頭:伺服器正在發送WWW-Authenticate: Negotiate以及WWW-Authenticate: NTLM從工作站進行測試時。IE 沒有在請求標頭中發送任何與 WWW-Authenticate 相關的內容。當從伺服器上的 IE 進行相同的測試時(它確實正確地進行了身份驗證),響應標頭是WWW-Authenticate: Negotiate <then a long securitytoken like oRswGaADCg....>
  • 我已經將伺服器上的 applicationHost.config 文件與本地文件進行了比較,沒有發現任何明顯的問題。例如WindowsAuthenticationModule列出的,所以它不是這個問題

我很糾結這個…

任何關於我應該嘗試或查看以進一步排除故障的建議都非常感謝。

(也在這裡發佈在IIS 論壇上

問題解決了。客戶端在錯誤的 OU 中創建了電腦帳戶:它在電腦 OU 而不是伺服器中。可能這意味著它有一些 GPO 設置阻止了非管理員帳戶的訪問……或者類似的東西。

我將嘗試在修復之前和之後獲取 gpresult.exe 輸出,以確定究竟是什麼策略導致了這種情況。

對於任何解決類似問題的人,我推薦這篇博文。它並沒有為我解決問題,而是提到了用於研究 Kerberos 問題的各種有用的東西。

引用自:https://serverfault.com/questions/580086