OpenAPI 是 Sakura Frp 新推出的开放登录平台 API,任何人都可以申请,通过 OpenAPI 你可以轻松对接自己的网站,实现使用 Sakura Frp 账号登录。
源站要求
- 需要 HTTPS 支持,OpenAPI 要求源站强制启用 SSL 以保证安全。
- PHP 需要开启 OpenSSL 模块
申请 OpenAPI 方法
- 打开 Sakura Frp (https://www.natfrp.org/)
- 登录你的 Sakura Frp 账号
- 点击左侧 “账号安全”
- 修改右侧设置,填写源站地址,以及源站 token,并选择启用 OpenAPI
- 修改代码,接入 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 账号登录了。
OAtuh?
那是什么?我只听说过OAuth
我准备接入这个API了,嘻嘻嘻
时区不对然后翻车的多了去了(先加我一个).
所以:
“`
<?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 进行登录
//…….
“`
那么现在源站地址,以及源站 token去哪申请呢?( ̄_ ̄|||)