如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名?

Posted

技术标签:

【中文标题】如何从 MVC 应用程序发出的 WCF 服务调用中获取域\\用户名?【英文标题】:How do I fetch the domain\username from a WCF service call made from MVC application?如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名? 【发布时间】:2021-03-09 01:58:16 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以尝试使用 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 模拟。与第一种情况的唯一区别是,现在匿名来宾用户 IUSR_COMPUTER1 正在被模拟,因此 System.Environment 和 Security.Principle 正在使用该帐户的权限运行。

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

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

【讨论】:

以上是关于如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名?的主要内容,如果未能解决你的问题,请参考以下文章

从 MVC 项目调用 WCF 服务时出错

从 jQuery 调用启用 AJAX 的 WCF 服务 - MVC 2

MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据

如何向 sharepoint 2010 中托管的 wcf 服务发出经过身份验证的请求?

在 mvc 中使用 WCF 服务时出现问题

WCF , WPF,MVC,有啥不同