多个laravel应用程序的单一认证

时间:2017-12-27 22:08:37

标签: laravel laravel-5

我有3个laravel应用程序,有3个数据库。 应用程序1是登录身份验证(注册和登录),仅连接到用户数据库。

应用程序2允许用户执行一些基本操作,并连接到用户和App2数据库

应用程序3允许用户执行与应用程序2不同的其他操作,并连接到用户和App3数据库

现在我的问题是允许用户looggin通过任何应用程序并自动登录到其他应用程序

更像是拥有适用于所有应用的单个Google帐户。

应用程序1将通过主URL访问

  www.kokoka.com

而其他人将通过

访问
  health.kokoka.com
  school.kokoka.com

我试过了 https://github.com/awnali/SSO-laravel-5

我还更改了session.php中的域

  'domain'=>'.domain.dev'

一切都无济于事

1 个答案:

答案 0 :(得分:1)

您需要将会话文件设置为数据库,与会话相关的所有内容都应相同。基本上session.php文件应该在两者之间相同,它们应该有一个公共数据库,密钥和密码类型应该是相同的。

如果他们拥有相同的域名(例如:server1.mydomain.com,server2.mydomain.com)但不同的主机名/子域名,那么只要您正确设置域,cookie就仍然可以正常工作(例如, mydomain.com)。如果它们位于同一服务器上,您仍然可以使用通用键值系统。如果它们位于不同的服务器上,则需要一个公共存储位置(如S3)或启用复制的键值系统(如Redis或Memcached)。如果你需要复制其他数据类型,你也可以使用MySQL,但它对于键值对非常重。

如果他们有完全不同的域名,那么Cookie将无效。在这种情况下,您需要通过GET查询字符串引用跨站点会话ID,并使用通用或复制系统或通过某些安全API在后端执行会话迁移。这是一个非常难以设置的系统,只有在使用站点中嵌入的链接在域之间移动时才有效。书签或手动地址输入将丢失会话数据。

完成所需内容的另一种方法是使用laravel passport的新功能。

  

Laravel已经可以通过传统的登录表单轻松执行身份验证,但API呢? API通常使用令牌来对用户进行身份验证,并且不会在请求之间维护会话状态。 Laravel使用Laravel Passport轻松实现API身份验证,Laravel Passport可在几分钟内为您的Laravel应用程序提供完整的OAuth2服务器实现。 Passport建立在由Alex Bilbie维护的League OAuth2服务器之上。

这样,您就可以通过API在多个域之间共享数据,以便共享会话和用户信息。这是大多数人喜欢的方式。