Skip to content

API Key 使用说明

在调用 apihub 接口时,您可以有两种身份:

  1. 以 app(应用程序)的身份发起接口调用。使用 app-token 作为认证方式。
  2. 以 person(您系统内的用户)的身份发起接口调用。使用 person-token 作为认证方式。

API Key (包含 ak、sk) 是生成 app-tokenperson-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()

匿名调用存在各种限制,如:

  1. 所有的调用者共用限流额度。
  2. 固定使用 app 身份发起调用,且所有的调用者共用同一个 app 身份。