在公共域上自动进行Windows身份验证?

时间:2019-03-28 10:48:39

标签: c# asp.net-core asp.net-core-mvc windows-authentication asp.net-core-2.2

我正在开发Asp.NET Core Web应用程序,并按照官方的Microsoft指南在其上启用了Windows身份验证:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.2&tabs=visual-studio

身份验证有效,但是有一件事我不清楚。如果我使用Windows域中的计算机通过浏览器访问该网站,则根据访问方式,我有两种不同的行为:

  • 如果我使用地址中的计算机名称进行访问(例如:https://devmachine01/),浏览器将自动登录并进行身份验证,而无需用户执行任何操作
  • 如果我使用机器的公共域名(例如:https://mypublicwebsite.com)访问,浏览器会要求我输入Windows凭据,如下图所示: enter image description here

我现在的问题是:

  1. 有没有一种方法可以使浏览器自动登录,即使我 使用公共域而不是计算机名称访问? (很明显,我只希望这台机器能够自动运行 运行浏览器的位置已登录到域)
  2. 如果 第一个问题的答案为否,我至少可以配置我的 Asp.NET Core Web应用程序使它能够记住用户,因此 用户只需要登录一次(使用cookie或类似机制)? 根据文章中提供的说明,我在 用户每次关闭时都必须重新输入其凭据,并且 重新打开浏览器,这不是最方便。

1 个答案:

答案 0 :(得分:1)

Windows身份验证是一种允许自动登录的身份验证方案,它基于属于同一域的所有内容:身份提供者(AD),Web服务器和客户端(本地计算机)。根据定义,公共网站不是域的一部分,因此Windows Auth(或至少其自动登录功能)在这种环境中无法运行。

总体上,您仍然可以在技术上使用Windows Auth或AD。例如,Azure Active Directory旨在在分布式环境中工作。但是,您必须手动进行身份验证(通过传统的用户名和密码或通过OAuth流)。您无法使用公共网站自动登录。

编辑

对不起,我最初没有充分了解您的问题。虽然它不会改变我的答案,但确实需要更多说明。从技术上讲,这台机器在域上,它的朝外立面是 not 。这就是为什么可以通过主机名访问它,但不能通过实际的Web域访问它的原因。就是说,您绝对是将域中的计算机暴露于整个Internet的“疯狂”。即使您可以起作用,打开的漏洞的安全风险也远远超出了自动登录等简单功能。您的内部网络应该是内部,并且应该立即从域 中删除此计算机。