IIS模拟返回应用程序池用户服务帐户

问题描述:

我开发了一个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身份验证,只需删除模拟。 –

我的问题通过以下设置得到解决。

创建应用程序池并将其与服务帐户一起运行,并将其配置为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发布并运行它,它将起作用。