stevenmaguire/oauth2-keycloak
最新稳定版本:5.1.0
Composer 安装命令:
composer require stevenmaguire/oauth2-keycloak
包简介
Keycloak OAuth 2.0 Client Provider for The PHP League OAuth2-Client
README 文档
README
This package provides Keycloak OAuth 2.0 support for the PHP League's OAuth 2.0 Client.
Installation
To install, use composer:
composer require stevenmaguire/oauth2-keycloak
Usage
Usage is the same as The League's OAuth client, using \Stevenmaguire\OAuth2\Client\Provider\Keycloak as the provider.
Use authServerUrl to specify the Keycloak server URL. You can lookup the correct value from the Keycloak client installer JSON under auth-server-url, eg. http://localhost:8080/auth.
Use realm to specify the Keycloak realm name. You can lookup the correct value from the Keycloak client installer JSON under resource, eg. master.
Authorization Code Flow
$provider = new Stevenmaguire\OAuth2\Client\Provider\Keycloak([ 'authServerUrl' => '{keycloak-server-url}', 'realm' => '{keycloak-realm}', 'clientId' => '{keycloak-client-id}', 'clientSecret' => '{keycloak-client-secret}', 'redirectUri' => 'https://example.com/callback-url', 'encryptionAlgorithm' => 'RS256', // optional 'encryptionKeyPath' => '../key.pem' // optional 'encryptionKey' => 'contents_of_key_or_certificate' // optional 'version' => '20.0.1', // optional ]); if (!isset($_GET['code'])) { // If we don't have an authorization code then get one $authUrl = $provider->getAuthorizationUrl(); $_SESSION['oauth2state'] = $provider->getState(); header('Location: '.$authUrl); exit; // Check given state against previously stored one to mitigate CSRF attack } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); exit('Invalid state, make sure HTTP sessions are enabled.'); } else { // Try to get an access token (using the authorization coe grant) try { $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); } catch (Exception $e) { exit('Failed to get access token: '.$e->getMessage()); } // Optional: Now you have a token you can look up a users profile data try { // We got an access token, let's now get the user's details $user = $provider->getResourceOwner($token); // Use these details to create a new profile printf('Hello %s!', $user->getName()); } catch (Exception $e) { exit('Failed to get resource owner: '.$e->getMessage()); } // Use this to interact with an API on the users behalf echo $token->getToken(); }
Refreshing a Token
$provider = new Stevenmaguire\OAuth2\Client\Provider\Keycloak([ 'authServerUrl' => '{keycloak-server-url}', 'realm' => '{keycloak-realm}', 'clientId' => '{keycloak-client-id}', 'clientSecret' => '{keycloak-client-secret}', 'redirectUri' => 'https://example.com/callback-url', ]); $token = $provider->getAccessToken('refresh_token', ['refresh_token' => $token->getRefreshToken()]);
Handling encryption
If you've configured your Keycloak instance to use encryption, there are some advanced options available to you.
Configure the provider to use the same encryption algorithm
$provider = new Stevenmaguire\OAuth2\Client\Provider\Keycloak([ // ... 'encryptionAlgorithm' => 'RS256', ]);
or
$provider->setEncryptionAlgorithm('RS256');
Configure the provider to use the expected decryption public key or certificate
By key value
$key = "-----BEGIN PUBLIC KEY-----\n....\n-----END PUBLIC KEY-----"; // or // $key = "-----BEGIN CERTIFICATE-----\n....\n-----END CERTIFICATE-----"; $provider = new Stevenmaguire\OAuth2\Client\Provider\Keycloak([ // ... 'encryptionKey' => $key, ]);
or
$provider->setEncryptionKey($key);
By key path
$keyPath = '../key.pem'; $provider = new Stevenmaguire\OAuth2\Client\Provider\Keycloak([ // ... 'encryptionKeyPath' => $keyPath, ]);
or
$provider->setEncryptionKeyPath($keyPath);
Testing
$ ./vendor/bin/phpunit
Contributing
Please see CONTRIBUTING for details.
Credits
License
The MIT License (MIT). Please see License File for more information.
统计信息
- 总下载量: 5.36M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 223
- 点击次数: 2
- 依赖项目数: 21
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-01-04