2013-12-16 111 views
4

我開發了一個MVC應用程序並託管在服務器中。我使用服務帳戶作爲應用程序池標識,並且僅向該服務帳戶提供數據庫的完全訪問權限(系統管理員)。以下是我在Web.config &編碼中的配置。

Web.config文件:IIS模擬返回應用程序池用戶服務帳戶

<authentication mode="Windows" /> 
<identity impersonate="false"/> 

在我的數據訪問層我用下面的編碼,以獲得Windows身份:

string windowsLogin = HttpContext.Current.User.Identity.Name.ToString(); 

現在我的問題是,當我訪問我的應用程序是正在採取應用程序池身份而不是Windows身份。

如果我在Web.config中將身份設置爲impersonate =「true」我能夠獲得Windows登錄,但應用程序和數據庫之間的通信發生在我的Windows登錄中,而不是應用程序池標識(服務帳戶)。

如何獲取訪問應用程序的用戶的身份而不是IIS APPPOOL用戶的身份?

+1

目前還不清楚你在這裏試圖達到什麼樣的模仿和身份。身份模仿控制IIS工作進程運行時的身份。這通常不是大多數人想要的。他們只是希望HttpContext.Current.User.Identity是正確的。你真的希望工作進程作爲當前用戶運行嗎? –

+1

這基本上是內聯網應用程序,我不想明確提供數據庫訪問給每個用戶,所以我創建了一個服務帳戶,並提供了完整的權限。當用戶點擊我的應用程序時,它應該使用他的Windows登錄名並顯示在我的用戶界面上,並且所有CURD操作應該只使用服務帳戶進行。 – Rajender

+1

然後你不想冒充他人。相反,請在應用程序池屬性中指定您的應用程序用戶名。儘管保持Windows身份驗證,只需刪除模擬。 –

回答

2

我的問題通過以下設置得到解決。

創建應用程序池並將其與服務帳戶一起運行,並將其配置爲IIS中的網站。

在我的代碼文件:

string windowsLogin = HttpContext.Current.Request.ServerVariables["LOGON_USER"].ToString(); 

在Web.config文件:

<authentication mode="Windows">  
</authentication> 
<authorization> 
    <deny users="?" /> 

</authorization> 
<identity impersonate="false" /> 

注意:如果從Visual Studio IDE中運行它會給你一個錯誤。如果您從IIS發佈並運行它,它將起作用。

相關問題