在没有Identity Server的2个以上内部MVC Core 2应用程序之间共享凭据

时间:2018-01-29 15:22:05

标签: authentication asp.net-core-mvc asp.net-core-2.0 asp.net-core-mvc-2.0

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

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

1 个答案:

答案 0 :(得分:1)

这取决于一个主要问题:网站部署的域名是什么?基于会话的身份验证(网站使用的)取决于客户端上设置的cookie。重要的是,cookie是域绑定的。换句话说,cookie只能被共享"如果Cookie域设置为通配符,则位于同一域中的站点或同一域上的子域。

那就在那里定义了你的整个方法。如果您有abc.com/site1abc.com/site2甚至site1.abc.comsite2.abc.com之类的内容,则可以共享Cookie。但是,如果您正在处理abc.comxyz.com,那么您就会被解雇。

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

如果网站位于完全不同的域中,则无法共享身份验证Cookie 。期。完全停止。您唯一的选择就是Identity Server。