如何获取当前使用 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 用户名传递到内部站点的正确方法是什么?
可能会帮助仍在寻找的人。根据 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?.主要身份