acidwave/laravel-sso

为 Laravel 简单的 PHP SSO 集成

1.0.9 2023-11-29 15:07 UTC

This package is auto-updated.

Last update: 2024-09-29 16:53:07 UTC


README

要求

  • Laravel 9+
  • PHP 8.0+

词汇解释

  • SSO - 单点登录。
  • 服务器 - 作为 SSO 服务器工作的页面,处理认证,存储所有会话数据。
  • 代理 - 被客户端/用户访问的页面。
  • 客户端/用户 - 您的每一位访客。

它如何工作?

客户端访问代理,并生成一个唯一的令牌。当生成新令牌时,我们需要将客户端会话附加到代理中的会话,以便用户将被重定向到服务器,然后回到代理。此时,服务器中将会创建一个新的会话,并将其与代理页面中的客户端会话关联。当客户端访问其他代理时,将执行相同的步骤,除了当客户端被重定向到服务器时,他已使用其旧的会话和与代理 #1 关联的相同会话 ID。

安装

服务器

使用 composer 安装此包。

$ composer require acidwave/laravel-sso

将配置文件复制到 Laravel 项目的 config/ 文件夹。

$ php artisan vendor:publish --provider="AcidWave\LaravelSSO\SSOServiceProvider"

创建一个表,其中将保存所有代理。

$ php artisan migrate --path=vendor/acidwave/laravel-sso/database/migrations

编辑您的 app/Http/Kernel.php 文件,通过向 api 中间件数组中添加排队 cookies 中间件。这是必要的,因为我们需要在 API 路由中使用 cookies。

'api' => [
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

在您的 .env 文件中设置新选项

SSO_SESSION_DOMAIN=

现在您应该创建代理。您可以使用以下 Artisan CLI 命令创建新的代理

$ php artisan sso:broker:create {name}

代理

使用 composer 安装此包。

$ composer require acidwave/laravel-sso

将配置文件复制到 Laravel 项目的 config/ 文件夹。

$ php artisan vendor:publish --provider="AcidWave\LaravelSSO\SSOServiceProvider"

config/laravel-sso.php 文件中将 type 值从 server 更改为 broker

在您的 .env 文件中设置 4 个新选项

SSO_SERVER_URL=
SSO_BROKER_NAME=
SSO_BROKER_SECRET=
SSO_SESSION_DOMAIN=
SSO_TYPE=broker

SSO_SERVER_URL 是您的服务器 http url,不带尾部斜杠。SSO_BROKER_NAMESSO_BROKER_SECRET 必须是存在于您的服务器 brokers 表中的数据。

可选地设置您的服务器上认证用户名字段的列(默认为 'username').env 文件

SSO_USERNAME_FIELD=email

编辑您的 app/Http/Kernel.php 文件,通过添加 \AcidWave\LaravelSSO\Middleware\SsoAuthCheck::class 中间件到中间件。它应该看起来像这样

protected $middleware = [
        ...
        \AcidWave\LaravelSSO\Middleware\SsoAuthCheck::class,
    ];

这就完成了。对于其他代理页面,您应该从开始重复所有操作,只需更改配置文件中的代理名称和密钥即可。

示例 .env 选项

SSO_SERVER_URL=https://server.test
SSO_BROKER_NAME=site1
SSO_BROKER_SECRET=892asjdajsdksja74jh38kljk2929023
SSO_SESSION_DOMAIN=".server.test"
SSO_USERNAME_FIELD=email
SSO_TYPE=broker