【问题标题】:Single Authentication for multiple laravel Application多个 laravel 应用程序的单一身份验证
【发布时间】:2019-11-04 20:59:00
【问题描述】:

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

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

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

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

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

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

  www.kokoka.com

而其他人将通过

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

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

我还更改了 session.php 中的域

  'domain'=>'.domain.dev'

无济于事

【问题讨论】:

  • 是的,单点登录服务绝对是您所需要的。
  • 您使用的是什么会话驱动程序?是否有会话存储在同一个地方?
  • 'driver' => env('SESSION_DRIVER', 'file'),它仍然是默认驱动程序(文件)我必须更改这是所有应用程序@Ben
  • 应该把session存放在同一个地方,比如数据库,redis等。file如果他们的应用有不同的存放位置,session drive就不起作用
  • @Ben 我该怎么做

标签: laravel laravel-5


【解决方案1】:

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

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

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

另一种实现您需要的方法是使用laravel passport 的新功能。

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

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

【讨论】:

    猜你喜欢
    • 2020-04-13
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多