【发布时间】:2016-07-06 21:21:05
【问题描述】:
我有一个使用 ASP.NET Core RC2 在 MVC6 中构建的 Intranet 站点。我想获取访问 Intranet 站点的人的 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”。
我从旧版本的 ASP.NET 中找到了许多使用 HttpContext 的示例,我尝试将其注入到我的控制器中,但 userName 最终为 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 用户名传递到 Intranet 站点的正确方法是什么?
【问题讨论】:
-
您是否禁止匿名访问您的网站?
-
是的。我在
中使用以下内容禁用了它。 我已经用块更新了我的问题。 -
你注册了认证中间件吗?
-
您的网站是否有登录屏幕..?也做一个谷歌搜索有关于如何做到这一点的信息。这是一个免费的stackoverflow.com/questions/30701006/…
-
我已经在 Google 上广泛搜索了 @MethodMan,但不幸的是,大多数答案都是针对旧版本的 ASP.NET,而不是 Core。结果是大多数解决方案(包括您链接的解决方案)在 ASP.NET Core 中不起作用。既无法访问 System.Web.Current 路径,也没有 User.GetUserId() 方法。
标签: c# iis-7 asp.net-core asp.net-core-mvc .net-core-rc2