andcarpi/laravel-sso-server

一个让您的项目成为SSO服务器的Laravel包

dev-master 2019-11-21 14:33 UTC

This package is auto-updated.

Last update: 2024-09-22 00:51:11 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Scrutinizer Code Quality Build Status Code Intelligence Status

要求

  • Laravel 5.5+
  • PHP 7.1+

单词含义

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

它是如何工作的?

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

安装

服务器

使用composer安装此包。

$ composer require zefy/laravel-sso

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

$ php artisan vendor:publish --provider="andcarpi\LaravelSSOServer\SSOServiceProvider"

创建一个表来保存所有代理。

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

编辑您的app/Http/Kernel.php,通过从api中间件数组中删除throttle中间件并添加会话中间件来编辑。这是必要的,因为我们需要在API路由中使用会话,而throttle中间件可能会阻止我们需要的连接。

'api' => [
    'bindings',
    \Illuminate\Session\Middleware\StartSession::class,
],

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

$ php artisan sso:broker:create {name}

代理

使用composer安装此包。

$ composer require zefy/laravel-sso

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

$ php artisan vendor:publish --provider="andcarpi\LaravelSSOServer\SSOServiceProvider"

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

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

SSO_SERVER_URL=
SSO_BROKER_NAME=
SSO_BROKER_SECRET=

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

编辑您的app/Http/Kernel.php,将\andcarpi\LaravelSSOServer\Middleware\SSOAutoLogin::class中间件添加到web中间件组。它应该看起来像这样

protected $middlewareGroups = [
        'web' => [
            ...
            \andcarpi\LaravelSSOServer\Middleware\SSOAutoLogin::class,
        ],

        'api' => [
            ...
        ],
    ];

最后但并非最不重要的是,您需要编辑app/Http/Controllers/Auth/LoginController.php。您应该在LoginController类中添加两个函数,这些函数将通过SSO服务器而不是代理页面验证您的客户端。

protected function attemptLogin(Request $request)
{
    $broker = new \andcarpi\LaravelSSOServer\LaravelSSOBroker;
    
    $credentials = $this->credentials($request);
    return $broker->login($credentials[$this->username()], $credentials['password']);
}

public function logout(Request $request)
{
    $broker = new \andcarpi\LaravelSSOServer\LaravelSSOBroker;
    
    $broker->logout();
    
    $this->guard()->logout();
    
    $request->session()->invalidate();
    
    return redirect('/');
}

到此为止。对于其他代理页面,您应该从开始重复所有操作,只需在配置文件中更改您的代理名称和密钥即可。

示例.env选项

SSO_SERVER_URL=https://server.test
SSO_BROKER_NAME=site1
SSO_BROKER_SECRET=892asjdajsdksja74jh38kljk2929023