nddcoder/laravel-sso

Simple Laravel SSO integration (Based on zefy/laravel-sso)

Downloads

138

Stars

1

Version

v1.0.0

Simple PHP SSO integration for Laravel

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,
    //...
];

Then use like this: Use auto_login middleware

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
dangdungcntt

Author

dangdungcntt