Loading...

Sakura Frp OpenAPI 开发文档

OpenAPI 是 Sakura Frp 新推出的开放登录平台 API,任何人都可以申请,通过 OpenAPI 你可以轻松对接自己的网站,实现使用 Sakura Frp 账号登录。

源站要求

  1. 需要 HTTPS 支持,OpenAPI 要求源站强制启用 SSL 以保证安全。
  2. PHP 需要开启 OpenSSL 模块

申请 OpenAPI 方法

  1. 打开 Sakura Frp (https://www.natfrp.org/)
  2. 登录你的 Sakura Frp 账号
  3. 点击左侧 “账号安全”
  4. 修改右侧设置,填写源站地址,以及源站 token,并选择启用 OpenAPI
  5. 修改代码,接入 OpenAPI

OpenAPI 简单对接教程

配置好源站信息以后,开始修改自己网站的代码 首先,在自己网站根目录新建文件夹 openapi 进入文件夹,新建文件 index.php,输入以下内容

<?php
// 引用 AES 加密
$aes = new AES();
// 定义源站信息
define('SOURCE_SITE', 'test.example.com');    // 你的源站地址
define('OPENAPI_TOKEN', md5('Your token'));    // 你的 token

// 如果客户端请求使用 Sakura Frp 进行登录
if(isset($_GET['action']) && $_GET['action'] == 'location') {
    $data = Array(
        'timestamp' => date("YmdHi")
    );
    $data = urlencode($aes->encrypt(json_encode($data), substr(md5(OPENAPI_TOKEN), 0, 16), OPENAPI_TOKEN));
    Header("Location: https://openid.natfrp.org/?src=" . SOURCE_SITE . "&data={$data}&referer=" . urlencode($_SERVER["HTTP_REFERER"]));
    exit;
}

// 登陆成功后,OpenAPI 返回数据
if(isset($_GET['data'])) {
    $data = json_decode($aes->decrypt($_GET['data'], substr(md5(OPENAPI_TOKEN), 0, 16), OPENAPI_TOKEN), true);
    if(!$data) {
        echo "Data invalid";
        exit;
    } else {
        // 验证时间戳,误差允许在 1 分钟以内
        if($data['timestamp'] != date("YmdHi")) {
            echo "Time stamp invalid";
            exit;
        } else {
            // 验证成功,将 OpenAPI 返回的用户名和邮箱赋值给变量
            $username = $data['username'];
            $email = $data['email'];
            // 接下来任由发挥想象,例如
            SESSION_START();
            $_SESSION['user'] = $username;
            $_SESSION['mail'] = $email;
            // 跳转回网站
            if($_GET['referer'] !== "") {
                Header("Location: {$_GET['referer']}");
            } else {
                Header("Location: https://" . SOURCE_SITE);
            }
        }
    }
}

// AES-256-CFB 加密类
class AES {
    public function encrypt($str, $localIV, $encryptKey) {
        return openssl_encrypt($str, 'AES-256-CFB', $encryptKey, 0, $localIV);
    }
    public function decrypt($str, $localIV, $encryptKey) {
        return openssl_decrypt($str, 'AES-256-CFB', $encryptKey, 0, $localIV);
    }
}

修改顶部源站地址为自己的网站地址,源站 token 则是你之前在 Sakura Frp 后台填写的 OpenAPI token。

配置成功后,访问:https://www.你的网站.com/openapi/?action=location 将会跳转到 OpenAPI 登录页面,登录成功后,将会跳转回你的网站,解密 GET 中的 data 即可得到用户名和邮箱,发挥你的创意进行修改,即可实现对接。

最后,在你的网页上添加一个按钮:

<button class=btn btn-primary onclick="location='/openapi/?action=location'">使用 Sakura Frp 账号登录</button>

用户就可以通过点击按钮使用 Sakura Frp 账号登录了。

4 条评论

  • Chenwe_i_lin

    2018年8月22日

    OAtuh?

    Reply
    • 耗子

      2018年11月16日

      那是什么?我只听说过OAuth

      Reply
  • 耗子

    2018年10月1日

    我准备接入这个API了,嘻嘻嘻

    Reply
  • Zapic

    2019年9月6日

    时区不对然后翻车的多了去了(先加我一个).
    所以:
    “`
    <?php
    // 引用 AES 加密
    $aes = new AES();
    // 定义源站信息
    define(‘SOURCE_SITE’, ‘test.example.com’); // 你的源站地址
    define(‘OPENAPI_TOKEN’, md5(‘Your token’)); // 你的 token

    //强制时区为中国上海(+8:00)
    date_default_timezone_set("Asia/Shanghai");
    // 如果客户端请求使用 Sakura Frp 进行登录
    //…….
    “`

    Reply

发表评论

》表情