zoparga / laravel-sso
Laravel的简单PHP单点登录集成
Requires
- php: ^7.4 | ^8.0
- guzzlehttp/guzzle: ^7.0.1
- laravel/framework: ^8.0 | ^9.0 | ^10.0
- zefy/php-simple-sso: ^1.0
This package is not auto-updated.
Last update: 2024-09-18 10:17:12 UTC
README
此包从https://github.com/zefy/laravel-sso fork,并进行了一些修改
此包基于Simple PHP SSO skeleton包,并适用于Laravel框架。
要求
- Laravel 8+
- PHP 7.4+
词汇意义
- SSO - 单点登录。
- 服务器 - 作为SSO服务器工作的页面,处理认证,存储所有会话数据。
- 代理 - 用户访问的页面。
- 客户端/用户 - 每位访问者。
它如何工作?
客户端访问代理,生成唯一的令牌。当生成新令牌时,我们需要将客户端会话附加到代理中的其会话,以便他将被重定向到服务器,然后再回到代理。此时,服务器中将创建一个新的会话,并将其与代理页面中的客户端会话关联。当客户端访问其他代理时,将执行相同的步骤,除了当客户端被重定向到服务器时,他已使用其旧会话和与代理#1关联的相同会话ID。
安装
服务器
使用composer安装此包。
$ composer require zoparga/laravel-sso
将配置文件复制到Laravel项目的config/文件夹。
$ php artisan vendor:publish --provider="Zefy\LaravelSSO\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, ],
protected $routeMiddleware = [ ... 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, ... ];
现在你应该创建代理。你可以使用以下Artisan CLI命令创建新的代理
$ php artisan sso:broker:create {name}
代理
使用composer安装此包。
$ composer require zoparga/laravel-sso
将配置文件复制到Laravel项目的config/文件夹。
$ php artisan vendor:publish --provider="Zefy\LaravelSSO\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_NAME和SSO_BROKER_SECRET必须是服务器brokers表中存在的数据。
编辑你的app/Http/Kernel.php,将\Zefy\LaravelSSO\Middleware\SSOAutoLogin::class中间件添加到web中间件组。它应该看起来像这样
protected $middlewareGroups = [ 'web' => [ ... \Zefy\LaravelSSO\Middleware\SSOAutoLogin::class, ], 'api' => [ ... ], ];
最后但同样重要的是,你需要编辑app/Http/Controllers/Auth/LoginController.php。你应该在LoginController类中添加两个函数,这些函数将通过SSO服务器而不是代理页面来认证你的客户端。
protected function attemptLogin(Request $request) { $broker = new \Zefy\LaravelSSO\LaravelSSOBroker; $credentials = $this->credentials($request); return $broker->login($credentials[$this->username()], $credentials['password']); } public function logout(Request $request) { $broker = new \Zefy\LaravelSSO\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