ASP.NET Core 6 : 获取 Windows 用户

ASP.NET Core 6 : get Windows user

提问人:Justin 提问时间:6/21/2022 最后编辑:marc_sJustin 更新时间:10/20/2023 访问量:790

问:

在 ASP.NET Core 6 MVC项目中,我遇到了一个简单的Windows域用户。在谷歌上,我看到很多人都有同样的问题,但很少有建议超过完整的身份验证系统。

我只是希望打开 Windows 身份验证并获得用户名,无需任何其他功能,然后只需在视图中显示一个名称。

过去,我使用过:

@User.Identity.Name

我有这个在我的:launchSettings.json

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

我确实还添加了此代码:Program.cs

app.UseAuthentication();
app.UseAuthorization();

有没有办法只获取 Windows 用户在 ASP.NET Core 6 中的显示值

asp.net-core-6.0

评论

0赞 mason 6/21/2022
您使用的是 IIS、IIS Express 还是 Kestrel?你看过文档吗?
0赞 Justin 6/21/2022
我确实查看了该文档,但希望我不需要实现完整的身份验证系统即可在视图中获取用户名,感谢您的链接

答:

1赞 Chen 6/21/2022 #1

在我看来,您应该进行身份验证才能获得,您需要启用Windows身份验证。UserName

程序.cs:

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
   .AddNegotiate();

builder.Services.AddAuthorization(options =>
{
    // By default, all incoming requests will be authorized according to the default policy.
    options.FallbackPolicy = options.DefaultPolicy;
});

builder.Services.AddHttpContextAccessor();
app.UseAuthentication();
app.UseAuthorization();

launchSettings.json:

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

控制器:

string UserName = HttpContext.User.Identity.Name;

测试结果:

enter image description here

欲了解更多详情,请查看此链接

如果您不需要使用 Windows 身份验证自动登录用户,并且您已经有一个自定义登录控制器来执行此操作,您可以参考内容。

评论

0赞 Justin 6/21/2022
非常感谢你。在寻求帮助之前,我确实尝试了您添加的链接。我添加到我的控制器中:string userName = HttpContext.User.Identity.Name;字符串 userNameAuth = (HttpContext.User.Identity.IsAuthenticated)。ToString();但两者似乎都是 null 值。我确定我做了一些不正确的事情,但不确定那里是什么。我正在考虑将上述内容添加到我的项目中,NegotiateDefaults 显示为红色。我想我需要设置它?我正在研究这个值是什么,谢谢你的方向。
0赞 Justin 6/21/2022
我添加了 NuGet 包,您的解决方案成功了。我可以用 HttpContext.User.Identity.Name 捕获用户 谢谢你的帮助
0赞 Justin 6/21/2022
上述方法在本地运行良好,但是当我推送到Azure时,我收到错误,“协商身份验证处理程序不能在直接支持Windows身份验证的服务器上使用。为服务器启用 Windows 身份验证,协商身份验证处理程序将遵循它。你以前见过这个吗?
0赞 Hossein 7/24/2023
我有同样的问题。当我发布到 Azure 时,出现错误。你找到解决方案了吗?