Asp.net

為什麼 IIS 中的 Windows/集成身份驗證不將使用者憑據傳遞給 SSRS 和 SQL?

  • November 23, 2012

問題:在 ASP.NET 4.0 中,我使用 SSRS 2005 伺服器的ReportService2005.asmxWeb 服務來獲取報告列表。同樣在 .NET 中,我使用 Entity Framework 與我的 MS-SQL 2005 數據庫進行通信。當我使用 Visual Studio Development Server 作為我的 Web 伺服器時,對 SSRS 和 SQL 的呼叫工作正常。但是當我切換到 IIS 5.1 時,SSRS 和實體程式碼都會產生錯誤。我在 IIS 中使用Windows/集成身份驗證。

錯誤:對於 SSRS,我得到The request failed with HTTP status 401: Unauthorized.

對於實體框架,我得到Login failed for user ''. The user is not associated with a trusted SQL Server connection.

嘗試的解決方案:在我添加的 Web.Config<identity impersonate="true" />中,修復了實體框架錯誤,但沒有修復 SSRS 錯誤。我擴展了identity引用以包括我的使用者名和密碼,並修復了所有錯誤。

問題:為什麼指定我的使用者名和密碼可以修復錯誤,為什麼 SQL 說我沒有指定使用者名 ( '')?我認為 Windows 身份驗證會自動模擬目前使用者。如何在不將“服務”帳戶硬編碼到 web.config 中的情況下解決此問題?

Windows 或集成身份驗證意味著使用 Windows 憑據(或令牌)辨識使用者,但並不意味著請求在該使用者下執行。ASP.NET 執行時將在工作程序(應用程序池)身份下執行請求,除非您將其配置為模擬其他身份。

因此,當您使用開發伺服器訪問站點時,伺服器正在您的身份下執行,因此對 SSRS 和 Sql Server 的訪問是在您的身份下完成的,並且可以正常工作。

當您在 IIS 下載入站點時,ASP.NET 請求將在為應用程序池配置的任何標識下執行。通常,此身份是本地使用者,因此對 SSRS 或 Sql Server 等網路資源的訪問將被拒絕。添加<identity impersonate="true" username="your name" ../>,ASP.NET 將以您的身份執行請求,這應該適用於 SSRS 和 Sql Server。

這里奇怪的情況是<identity impersonate="true" />- 在此設置下,ASP.NET 將模擬目前經過身份驗證的 Windows 身份。但是,為了使其正常工作,您已在集成身份驗證上配置 IIS 和 ASP.NET,並拒絕匿名訪問(在 ASP.NET 和 IIS 中)。不這樣做可能會導致無法驗證目前使用者的身份,並且請求將以匿名使用者的身份執行(如 IIS 中配置的那樣)。如果您在 IIS 中而不是在 ASP.NET 中標記了集成身份驗證,則身份將不會傳遞給 ASP.NET 請求。您需要檢查您的環境以查看您所面臨的確切情況,但最終結果是您的 ASP.NET 請求在可以訪問 SQL Server 但不能訪問 SSRS 的憑據下執行。

引用自:https://stackoverflow.com/questions/7439525