我已经开发了一个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发布并运行它,它将起作用。

09-15 20:03
查看更多