如何从 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 服务调用中获取域\用户名?的主要内容,如果未能解决你的问题,请参考以下文章
从 jQuery 调用启用 AJAX 的 WCF 服务 - MVC 2
MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据