【问题标题】:IIS impersonation returns app pool user Service accountIIS 模拟返回应用程序池用户服务帐户
【发布时间】:2013-12-16 15:13:47
【问题描述】:

我开发了一个 MVC 应用程序并托管在服务器中。我使用服务帐户作为应用程序池身份,并仅提供对该服务帐户的数据库的完全访问权限(SysAdmin)。以下是我在 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 用户的身份?

【问题讨论】:

  • 目前还不清楚您想在这里实现什么样的模仿和身份。 identity impersonate 控制 IIS 工作进程运行的身份。这通常不是大多数人想要的。他们只是希望 HttpContext.Current.User.Identity 是正确的。您真的希望工作进程以当前用户身份运行吗?
  • 它基本上是 Intranet 应用程序,我不想明确地为每个用户提供数据库访问权限,因此我创建了一个服务帐户并为此提供了完全权限。当用户点击我的应用程序时,它应该使用他的 Windows 登录名并显示在我的 UI 上,并且所有 CURD 操作都应该只使用服务帐户进行。
  • 那你就不想模仿了。相反,请在应用程序池属性中指定您的应用程序用户名。保留 Windows 身份验证,只需删除模拟。
  • 是的,我也这样做了。我将 web.config 更新为 但仍然遇到同样的问题。
  • 您要确保正在进行身份验证。检查 IsAuthenticated 值以确保。

标签: asp.net-mvc-4


【解决方案1】:

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

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

【讨论】:

  • “使用服务帐户运行”,你是什么意思?谢谢
猜你喜欢
  • 2013-03-20
  • 2014-10-01
  • 1970-01-01
  • 2010-11-30
  • 2012-07-03
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多