nddcoder / laravel-sso
Simple Laravel SSO integration (Based on zefy/laravel-sso)
Requires
- php: >=7.1.3
- guzzlehttp/guzzle: ^6.3
- laravel/framework: ^5.5
- zefy/php-simple-sso: ^1.0
README
This package based on Simple PHP SSO integration for Laravel package.
Requirements
- Laravel 5.5+
- PHP 7.1+
Documentation
Please read Simple PHP SSO integration for Laravel docs.
Installation
Server
Install this package using composer.
$ composer require nddcoder/laravel-sso
Copy config file to Laravel project config/
folder.
$ php artisan vendor:publish --provider="Nddcoder\LaravelSSO\SSOServiceProvider"
Create table where all brokers will be saved.
$ php artisan migrate --path=vendor/nddcoder/laravel-sso/database/migrations
Edit your app/Http/Kernel.php
by create new middleware like this:
'api' => [ 'throttle:60,1', 'bindings', ], 'sso' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, 'bindings', ], //...
Now you should create brokers. You can create new broker using following Artisan CLI command:
$ php artisan sso:broker:create {name}
Broker
Install this package using composer.
$ composer require nddcoder/laravel-sso
Copy config file to Laravel project config/
folder.
$ php artisan vendor:publish --provider="Nddcoder\LaravelSSO\SSOServiceProvider"
Change type
value in config/laravel-sso.php
file from server
to broker
.
Set 3 new options in your .env
file:
SSO_SERVER_URL= SSO_BROKER_NAME= SSO_BROKER_SECRET=
SSO_SERVER_URL
is your server's http url without trailing slash. SSO_BROKER_NAME
and SSO_BROKER_SECRET
must be data which exists in your server's brokers
table.
Edit your app/Http/Kernel.php
by adding \Nddcoder\LaravelSSO\Middleware\SSOAutoLogin::class
middleware to $routeMiddleware
array. It should look like this:
protected $routeMiddleware = [ 'auto_login' => \Nddcoder\LaravelSSO\Middleware\SSOAutoLogin::class, //... ];
Last but not least, you need to edit app/Http/Controllers/Auth/LoginController.php
. You should add two functions into LoginController
class which will authenticate your client through SSO server but not your Broker page.
protected function attemptLogin(Request $request) { $broker = new \Nddcoder\LaravelSSO\LaravelSSOBroker; $credentials = $this->credentials($request); return $broker->login($credentials[$this->username()], $credentials['password']); } public function logout(Request $request) { $broker = new \Nddcoder\LaravelSSO\LaravelSSOBroker; $broker->logout(); $this->guard()->logout(); $request->session()->invalidate(); return redirect('/'); }
That's all. For other Broker pages you should repeat everything from the beginning just changing your Broker name and secret in configuration file.
Example .env
options:
SSO_SERVER_URL=https://server.test SSO_BROKER_NAME=site1 SSO_BROKER_SECRET=892asjdajsdksja74jh38kljk2929023