如何获取当前使用 ASP.NET Core RC2 MVC6和IIS7的Windows用户

本文关键字:MVC6 RC2 Core NET IIS7 用户 Windows ASP 何获取 获取 | 更新日期: 2023-09-27 17:55:21

我有一个使用 Core RC2 在 MVC6 中构建 ASP.NET 内部网站。 我想获取访问内部网站的人员的 Windows 用户名。

因此,如果 Jim 转到 Intranet 站点,我希望该站点接收"Domain

''Jim",而如果 Anne 转到 Intranet 站点,我希望该站点接收"Domain''Anne"。

在我的 IIS 服务器上仅启用了 Windows 身份验证,禁用了匿名身份验证。

"我的网站"设置为使用 Windows 身份验证并禁用匿名身份验证。

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <deny users="?"/>
    </authorization>
</system.web>

通过调试,我可以使用System.Security.Principal.WindowsIdentity.GetCurrent().Name,但这当然会在IIS服务器上返回"IIS APPPOOL''SiteName"。

我从使用 HttpContext 的旧版本的 ASP.NET 中找到了许多示例,我尝试使用以下方法将其注入我的控制器,但用户名最终为 null。

//Startup.cs
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//HomeController.cs
public HomeController(IHttpContextAccessor _accessor)
{
    string userName = _accessor.HttpContext.User.Identity.Name;
}

在 ASP.NET Core RC2 MVC6 中将 Windows 用户名传递到内部站点的正确方法是什么?

如何获取当前使用 ASP.NET Core RC2 MVC6和IIS7的Windows用户

可能会帮助仍在寻找的人。根据 MS https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-2.2 的文档,在 ConfigureServices 方法中添加 HttpContextAccessor(启动.cs)将此 httpcontextaccessor 传递到控制器并访问登录用户。

我遵循了这一点,即使在将核心网站部署到 IIS 之后,我也能够获得登录的 Windows 身份验证用户。

以下是代码片段

在"启动"中.cs(在"配置服务方法"下)添加行

services.AddHttpContextAccessor();

然后在控制器文件中,添加以下必要的代码行。下面的代码是一个示例。

public class YourController : Controller
{
  private readonly IHttpContextAccessor _httpContextAccessor;
  private readonly string _user;
  public YourController(IHttpContextAccessor httpContextAccessor)
  {
    _httpContextAccessor = httpContextAccessor;
    _user = _httpContextAccessor.HttpContext.User.Identity.Name;
  }
}

对于在 Intranet 应用上使用 Windows 身份验证的任何其他人(他们只是希望能够检索有关用户的信息),这可能比你认为的更简单。

在控制器中,此行将以域''用户名形式获取当前用户的用户名。

var userId = this.User.Identity.Name;

花了一些时间浏览其他答案,然后才意识到他们中的大多数都认为我正在实现针对 AD 进行身份验证的个人帐户,而不是开箱即用的 Windows 身份验证。

使用var userId = this.User.Identity.Name;对我有用。 我的应用程序在内部网上运行,我所要做的就是从Windows获取用户的登录ID。 我不需要存储用户的信息,因为它已经存储在Active Directory中。 

ServiceSecurityContext.Current?.主要身份