naco / sdk
Kemnaker SSO SDK
v1.3.4
2023-02-11 12:22 UTC
Requires
- php: >=7.2
- guzzlehttp/guzzle: ^6.0|^7.0
- symfony/http-foundation: ~3.4|~4.0|~5.0|~6.0
README
Naco PHP SDK 提供了直接且经过测试的方法来访问认证和管理 API 端点。本 README 说明了如何开始使用,并提供了使用 SDK 的简单示例。
有关如何将此 SDK 安装到现有项目或如何下载预配置的种子项目的更多详细信息,请参阅
依赖项
- PHP7.2+
- curl
安装
我们建议使用 Composer 安装 SDK。如果您已经全局安装了 Composer,请运行以下命令
$ composer require naco/sdk
否则,请本地下载 Composer 并运行
php composer.phar require naco/sdk
这将在命令执行的目录中创建 composer.json
和 composer.lock
文件,以及一个包含此 SDK 和其依赖项的 vendor 文件夹。
最后,将 Composer 自动加载文件包含到您的项目中以使用 SDK
require '../vendor/autoload.php';
use Naco\Sdk\Client;
use Naco\Sdk\Config;
$config = new Config(
'YOUR_CLIENT_ID',
'YOUR_CLIENT_SECRET'
);
$auth = new Client($config);
使用 - 认证 API
此 SDK 提供了易于实现的访问认证 API 的方法。以下是一些常见的认证操作示例。
以下示例假设您已按照上面 安装部分 中的步骤执行。
登录
处理 Web 应用程序登录的最简单、最安全的方式是使用与 Naco 登录页面结合的 认证码授权。简而言之,这个过程是:
- 请求访问的用户被重定向到 Naco(Kemnaker 账户)登录页面。
- 如果成功,用户将被重定向回您的应用程序的回调 URL,并带有
code
和state
参数;如果失败,则带有error
和error_description
。 - 如果认证成功,将验证
state
参数。 - 如果
state
有效,则将code
参数与 Naco 交换以获取访问令牌。 - 如果交换成功,使用访问令牌调用 Naco
/api/v1/users/me
端点,该端点返回认证用户的详细信息。 - 这些信息可用于创建账户、启动特定于应用程序的会话或作为用户会话持久化。
PHP SDK 处理大多数前面的步骤。您的应用程序需要
- 确定登录操作(例如:点击链接、访问围墙内容等)并调用
Naco\Sdk\Client::login
- 处理返回的错误。
这些步骤的简单实现如下所示
require '../vendor/autoload.php';
use Naco\Sdk\Client;
use Naco\Sdk\Config;
$config = new Config(
'YOUR_CLIENT_ID',
'YOUR_CLIENT_SECRET'
);
$auth = new Client($config);
$scheme = isset($_SERVER['HTTPS']) ? "https" : "http";
$currentUri = $scheme . '://' . $_SERVER['HTTP_HOST'] . '/auth_code.php';
if (!isset($_GET['action'])) {
if (null === $user = $auth->getUser()) {
header('Location: ' . $auth->login('code', 'basic profile email', $currentUri . '?action=auth'));
exit;
}
header('Location: ' . $currentUri . '?action=welcome');
exit;
}
if (isset($_GET['action']) && $_GET['action'] === 'auth') {
if (null === $code = $auth->getAuthorizationCode()) {
echo '<h1>Cannot Authenticate!!</h1>';
exit;
}
$auth->issueToken(
'authorization_code',
'basic email profile',
[
'code' => $auth->getAuthorizationCode(),
'redirect_uri' => $currentUri . '?action=auth',
'state' => $auth->getState(),
]
);
if (null === $auth->getAccessToken()) {
echo '<h1>Failed Authenticate!!</h1>';
}
header('Location: ' . $currentUri . '?action=welcome');
exit;
}
if (isset($_GET['action']) && $_GET['action'] === 'welcome') {
if (null === $auth->getUser()) {
header('Location: ' . $currentUri);
exit;
}
// Access resource with your access tokem
echo 'Token: <br />';
var_dump($auth->getAccessToken());
// Keep login with refresh token
echo '<br /><br />Refresh Token: <br />';
var_dump($auth->getRefreshToken());
// Get authenticated user
echo '<br /><br />User: <br />';
var_dump($auth->getUser()->toArray());
}