提问人:Justin 提问时间:6/21/2022 最后编辑:marc_sJustin 更新时间:10/20/2023 访问量:790
ASP.NET Core 6 : 获取 Windows 用户
ASP.NET Core 6 : get Windows user
问:
在 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 中的显示值
答:
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;
测试结果:
欲了解更多详情,请查看此链接。
如果您不需要使用 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 时,出现错误。你找到解决方案了吗?
评论