深色模式
API Key 使用说明
在调用 apihub 接口时,您可以有两种身份:
- 以 app(应用程序)的身份发起接口调用。使用
app-token
作为认证方式。 - 以 person(您系统内的用户)的身份发起接口调用。使用
person-token
作为认证方式。
API Key (包含 ak、sk)
是生成 app-token
和 person-token
的基础密钥。
调用接口时,在 request header
中添加 "Apihub-Token: app-token
" 或 "Apihub-Token: person-token
" 以表明您的身份。
在后端调用,使用 app-token
针对后端调用,可以为 API Key 配置 IP白名单
,设置成您服务器的固定出口IP。
token 过期时间最长支持 2 小时。
某些 java sdk 在生成 jwt 时,默认会对 sk 进行 base64 解码。此时,encode 方法的 sk 参数需要先进行 base64 编码。
python
apihub_app_token = jwt.encode(
{
"sub": config.get("apihub", "ak"),
"iss": config.get("apihub", "ak"),
"typ": "app_token",
"iat": int(time.time()),
"exp": int(time.time()) + 2 * 3600,
},
config.get("apihub", "sk"), algorithm="HS256",
)
weather = requests.get("https://open.apihub.net/api/weather-basic/now",
headers={"apihub-token": apihub_app_token}).json()
在后端,生成 person-token
通常,这个行为需要放置在您的认证网关之后。
也就是说,已经在您的系统里登录的用户,才允许获取 person-token。
或者是,随着用户登录成功、刷新 token 等,下发您自己的 access-token 的时机,一起下发 apihub 的 person-token。
python
sub = user_id
roles = ["SYS_ADMIN"]
groups = ["/技术部/运维部"]
person_token = jwt.encode(
{
"sub": sub,
"iss": conf.get("apihub", "ak"),
"typ": "person_token",
"iat": int(time.time()),
"exp": int(time.time()) + 2 * 3600,
"roles": roles,
"groups": groups
},
conf.get("apihub", "sk"), algorithm="HS256",
)
在前端调用,使用 person-token
针对浏览器上发起的调用,可以为 API Key 配置 域名白名单
,类似于浏览器的防跨域的作用。
js
axios.post("https://open.apihub.net/api/weather_basic/now", null, {
headers: {
"apihub-token": localStorage.apihub_person_token
}
}).then(function (response) {
console.log(response)
})
匿名调用
在调研试用期间,或是在简单的使用场景下。可以使用匿名调用的方式。无需创建 API Key 生成 token。
也就是说,下面的调用示例(未传 token),也能成功:
js
response = await fetch("https://open.apihub.net/api/weather_basic/now")
await response.json()
匿名调用存在各种限制,如:
- 所有的调用者共用限流额度。
- 固定使用 app 身份发起调用,且所有的调用者共用同一个 app 身份。