sourcewater/sso-client

本包最新版本(v1.0.0)无许可证信息。

Sourcewater SSO 客户端

v1.0.0 2019-01-21 12:50 UTC

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_idredirect_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);