﻿> ## Documentation Index
>
> Fetch the complete documentation index at: https://klingai.com/document-api/llms.txt
> Use this file to discover all available pages before exploring further.

# 接口鉴权

> 来源: https://klingai.com/document-api/api/get-started/authentication
> 语言: zh
> 当前 Tab: 接口鉴权
> 此内容为面向 LLM 优化的 Markdown，已展开页面内 Tab，并省略页面目录、复制按钮等 UI 控件。

---

## 调用域名

```bash
https://api-beijing.klingai.com
```

> **注意**：新系统调用域名已由 https://api.klingai.com 变更为 **https://api-beijing.klingai.com**。此域名适用于服务器在中国地区的用户。

## 接口鉴权

### API key (适用于所有模型)

调用可灵 AI 模型 API 须使用 **API Key** 鉴权。该密钥敏感度较高，泄露会导致调用额度被盗用，因此建议将 **API Key** 配置至环境变量中使用，具体配置方法如下。

- Step-1：打开可灵 AI 控制台并登录
- Step-2：点击「**+ 新建 API Key**」按钮
- Step-3：在弹窗中为 **API Key** 命名并确认，此时页面会显示 **API Key**
- Step-4：复制获取 **API Key**；**API Key** 仅显示一次，请注意妥善保管
- Step-5：将 **API Key** 组装成 **Authorization**，填写到 **Request Header** 里
    - 组装方式：**Authorization = "Bearer XXX"**，其中 XXX 填写第一步获取的 **API Key**（注意 Bearer 跟 XXX 之间有空格）

### Access Key / Secret Key（仅适用于旧版设计标准的 API）（如何区分新旧API设计标准？模型版本信息位于路径中的是新版，作为model_name参数值设置的是旧版。）

- Step-1：获取 **AccessKey** + **SecretKey**
- Step-2：您每次请求API的时候，需要按照固定加密方法生成**API Token**
    - 加密方法：遵循JWT（Json Web Token, RFC 7519）标准
    - JWT由三个部分组成：Header、Payload、Signature

```python
import time
import jwt

ak = "" # 填写access key
sk = "" # 填写secret key

def encode_jwt_token(ak, sk):
    headers = {
        "alg": "HS256",
        "typ": "JWT"
    }
    payload = {
        "iss": ak,
        "exp": int(time.time()) + 1800, # 有效时间，此处示例代表当前时间+1800s(30min)
        "nbf": int(time.time()) - 5 # 开始生效的时间，此处示例代表当前时间-5秒
    }
    token = jwt.encode(payload, sk, headers=headers)
    return token

api_token = encode_jwt_token(ak, sk)
print(api_token) # 打印生成的API_TOKEN
```

```java
package test;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JWTDemo {

    static String ak = ""; // 填写access key
    static String sk = ""; // 填写secret key

    public static void main(String[] args) {
        String token = sign(ak, sk);
        System.out.println(token); // 打印生成的API_TOKEN
    }
    static String sign(String ak,String sk) {
        try {
            Date expiredAt = new Date(System.currentTimeMillis() + 1800*1000); // 有效时间，此处示例代表当前时间+1800s(30min)
            Date notBefore = new Date(System.currentTimeMillis() - 5*1000); //开始生效的时间，此处示例代表当前时间-5秒
            Algorithm algo = Algorithm.HMAC256(sk);
            Map<String, Object> header = new HashMap<String, Object>();
            header.put("alg", "HS256");
            return JWT.create()
                    .withIssuer(ak)
                    .withHeader(header)
                    .withExpiresAt(expiredAt)
                    .withNotBefore(notBefore)
                    .sign(algo);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
```

- Step-3：用第二步生成的API Token组装成**Authorization**，填写到 **Request Header** 里
    - 组装方式：**Authorization = "Bearer XXX"**， 其中XXX填写第二步生成的API Token（注意Bearer跟XXX之间有空格）
