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

时间:2016-07-06 21:21:06

标签: c# iis-7 asp.net-core asp.net-core-mvc .net-core-rc2

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

因此,如果Jim访问内部网站点,我希望该站点接收" Domain \ Jim",如果Anne进入内部网站,我希望该站点接收" Domain \ Anne&# 34。

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

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

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

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

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

//Startup.cs
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

//HomeController.cs
public HomeController(IHttpContextAccessor _accessor)
{
    string userName = _accessor.HttpContext.User.Identity.Name;
}

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

4 个答案:

答案 0 :(得分:5)

对于在Intranet应用程序上使用Windows身份验证的任何其他人,只希望能够检索有关用户的信息,您可能会想到更简单。

在您的控制器中,此行将以DOMAIN \ username格式获取当前用户的用户名。

var userId = this.User.Identity.Name;

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

答案 1 :(得分:2)

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

我遵循了这个步骤,即使将核心网站部署到IIS,也能够获得Windows Authenticated登录用户。

这是代码段

在Startup.cs中(在ConfigureServices方法下)添加该行

services.AddHttpContextAccessor();

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

ServiceSecurityContext.Current?.PrimaryIdentity