如何在 ASP.NET Core 3.0 中获取 windows 用户名

How to get windows usernaame in ASP.NET Core 3.0

我正在尝试在 ASP.NET Core 3.0

中获取 windows 用户名

我在这里发现了很多关于这个主题的问题,但我找不到任何我可以使用的答案。

我的应用程序使用登录密码身份验证,但很多用户(不是全部)都有自己的 windows 登录名,所以我想给他们机会通过 Windows 登录登录。

在本地主机上运行此代码:

string windowsUserName = Environment.UserDomainName + "\" + Environment.UserName;

但是当我将它部署到服务器时,我得到了这个用户名: IIS APPPOOL/DefaultAppPool

我尝试更改启动设置:

"iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,

至:

"iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,

但我只能通过 HttpContext.User.Identity.Name 获取 windows 登录名(我只在本地主机上尝试过),但我不想使用这种方法 - 我' m 在这里存储来自数据库的用户 ID,所以我不想重写它。

是否有任何机会在不使用每个人的 windows 登录的情况下获取所需的数据?

非常感谢您的建议。

确保您的 web.config 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore forwardWindowsAuthToken="true" processPath="C:\Program Files\dotnet\dotnet.exe" arguments=".\YourWebsite.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
  </system.webServer>
</configuration>

HomeController.cs 然后,您可以使用以下代码从控制器获取用户 Windows 用户名。

public IActionResult Index()
{
    string userName = HttpContext.User.Identity.Name;
    return View(userName);
}

更新:

您在 post 中提到的称为混合模式身份验证。您无法通过使用单个应用程序来实现此目的,您需要使用两个应用程序来实现您的要求。请参阅 this link 以了解更多详细信息,您如何实现这一目标。