c# - 如何从 MVC 应用程序进行的 WCF 服务调用中获取域\用户名?
问题描述
我有一个托管在 IIS 上的 ASP.NET 服务,该服务使用服务帐户运行应用程序池。我需要从 MVC 控制器获取调用服务的用户的用户名和域。如何获取所需的详细信息?详细信息需要在服务中获取,而不是从 MVC 应用程序发送。我试过使用 WindowsIdentity.GetCurrent().Name 但它给了我服务帐户的详细信息。
解决方案
您可以尝试使用 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 工作进程将共享该用户的权限。
推荐阅读
- javascript - 有没有办法为 HTML 输入范围类型添加数千个分隔符?
- amazon-web-services - 在 Amazon EC2 上运行的 Tomcat 在 AWS 之外无法访问
- javascript - If/Else 选中了两个复选框 - Javascript
- r - 将最后 10 行的斜率和累积和作为列添加到表中
- html - 为什么在绝对位置/固定位置的元素上设置 50vw 或 50% 不能将其完全设置在中间?
- c# - Excel 加载项:如何以编程方式取消选择区域?
- mirth - 如何在当地与欢乐一起工作
- opencv - OpenCv,分解和重新组合一个投影矩阵
- android - 如何从(前台服务)通知启动主应用程序?
- android - 添加核心 ktx 后 Gradle 构建失败