我们希望托管 ASP.NET MVC 5 项目(.NET 4.8 框架),其中用户将通过他们的 Windows 登录自动进行身份验证。当用户通过浏览器调用托管项目时,浏览器不应提示用户登录。浏览器应该自动将登录数据传递给服务器端控制器。
关于此 article,集成 Windows 身份验证使用 Windows 客户端和服务器的安全功能。与 Basic 或 Digest 身份验证不同,最初它不会提示用户输入用户名和密码。
因此,集成 Windows 身份验证似乎是解决我们问题的正确方法。
MVC 5 项目在 web.config 文件中有以下条目:
<configuration>
[...]
<system.web>
[...]
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
</system.web>
以下是 IIS 中的身份验证设置:
通过以下代码可以在控制器中访问经过身份验证的用户数据:
public class HomeController : Controller
{
public ActionResult Index()
{
var lWindowsIdentity = Request.LogonUserIdentity;
[...]
}
}
问题:当我们通过绑定 http://192.168.178.41 在浏览器中访问站点时,我们期望用户自动登录,但会出现提示:
如何在没有提示的情况下使用windows身份验证登录asp.net MVC?
答案 0 :(得分:1)
检查页面是否在 Intranet 区域...如果不是,您可能需要通过配置/互联网选项/安全/本地 Intranet/网站使用服务器名称和/或 IP 地址将其专门添加到 Intranet 区域
>答案 1 :(得分:0)
您是否尝试过这张票 ASP.NET MVC intranet app with windows authentication, how to get the current domain user automatically? 的答案?
那个人的修复方法是转到 iis 中的身份验证菜单 -> 选择 Windows 身份验证 -> 在右侧窗格中单击提供程序 -> 调整以便只有 NTLM 位于可用提供程序列表中。协商似乎是强制登录提示的罪魁祸首。
答案 2 :(得分:0)
禁用“匿名身份验证”并确保“NTLM”位于“协商”上方作为 Windows 身份验证提供程序(在 IIS 中右键单击“Windows 身份验证”)
并且由于您禁用了“匿名身份验证”提供程序,因此您的 web.config 中不需要 <authorization>
部分。删除它。
最后测试它是否有效。
答案 3 :(得分:0)
我认为在 localhost 环境中的开发 Web 服务器上,它会跳过提示,但是当应用程序通过 IIS(生产)服务器运行时,它会提示用户对话框,这是非常正常的行为。当您启动本地 url(您的本地 ip)时,它会启动 IIS Web 服务器(非本地),该服务器会检查 Windows 身份验证并发出提示。
请参阅this