gorontalokota / sso-client
PHP 的 SSO 集成
v1.0.0
2022-08-27 02:50 UTC
Requires
- firebase/php-jwt: ~4.0|~5.0
- league/oauth2-client: ^2.0
README
该库使用并支持 PHP League 的 OAuth 2.0 客户端。
安装
使用 composer 进行安装
composer require gorontalokota/sso-client
用法
使用授权代码
用于登录
require(__DIR__ . "/vendor/autoload.php"); use Gorontalokota\SSO\Client\Provider\Broker; $provider = new Broker([ 'realm' => '{Realms}', 'clientId' => '{clientID}', 'clientSecret' => '{clientSecret}', 'redirectUri' => '{http://example/oauth/authorized}', ]); $authUrl = $provider->getAuthorizationUrl(); //Simpan status Auth ke Session untuk mencegah csrf $_SESSION['oauth2state'] = $provider->getState(); //Redirect Url Auth header('Location: '.$authUrl);
用于获取用户信息
require(__DIR__ . "/vendor/autoload.php"); use Gorontalokota\SSO\Client\Provider\Broker; $provider = new Broker([ 'realm' => '{Realms}', 'clientId' => '{clientID}', 'clientSecret' => '{clientSecret}', 'redirectUri' => '{http://example/oauth/authorized}', ]); //Periksa status yang diberikan terhadap status yang disimpan sebelumnya untuk mengurangi serangan CSRF if (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); exit('Invalid state, make sure HTTP sessions are enabled.'); } else { try { $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); $user = $provider->getResourceOwner($token); $user->getUsername(); $user->getEmail(); $user->getName(); } catch (Exception $e) { exit('Failed to get access token: '.$e->getMessage()); } }
刷新令牌
require(__DIR__ . "/vendor/autoload.php"); use Gorontalokota\SSO\Client\Provider\Broker; $provider = new Broker([ 'realm' => '{Realms}', 'clientId' => '{clientID}', 'clientSecret' => '{clientSecret}', 'redirectUri' => '{http://example/oauth/authorized}', ]); $token = $provider->getAccessToken('refresh_token', ['refresh_token' => $token->getRefreshToken()]);
用于登出
require(__DIR__ . "/vendor/autoload.php"); use Gorontalokota\SSO\Client\Provider\Broker; $provider = new Broker([ 'realm' => '{Realms}', 'clientId' => '{clientID}', 'clientSecret' => '{clientSecret}', 'redirectUri' => '{http://example/oauth/authorized}', ]); $authUrl = $provider->getLogoutUrl();