簡體   English   中英

如何使用 ASP.NET Core RC2 MVC6 和 IIS7 獲取當前的 Windows 用戶

[英]How to get the current Windows user with ASP.NET Core RC2 MVC6 and IIS7

我有一個使用 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;
}

將 Windows 用戶名傳遞到 ASP.NET Core RC2 MVC6 中的 Intranet 站點的正確方法是什么?

可能會幫助仍在尋找的人。 根據 MS https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-2.2 的文檔,在 ConfigureServices 方法(startup.cs)中添加 HttpContextAccessor 將此 httpcontextaccessor 傳遞到控制器並訪問登錄用戶。

我遵循了這一點,即使在將核心網站部署到 IIS 之后,我也能夠獲得登錄的 Windows 身份驗證用戶。

這是代碼片段

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

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 身份驗證的任何其他人來說,他們只是希望能夠檢索有關用戶的信息,這比您想象的要簡單。

在您的控制器中,這一行將以 DOMAIN\\username 形式獲取當前用戶的用戶名。

var userId = this.User.Identity.Name;

我花了一些時間查看其他答案,然后才意識到他們中的大多數人都認為我正在實施個人帳戶以針對 AD 進行身份驗證,而不是開箱即用的 Windows 身份驗證。

使用var userId = this.User.Identity.Name; 為我工作。 我的應用程序在 Intranet 上運行,我想要做的就是從 Windows 獲取用戶的登錄 ID。 我不需要存儲用戶信息,因為這些信息已經存儲在 Active Directory 中。

ServiceSecurityContext.Current?.PrimaryIdentity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM