我已经开发了一个MVC应用程序,并托管在服务器中。我使用服务帐户作为应用程序池标识,并仅在数据库上提供对该服务帐户的完全访问权限(SysAdmin)。以下是我在Web.config和编码中的配置。
Web.config:
<authentication mode="Windows" />
<identity impersonate="false"/>
在我的数据访问层中,我正在使用以下代码来获取Windows身份:
string windowsLogin = HttpContext.Current.User.Identity.Name.ToString();
现在我的问题是,当我访问应用程序时,它将使用应用程序池标识而不是Windows标识。
如果我在Web.config中将身份设置为impersonate =“true”,则可以获取Windows登录名,但是应用程序和数据库之间的通信是通过Windows登录名而不是应用程序池标识(服务帐户)进行的。
如何获得访问应用程序的用户而不是IIS APPPOOL用户的身份?
最佳答案
我的问题已通过以下设置解决。
创建了应用程序池并与服务帐户一样运行,并将其配置为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发布并运行它,它将起作用。