novay / sso-client
Laravel的SSO集成
Requires
- php: >=7.1.3
- zefy/php-simple-sso: ^1.0
README
此包基于Simple PHP SSO骨架开发,专门为Laravel框架运行和使用而设计。
技术单点登录(简称SSO)是一种允许网络用户使用单个用户账户访问网络中应用程序的技术。这项技术特别受到大型和异构网络的欢迎(在系统操作和计算机使用的应用程序来自多个供应商,并且用户需要在要访问的不同平台上填写个人信息的情况下)。使用SSO后,用户只需要进行一次身份验证,即可获得访问网络中所有服务的权限。
需求
- Laravel 5.5+
- PHP 7.1+
如何工作?
客户端访问代理并生成唯一令牌。当生成新令牌时,我们需要将客户端会话附加到代理中的会话,这样客户端将被重定向到服务器并返回代理。此时,服务器将创建新的会话,并将其与代理页面中的客户端会话关联。当客户端访问其他代理时,将执行相同的步骤,除了当客户端被重定向到服务器时,他已经使用了旧的会话和与代理#1关联的相同会话ID。
安装
1. 安装包
使用composer安装此包。
$ composer require novay/sso-client
此包将自动将服务提供者注册到您的应用程序中。
2. 发布供应商
运行以下命令将config sso.php
文件复制到您的项目中的config/
文件夹
$ php artisan vendor:publish --provider="Novay\SSO\Providers\SSOServiceProvider"
以下是被复制的配置文件的默认内容
//config/sso.php return [ 'name' => 'Single Sign On - Broker (Client)', 'version' => '1.0.5', /* |-------------------------------------------------------------------------- | Redirect to ??? |-------------------------------------------------------------------------- | Arahkan kemana Anda akan tuju setelah login berhasil | */ 'redirect_to' => '/home', /* |-------------------------------------------------------------------------- | Konfigurasi auth.php |-------------------------------------------------------------------------- | Pilih guard auth default yang dipakai | */ 'guard' => 'web', /* |-------------------------------------------------------------------------- | Pengaturan Umum untuk Broker |-------------------------------------------------------------------------- | Beberapa parameter yang dibutuhkan untuk broker. Bisa ditemukan di | https://sso.samarindakota.go.id | */ 'server_url' => env('SSO_SERVER_URL', null), 'broker_name' => env('SSO_BROKER_NAME', null), 'broker_secret' => env('SSO_BROKER_SECRET', null), /* |-------------------------------------------------------------------------- | Custom for UserList |-------------------------------------------------------------------------- | Tentukan Model User yang dipakai | */ 'model' => '\App\Models\User' ];
3. 编辑环境
在您的.env
文件中创建3个新选项
SSO_SERVER_URL=https://sso.samarindakota.go.id SSO_BROKER_NAME= SSO_BROKER_SECRET=
SSO_SERVER_URL
包含SSO Samarinda的URI。 SSO_BROKER_NAME
和SSO_BROKER_SECRET
必须根据您在https://sso.samarindakota.go.id注册的应用程序数据填写。
4. 注册中间件
编辑app/Http/Kernel.php
文件,并将\Novay\SSO\Http\Middleware\SSOAutoLogin::class
添加到web
中间件组。例如:
protected $middlewareGroups = [ 'web' => [ ... \Novay\SSO\Http\Middleware\SSOAutoLogin::class, ], 'api' => [ ... ], ];
如果您在实现中想要对会话进行存储或对User
模型进行操作,您也可以自定义提供的中间件。例如:
a) 创建新的中间件
$ php artisan make:middleware SSOAutoLogin
b) 将Default Middleware
扩展到Custom Middleware
<?php namespace App\Http\Middleware; use Novay\SSO\Http\Middleware\SSOAutoLogin as Middleware; use App\Models\User; class SSOAutoLogin extends Middleware { /** * Manage your users models as your default credentials * * @param Broker $response * @return \Illuminate\Http\RedirectResponse */ public function handleLogin($response) { $user = User::updateOrCreate(['uid' => $response['data']['id']], [ 'name' => $response['data']['name'], 'email' => $response['data']['email'], 'password' => 'default', ]); auth()->login($user); return; } }
c) 编辑Kernel.php
protected $middlewareGroups = [ 'web' => [ ... // \Novay\SSO\Http\Middleware\SSOAutoLogin::class, \App\Http\Middleware\SSOAutoLogin::class, ], 'api' => [ ... ], ];
5. 使用
a) 登录
<a href="{{ route('sso.authorize') }}">Login</a>
b) 登出
<a href="{{ route('sso.logout') }}">Logout</a>
c) 手动使用(可选)
对于手动使用,您可以将以下脚本片段插入到控制器类的登录和注销功能中。
protected function attemptLogin(Request $request) { $broker = new \Novay\SSO\Services\Broker; $credentials = $this->credentials($request); return $broker->login($credentials['username'], $credentials['password']); } public function logout(Request $request) { $broker = new \Novay\SSO\Services\Broker; $broker->logout(); $this->guard()->logout(); $request->session()->invalidate(); return redirect('/'); }
d) 导入用户
<a href="{{ route('sso.import', 'Service') }}">Import</a>
此按钮用于拉取用户数据以进行用户数据初始化。以下是一些可用的类型:
- 服务(特别为工作单位用户)
- 访客(特别为居民用户)
- 官员(特别为ASN或市政局员工用户)
- 公司(特别为公司、基金会、机构、非政府组织用户)
接收到的请求如下所示
{
...
{
'id' => 'UUID',
'name', => 'Kecamatan Palaran',
'email', => 'kec-palaran@samarindakota.go.id',
'type_id', => 'None',
'number_id', => 'XXX',
'jenis', => 'Kecamatan',
'level' => 'Service',
},
...
}
接收到的响应如下所示
{
'status' => 'success',
'message' => 'Daftar pengguna ('Service') berhasil diperbarui.',
'previous_url' => url()->previous()
}
如此。对于其他代理页面,您需要从头开始重复所有操作,只需更改配置文件中的代理名称和密钥即可。
.env
文件的附加示例
SSO_SERVER_URL=https://sso.samarindakota.go.id SSO_BROKER_NAME=Situsku SSO_BROKER_SECRET=XXXXXXXXXXXXXXXX
版权
- Samarinda市政府.
- Samarinda市通信和信息化局.
- 电子政务应用和服务领域(领域4)
许可证
Samarinda SSO for Laravel 在MIT许可证下授权,适用于个人和商业产品。享受吧!