【问题标题】:Automatic Windows Authentication on public domain?公共域上的自动 Windows 身份验证?
【发布时间】:2019-03-28 10:48:38
【问题描述】:

我正在开发一个 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 凭据,如下图所示:

此时我的问题是:

  1. 有没有办法让浏览器自动登录,即使我 使用公共域而不是机器名访问? (显然,我只希望机器自动工作 浏览器运行所在的域已登录)
  2. 如果 第一个问题的答案是否定的,我至少可以配置我的 Asp.NET Core Web 应用程序,以便它记住用户,所以 用户只需登录一次(使用 cookie 或类似机制)? 根据我在上面链接的文章中提供的说明 用户每次关闭时都必须重新输入他的凭据,并且 重新打开浏览器,这不是最方便的。

【问题讨论】:

  • 通常服务器必须相信它是本地/受信任的部分
  • @BugFinder:对不起,你能扩展一下吗?原谅我,但我是这种身份验证方法的新手,我不确定你在说什么......你是说这取决于服务器的配置方式吗?你是指机器还是我的网络应用?
  • 它的浏览器设置不是别的。

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


【解决方案1】:

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

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

编辑

抱歉,我最初没有仔细阅读您的问题。虽然它不会改变我的答案,但它确实需要更多解释。虽然机器在技术上属于域,但它的外向立面不是。这就是为什么通过主机名访问它可以工作,但通过实际的网络域却不能。也就是说,您绝对疯狂将您域中的计算机暴露在整个互联网上。即使你可以让它工作,你打开的漏洞的安全风险也远远超过了自动登录等简单的细节。您的内部网络应该是internal,并且您应该立即从域中删除这台机器。

【讨论】:

  • 感谢您的回复,内容非常丰富。该机器尚未曝光,我们仍在为此评估最佳解决方案。在您发出警告后,我认为我们可能会选择只有内部网络中的机器(通过 VPN 物理或虚拟)才能访问服务器的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 2016-01-26
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多