sourcewater / sso-client
Sourcewater SSO 客户端
Requires
- guzzlehttp/guzzle: ~6.3
This package is not auto-updated.
Last update: 2024-09-20 20:31:32 UTC
README
用途
此客户端包含用于简化 Sourcewater 单点登录(SSO)实现的方法和示例。客户端提供用户认证、验证令牌以及创建包含 SSO 登录页面所需数据的 URL 的方法,以正确返回应用程序。
安装
composer requre sourcewater/sso-client
示例
安装 sso-client 后,您可以在本包的示例文件夹中找到实现示例,example/index.php
。
用法
所需配置
应用程序 ID & 应用程序密钥
SSO 管理员中的每个应用程序都有唯一的令牌 ID 和密钥。应用程序 ID 用于公共应用程序认证。用于验证 APP CURL 请求的密钥令牌。
如果应用程序未发送密钥令牌,则无法验证用户令牌。
重定向 URL
http://web.page.com
重定向 URL 是用户成功登录到 SSO 管理员页面后将被重定向到的地址。SSO 将将新令牌附加到此 URL 作为参数。
http://web.page.com?token=newTokenString
创建客户端
如果已设置所有配置数据,我们可以创建客户端。
$config = array(
'app_id' => 'APPLICATION_ID',
'app_secret' => 'APPLICATION_SECRET',
'redirect_url' => 'REDIRECT_URL'
);
use Sourcewater/SSO/Client;
$ssoClient = new Client($config);
SSO 客户端预设的认证服务器设置为 https://login.sourcewater.com
,您可以使用公共客户端方法更改此地址。
$newURL = 'https://:8000';
$ssoClient->setAuthenticationServer( $newURL );
用户认证
每个已登录用户都会从 SSO 服务器接收令牌。如果没有存储令牌,我们可以将用户重定向到 SSO 登录 URL,我们可以从 SSO 客户端实例中获取它。
获取令牌
登录 URL 包含 app_id
和 redirect_url
。在获取登录 URL 之前,我们可以使用 setRedirectUrl 方法更改 redirect_url
。
$newRedirectUrl = 'www.newPage.com/different';
$ssoClient->setRedirectUrl( $newRedirectUrl );
$url = $ssoClient->getLoginUrl();
// AUTH_SERVER_URL?app_id=APP_ID&redirect_url=REDIRECT_URL
当我们重定向到登录 URL 时,SSO 服务器显示 SSO 的用户登录屏幕,成功登录后,它将用户重定向到带有附加令牌的 redirect_url
,即 redirect_url?token=ISSUED_TOKEN
。也可以有包含参数的 URL,即 redirect_url?custom=parameter&token=ISSUED_TOKEN
。
### 使用接收到的令牌进行认证 在应用程序接收到令牌后,可以使用令牌对用户进行认证
$token = $_GET['token'];
if( $ssoClient->authenticate($token) ){
存储令牌
成功认证后,我们可以将令牌存储到 cookie 中。我们可以使用 getTokenExpiration 方法获取令牌的有效期。
if(isset($_GET['token'])){
$tokenValidUntil = $ssoClient->getTokenExpiration();
setcookie('sw_token', $_GET['token'], strtotime($tokenValidUntil));
}
获取用户
可以通过 getUser 方法从认证的用户获取 SSO 用户数据。
$user = $ssoClient->getUser()
验证令牌
可以仅验证令牌的有效性而不返回用户数据。此方法仅确认令牌是否适用于应用程序。
$ssoClient->verifyToken( $token )
缓存
可以从客户端缓存数据并将其插入到下一个请求中。如果客户端已有数据集,则不会触发 authenticate CURL 操作,并返回提供的缓存数据。
获取缓存数据
$dataToCache = $ssoClient->getData();
// Store data
$_SESSION['ssoCache'] = $dataToCache;
从缓存设置数据
if ( isset($_SESSION['ssoCache']) ){
$data = $_SESSION['ssoCache'];
// set data to client
$ssoClient->setData( $data );
}
// when SSO Client is called it will return provided data
// instead of contacting SSO Server
$ssoClient->authenticate($token); // Always retruns true
$ssoClient->getUser; // User from cache
清除缓存
$ssoClient->setData(null);