當整合 Windows 驗證開啟時,ASP(經典)在哪個帳戶下運行?

當整合 Windows 驗證開啟時,ASP(經典)在哪個帳戶下運行?

我有一個 ASP 文件,它試圖向在同一虛擬目錄下的同一台伺服器上執行的 ASP.NET Web 服務發出 Web 服務請求。在 IIS 中,虛擬目錄設定為停用匿名訪問,並開啟「整合 Windows 驗證」。

所以問題是,當使用者的電腦請求運行 ASP 頁面,甚至手動執行 WebService.asmx .NET 檔案時,它會起作用,因為使用者的憑證被傳遞,但是當 ASP 檔案嘗試呼叫 Web 服務時,我們會得到一個401.2 - 未經授權:由於伺服器配置原因,存取被拒絕。

例如:

  • 使用者電腦上的瀏覽器中的「DIRECTORY\user1」請求 Service.asmx,該服務運作正常。
  • 使用者電腦上的瀏覽器中的「DIRECTORY\user1」請求 File1.asp,運作正常。
  • _________ 從伺服器上的 File1.asp 中請求 Service.asmx,傳回 401.2

所以我假設我需要在 WebService.asmx 上設定 NTFS 權限以允許 ASP 帳戶讀取和執行權限,但我不知道它在哪個帳戶下運行,並且在閱讀了一些回復後進一步思考,似乎我們未達到NTFS 級別,IIS 完全拒絕該請求,因為匿名存取已關閉。

這是否表示我們需要讓 ASP 進程在網域帳戶下運行?

答案1

經典 ASP 運行時會模擬 HTTP 會話中透過伺服器驗證的使用者。您需要向進行身份驗證的使用者授予運行經典 ASP 應用程式的權限或允許匿名存取。

如果您已經嘗試過「經過身份驗證的使用者」並且它不起作用,那麼我會說您沒有遇到檔案權限問題。

當您說「...ASP 檔案嘗試呼叫 Web 服務...」時,您的意思是什麼?您是說 ASP 腳本正在向伺服器發出 HTTP 請求嗎?如果是這樣,使用者的憑證將不會在該請求中傳遞,因為「整合 Windows 驗證」不會為伺服器提供明文密碼以在向其他伺服器(或其本身)進行驗證時使用。

編輯:

那麼,根據您的評論,如上所述,伺服器將沒有用於對使用者進行身份驗證的憑證,因為整合Windows 驗證不會為伺服器提供明文密碼來傳遞給其他伺服器(或本身,在本例中是另一台伺服器) )。

您可以嘗試三件事:

  • 如果您可以讓 WebService.asmx 允許匿名訪問,您的伺服器到自身的 HTTP 呼叫應該可以工作(您需要透過允許 IUSR_xxx 讀取檔案來明確允許匿名存取)透過 IIS 管理控制台管理單元修改檔案本身上「匿名存取」的「匿名存取和驗證控制」設置,因為該檔案將繼承啟用的「整合 Windows 驗證」和停用的「匿名存取」設定它所在的目錄)。

  • 如果您用來取得 HTTP 請求的控制項支援透明地向遠端伺服器提供登入使用者的憑證,您可以在經典 ASP 腳本上啟用「基本驗證」(這確實為伺服器提供了一個要傳遞的明文密碼)到其他伺服器),以便您的HTTP 請求控制項可以在請求WebService.asmx 期間傳遞該明文密碼。此時,您需要在存取經典 ASP 腳本時要求 SSL,以防止明文密碼無法透過網路傳輸。

  • 最後,您可以在經典 ASP 腳本中硬編碼一些基本驗證憑證,並在 WebService.asmx 檔案上啟用基本驗證。這意味著 WebService.asmx 將始終看到來自相同使用者的存取。

這些都不是很好的解決方案。當嘗試以經過身份驗證以執行經典 ASP 腳本的使用者身分向後端層(資料庫等)進行身份驗證時,您遇到了我們在「經典 ASP」中看到的「經典」問題。

答案2

如果整合式驗證已開啟且使用者使用的瀏覽器將執行 Windows 整合式驗證使用者以轉換為 Web 伺服器的帳戶身分登入(例如,用戶端電腦與 Web 伺服器位於同一網域中),您的腳本將作為該使用者的帳戶執行。

如果上述任何一項為 false(因此伺服器無法與用戶端瀏覽器同意使用者帳戶),則預設會使用您設定為匿名使用者的任何內容,IUSR_<machine>或如果停用匿名瀏覽,則使用者將收到401.*錯誤。

這假設其他認證意見均已關閉。我不確定如果您同時啟用 Windows 整合式身分驗證方案和基本驗證方案,優先順序是什麼。

您可以透過放入查詢 reqeust.servervariables 集合並輸出相關值的腳本來查看 Web 伺服器目前用於向特定區域發出請求的使用者 - 使用者名稱就在其中。

答案3

看起來您正在嘗試進行“雙跳”身份驗證。通常,這發生在後端 SQL 服務的上下文中,但我認為它可能適用於在同一台伺服器上運行的單獨服務(儘管我無法 100% 確定)。在 MSKB 中搜尋該術語“雙跳”,您將獲得一些文檔,解釋如何設定委派以使其發揮作用。首先從這裡開始,http://support.microsoft.com/kb/326985

您需要將 IIS 伺服器設定為「允許委派」。當使用者透過 Windows 整合式驗證進行驗證時,他們應該獲得 Kerberos 票證(如果您獲得 NTLM 驗證,這將不起作用)。

為了進行委派,您需要將 SPN 新增到伺服器。確保使用者使用伺服器在 AD 中具有 SPN 的實際 FQDN 存取網頁。使用者 Kerberos 代理程式將使用服務主體名稱 (SPN) 建立正確的 Kerberos 票證,這將允許 IIS 伺服器在將請求移交給下一個服務時模擬使用者。

答案4

Web 服務使用登入使用者的憑證很重要嗎?如果您使用 MSXML2.ServerXMLHTTPRequest 之類的東西來呼叫 Web 服務,您是否可以簡單地在 .Open 方法中提供憑證來向 Web 服務提供一組固定的憑證?

相關內容