在 2+ 个内部 MVC Core 2 应用程序之间共享凭据 w/o 身份服务器

Share credentials between 2+ internal MVC Core 2 apps w/o Identity Server

在 2+ ASP.Net 个 MVC 核心应用程序之间共享凭据的最佳方式是什么,这意味着用户可以登录一个应用程序并可以访问其他应用程序。这些应用程序适用于外部客户端,但将托管在同一台服务器上。我正在寻找最简单的解决方案,除非绝对必要,否则我不想实施 OAuth 服务器。我考虑了以下选项:

  1. 实施 Identity Server 4。对于我的用例来说,这似乎有点矫枉过正,看起来这是一项重大工作,并且可能需要比简单的 MS Core Identity 解决方案更多的时间来实施。
  2. 使用 MVC Core 2 MS 身份和共享两个数据库之间的身份验证数据库。这意味着为每个应用程序使用唯一的数据库,但使用单个数据库进行身份验证。
  3. 在应用程序之间共享身份验证 cookie(在同一域等)。
  4. 还有其他想法吗?

这取决于一件事:网站部署到哪些域?基于会话的身份验证(网站使用什么)取决于客户端上设置的 cookie。重要的是,cookie 是域绑定的。换句话说,如果 cookie 域设置为通配符,则 cookie 只能 "shared" 与同一域中的站点或同一域中的子域。

那里定义了您的整个方法。如果您有 abc.com/site1abc.com/site2 甚至 site1.abc.comsite2.abc.com 之类的东西,您可以共享 cookie。但是,如果您要处理 abc.comxyz.com,您会感到厌倦。

如果所有网站都在同一域(或同一域的子域)上,那么您需要确保所有网站都使用相同的数据保护设置。在以前的 ASP.NET 站点中,加密是通过 "machine key" 处理的,因此您只需确保共享计算机密钥即可。 ASP.NET Core 使用数据保护功能不同,但基本原则仍然存在。所有站点的所有设置都必须相同,因此它们基本上都以相同的方式加密和解密。由于身份验证 cookie 是加密的,因此共享该 cookie 是绝对需要的。谢天谢地,Microsoft has a guide for doing this.

如果站点位于完全不同的域中,无法共享身份验证 cookie。时期。句号。那么你唯一的选择就是像 Identity Server 这样的东西。