naco/sdk

Kemnaker SSO SDK

v1.3.4 2023-02-11 12:22 UTC

This package is auto-updated.

Last update: 2024-09-11 16:15:41 UTC


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.jsoncomposer.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 登录页面结合的 认证码授权。简而言之,这个过程是:

  1. 请求访问的用户被重定向到 Naco(Kemnaker 账户)登录页面。
  2. 如果成功,用户将被重定向回您的应用程序的回调 URL,并带有 codestate 参数;如果失败,则带有 errorerror_description
  3. 如果认证成功,将验证 state 参数。
  4. 如果 state 有效,则将 code 参数与 Naco 交换以获取访问令牌。
  5. 如果交换成功,使用访问令牌调用 Naco /api/v1/users/me 端点,该端点返回认证用户的详细信息。
  6. 这些信息可用于创建账户、启动特定于应用程序的会话或作为用户会话持久化。

PHP SDK 处理大多数前面的步骤。您的应用程序需要

  1. 确定登录操作(例如:点击链接、访问围墙内容等)并调用 Naco\Sdk\Client::login
  2. 处理返回的错误。

这些步骤的简单实现如下所示

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());
}