zhimei / sso
Laravel 5 和 Lumen 的 SSO 认证
v0.1
2016-03-22 08:43 UTC
Requires
- php: >=5.5.0
- illuminate/support: 4.*|5.*
This package is not auto-updated.
Last update: 2024-09-25 23:19:07 UTC
README
SSO 服务器在 Laravel 5.x & Lumen 中的 SSO 认证
安装
在您的 composer.json 中要求此包,并运行 composer update。
"Zhimei/sso": "dev-master"
#### 对于 Laravel 5:更新 composer 后,将 ServiceProvider 添加到 config/app.php 中的 providers 数组
Zhimei\sso\SsoServerServiceProvider::class
以及 Facade
'SsoServer' => 'Zhimei\sso\Facades\SsoServer'
然后使用以下方法之一发布包的配置
$ php artisan config:publish Zhimei/sso
发布配置后,请配置 config/sso.php 中的项目
'sso_server' => [ 'model' => env('SSO_MODEL'), //It's abstract of Zhimei\sso\SsoServerModeAbstract 'driver' => env('SSO_SERVER_DRIVER', 'file'), //file or memcached (recommend memcached) 'clients' => [ //'app_id' => ['app_id'=>'app_id', 'app_secret'=>'app_secret', 'return_url'=>'return_url'], 'app_id_client_www' => ['app_id'=>'app_id_client_www', 'app_secret'=>'app_secret_24A234FDG34S54GS', 'return_url'=>'http://www.zhimei360.com/'], //... ], ],
#### 对于 Lumen:更新 composer 后,在 bootstrap/app.php 中注册 ServiceProvider
$app->register(Zhimei\sso\SsoServerServiceProvider::class);
在 .env 中配置
SSO_MODEL=App\Models\SsoUser ####It's abstract of Zhimei\sso\SsoServerModeAbstract SSO_SERVER_DRIVER=file SSO_CLIENT_APP_ID_1=app_id_1 SSO_CLIENT_APP_SECRET_1=asdfsdfdf34rfdfE SSO_CLIENT_APP_RETURN_URL_1=http://sso/ # SSO_CLIENT_APP_ID_2= # SSO_CLIENT_APP_SECRET_2= # SSO_CLIENT_APP_RETURN_URL_2= # SSO_CLIENT_APP_ID_3= # SSO_CLIENT_APP_SECRET_3= # SSO_CLIENT_APP_RETURN_URL_3=
#### 对于两者:App\Models\SsoUser
<?php namespace App\Models; use Zhimei\sso\SsoServerModeAbstract; class SsoUser extends SsoServerModeAbstract { /** * @param $username * @param $password * @return bool */ public function authenticate($username, $password){ $user = User::where('username', $username)->first(); if(empty($user)){ return false; } if(!password_verify($password, $user->password)){ return false; } return true; } /** * @param $username * @return null */ public function getUserByUsername($username){ $user = User::where('username', $username)->first(); if(empty($user)){ return null; } return $user->toArray(); } /** * @param $user_id */ public function getUserById($user_id){ } }
### 使用 将以下代码添加到您的 app/Http/routes.php
#for Lumen $app->get('/', function(){ $method = app('request')->input('command'); try{ $return = app('SsoServer')->{$method}(); }catch (\Exception $e){ if($method=='attach'){ throw new \Exception($e->getMessage()); }else { return ['fail' => true, 'msg' => $e->getMessage()]; } } return $return; }); $app->post('login', ['as'=>'sso.login', function()use($app){ return $app['SsoServer']->login(); }]); #for Laravel Route::get('/', function(){ $method = \Request::input('command'); try{ $return = app('SsoServer')->{$method}(); }catch (\Exception $e){ if($method=='attach'){ throw new \Exception($e->getMessage()); }else { return ['fail' => true, 'msg' => $e->getMessage()]; } } return $return; }); Route::post('login', ['as'=>'sso.login', function()use(){ return \SsoServer::login(); }]);
SSO 客户端
安装
在您的 composer.json 中要求此包,并运行 composer update。
"Zhimei/sso": "dev-master"
更新 composer 后,将 ServiceProvider 添加到 config/app.php 中的 providers 数组
Zhimei\sso\SsoClientServiceProvider::class
以及 Facade
'SsoClient' => 'Zhimei\sso\Facades\SsoClient'
然后使用以下方法之一发布包的配置
$ php artisan config:publish Zhimei/sso
### 配置 添加到 .env
SSO_SERVER_URL =
SSO_APP_ID =
SSO_APP_SECRET =
### 可用函数 获取连接 SSO 服务器会话的 URL。
app('SsoClient')->getAttachUrl();
将我们的会话附加到 SSO 服务器上的用户会话。
/** * Attach our session to the user's session on the SSO server. * @param null $state * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ return app('SsoClient')->attach();
获取用户信息。
app('SsoClient')->getUserInfo();
在 SSO 服务器上注销
app('SsoClient')->logout();
### 使用示例 在 routes.php 中使用以下代码
#for Lumen $app->get('login', function()use($app){ if($app['SsoClient']::isAttached()){ $userInfo = app('SsoClient')->getUserInfo(); if(empty($userInfo)){ return app('SsoClient')->reAttach(); } return $userInfo; }else{ return $app['SsoClient']::attach(); } }); $app->get('logout', function()use($app){ $app['SsoClient']->logout(); }); #for Laravel Route::get('login', function(){ if(\SsoClient::isAttached()){ $userInfo = app('SsoClient')->getUserInfo(); if(empty($userInfo)){ return app('SsoClient')->reAttach(); } return $userInfo; }else{ return \SsoClient::attach(); } }); Route::get('logout', function(){ \SsoClient::logout(); });