Web API 鉴权
了解 Web API 鉴权,并参考 curl、Python 和 JavaScript 调用示例
在 nps.conf 中配置 auth_key 即可启用 API 鉴权(首次启动自动生成)。
鉴权方式
每个请求需附带两个参数:
时间戳有效范围为 20 秒,每次请求须重新生成。
获取服务端时间戳
由于客户端与服务端时间可能不一致,可先获取服务端时间:
返回:
此接口无需鉴权。
获取服务端 auth_key(加密)
返回经 AES-CBC 加密后的 auth_key(hex 编码)。
此接口无需鉴权。需确保 nps.conf 中 auth_crypt_key 为 16 位。
解密参数:
- 算法:AES-128-CBC
- 密钥:
auth_crypt_key(16 字节) - IV:与密钥相同
- 填充:PKCS5Padding
- 密文编码:hex
接入示例
curl
# 1. 获取服务端时间戳
ts=$(curl -s http://127.0.0.1:8080/auth/gettime/ | sed 's/.*"time":\([0-9]*\).*/\1/')
# 2. 计算签名(Linux)
sign=$(echo -n "your_auth_key${ts}" | md5sum | awk '{print $1}')
# 或 macOS:
# sign=$(echo -n "your_auth_key${ts}" | md5)
# 3. 调用接口
curl -s -X POST "http://127.0.0.1:8080/client/list/" \
-d "auth_key=${sign}×tamp=${ts}&search=&order=asc&offset=0&limit=10"
Python
import hashlib, requests
host = "http://127.0.0.1:8080"
auth_key = "your_auth_key"
ts = requests.get(f"{host}/auth/gettime/").json()["time"]
sign = hashlib.md5(f"{auth_key}{ts}".encode()).hexdigest()
r = requests.post(f"{host}/client/list/", data={
"auth_key": sign, "timestamp": ts,
"search": "", "order": "asc", "offset": 0, "limit": 10
})
print(r.json())
JavaScript
const crypto = require("crypto");
const host = "http://127.0.0.1:8080";
const authKey = "your_auth_key";
(async () => {
const ts = (await (await fetch(`${host}/auth/gettime/`)).json()).time;
const sign = crypto.createHash("md5").update(`${authKey}${ts}`).digest("hex");
const r = await fetch(`${host}/client/list/`, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
auth_key: sign,
timestamp: ts,
search: "",
order: "asc",
offset: 0,
limit: 10,
}).toString(),
});
console.log(await r.json());
})();
详细接口清单