【发布时间】: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