首页 > 解决方案 > 如何从 MVC 应用程序进行的 WCF 服务调用中获取域\用户名?

问题描述

我有一个托管在 IIS 上的 ASP.NET 服务,该服务使用服务帐户运行应用程序池。我需要从 MVC 控制器获取调用服务的用户的用户名和域。如何获取所需的详细信息?详细信息需要在服务中获取,而不是从 MVC 应用程序发送。我试过使用 WindowsIdentity.GetCurrent().Name 但它给了我服务帐户的详细信息。

标签: c#asp.netasp.net-mvcwcfservice

解决方案


您可以尝试使用 HttpContext.Current.User.Identity.Name 并且需要在 IIS 中启用 windows 身份验证:

HttpContext.Current.User.Identity.Name

在 ASP.NET 中获取用户用户名:

场景 1:IIS 中的匿名身份验证关闭模拟:

在此处输入图像描述

如您所见,我们使用匿名身份验证运行的位置 HttpContext.Current.Request.LogonUserIdentity 是在 IIS 中定义的匿名来宾用户(本示例中为 IUSR_COMPUTER1),并且由于用户未经过身份验证,因此 WindowsIdentity 设置为正在运行的进程的身份(ASPNET),并且未设置 HttpContext.Current.User.Identity。

场景 2:IIS 中的 Windows 身份验证,模拟关闭:

在此处输入图像描述

然而,使用 Windows 身份验证使远程用户能够通过其域帐户自动进行身份验证(即 IsAuthenticated 为真),因此 HttpContext.Current.Request 用户设置为远程客户端用户帐户的用户帐户,包括 Identity 对象。

场景 3:IIS 中的匿名身份验证,模拟:

在此处输入图像描述

这次我们使用匿名身份验证,但现在在 web.config 中打开了 ASP.net Impersonation。与第一种情况的唯一区别是,现在匿名来宾用户 IUSR_COMPUTER1 正在被模拟,因此 System.Environment 和 Security.Principle 正在使用该帐户的权限运行。

场景 4:IIS 中的 Windows 身份验证,模拟:

在此处输入图像描述

现在,所有的 Windows 身份验证和模拟都作为我们调用用户的域帐户运行。这意味着 ASP.net 工作进程将共享该用户的权限。


推荐阅读