我有 3 个带有 3 个数据库的 laravel 应用程序。应用程序 1 是用于身份验证的登录(注册和登录),并且仅连接到用户数据库。
应用程序 2 允许用户执行一些基本操作并连接到用户和 App2 数据库
应用程序 3 允许用户执行一些不同于应用程序 2 的其他操作,并连接到用户和 App3 数据库
现在我的问题是允许用户登录一次通过任何应用程序并自动登录到其他应用程序
更像是拥有一个适用于所有应用程序的 Google 帐户。
应用程序 1 将通过主 URL 访问
www.kokoka.com
Run Code Online (Sandbox Code Playgroud)
而其他人将通过
health.kokoka.com
school.kokoka.com
Run Code Online (Sandbox Code Playgroud)
我试过 https://github.com/awnali/SSO-laravel-5
我还更改了 session.php 中的域
'domain'=>'.domain.dev'
Run Code Online (Sandbox Code Playgroud)
一切都无济于事
您需要将会话文件设置为数据库,并且与会话相关的所有内容都应该相同。基本上 session.php 文件在两者之间应该是相同的,它们应该有一个共同的数据库,并且密钥和密码类型应该是相同的。
如果它们具有相同的域名(例如:server1.mydomain.com、server2.mydomain.com)但具有不同的主机名/子域名,那么只要您正确设置了域(例如 .mydomain.com),cookie 仍然可以正常工作)。如果它们在同一台服务器上,您仍然可以使用通用的键值系统。如果它们位于不同的服务器上,您需要一个公共存储位置(如 S3)或启用复制的键值系统(如 Redis 或 Memcached)。如果您需要复制其他数据类型,您也可以使用 MySQL,但对于仅键值对来说它非常繁重。
如果它们具有完全不同的域,则 cookie 将不起作用。在这种情况下,您需要通过 GET 查询字符串引用跨站点会话 ID,并在后端使用通用或复制系统或通过某些安全 API 执行会话迁移。这是一个非常难以设置的系统,并且仅当您使用站点中嵌入的链接在域之间移动时才有效。书签或手动地址输入会丢失会话数据。
另一种实现你所需要的方法是使用laravel 护照的新功能。
Laravel 已经让通过传统登录表单执行身份验证变得容易,但是 API 呢?API 通常使用令牌来验证用户,并且不在请求之间维护会话状态。Laravel 使用 Laravel Passport 使 API 身份验证变得轻而易举,它在几分钟内为您的 Laravel 应用程序提供完整的 OAuth2 服务器实现。Passport 建立在由 Alex Bilbie 维护的 League OAuth2 服务器之上。
这将允许您通过 API 跨多个域共享数据,以便您可以共享会话和用户信息。这是大多数人喜欢的方式。
归档时间: |
|
查看次数: |
3307 次 |
最近记录: |