avdevs/keycloak
Composer 安装命令:
composer require avdevs/keycloak
包简介
Keycloak OAuth2 Provider for Laravel Socialite
README 文档
README
Installation
clone : git clone https://github.com/avdevs/keycloak.git
installing package : composer require avdevs/keycloak
Requirements
Download latest keycloak server repository from https://www.keycloak.org/ and setup keycloak server at admin console.
Environment Setup
Add below key array in '/config/services.php' file.
'keycloak' => [ 'authServerUrl' => env('KEYCLOAK_AUTHSERVERURL'), 'realm' => env('KEYCLOAK_REALM'), 'clientId' => env('KEYCLOAK_CLIENTID'), 'clientSecret' => env('KEYCLOAK_CLIENTSECRET'), 'redirectUri' => env('KEYCLOAK_REDIRECTURI'), 'encryptionAlgorithm' => env('KEYCLOAK_ENCRYPTIONALGORITHM'), 'encryptionKeyPath' => env('KEYCLOAK_ENCRYPTIONKEYPATH'), 'encryptionKey' => env('KEYCLOAK_ENCRYPTIONKEY'), ]
Laravel AppServiceProvider
Add below code in /app/Providers/AppServiceProvider.php file which helps to execute keycloak as a socialite provider.
use Avdevs\Keycloak\KeycloakProvider;
In boot() method, add below code
$this->bootKeycloakSocialite();
Add Function
private function bootKeycloakSocialite() { $socialite = $this->app->make('Laravel\Socialite\Contracts\Factory'); $socialite->extend( 'keycloak', function ($app) use ($socialite) { $config = $app['config']['services.keycloak']; return new KeycloakProvider($config); } ); }
Laravel Functions and Routes
use Socialite;
Route::get('/redirect/{provider}', 'ProviderAuthController@redirectToProvider'); /** * Redirect to keycloak server. * @provider * @return */ public function redirectToProvider($provider) { /* where $provider = 'keycloak' */ return Socialite::driver($provider) ->stateless() ->scopes([]) // Array ex : name ->redirect(); }
Route::get('/callback/{provider}', 'ProviderAuthController@CallbackFunction'); /** * retrieve user information which is located at keycloak serve. * @provider * @return */ public function CallbackFunction($provider) { /* where $provider = 'keycloak' */ $userData = Socialite::driver($provider) ->stateless() ->user(); /* Note : */ /* 1) Callback url is same for login and logout request. so this function executed twice. */ /* 2) Must add below code, Because user data not retrieved while logout calls is requested. */ if(!isset($userData->email)){ return redirect()->back(); } /* your logic for add or get user detail */ }
Route::get('/logout/{provider}', 'ProviderAuthController@ProviderLogout'); /** * Log the user out of the application. * @provider * @return void */ public function ProviderLogout($provider) { /* where $provider = 'keycloak' */ /* logout from laravel auth */ Auth::logout(); /* redirect to keycloak logout url */ return redirect( Socialite::driver($provider) ->getLogoutUrl() ); }
统计信息
- 总下载量: 38.89k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 19
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-11-21