用户在没有提示的情况下使用 Windows 身份验证在 asp.net MVC 中登录

时间:2021-06-10 07:22:51

标签: asp.net-mvc iis asp.net-mvc-5 kerberos windows-authentication

我们希望托管 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 中的身份验证设置:

authentication settings iis - Windows Authentication

通过以下代码可以在控制器中访问经过身份验证的用户数据:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var lWindowsIdentity = Request.LogonUserIdentity;

        [...]
    }
}

问题:当我们通过绑定 http://192.168.178.41 在浏览器中访问站点时,我们期望用户自动登录,但会出现提示:

enter image description here

如何在没有提示的情况下使用windows身份验证登录asp.net MVC?

4 个答案:

答案 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