接口鉴权
注意:平台已支持API Key调用,请用户保管好自己的API Key,在ModelStudio 管理中心 API Key管理进行密钥的创建操作
请求头(Request Header)
在请求头里,添加 Authorization
字段,如下所示:
Authorization: Bearer $API_TOKEN //$API_TOKEN 可直接用$API_KEY替换
Authorization` 生成方式
遵循JWT(Json Web Token, RFC 7519)标准。
JWT由三个部分组成:Header
、Payload
、Signature
。
- JWT
Header
的构建方式
{"typ":"JWT","alg":"HS256"} # 手动生成JWT,JWT Header中alg填写HS256
- JWT
Payload
的构建方式
名称 | 类型 | 必须 | 描述 |
---|---|---|---|
iss | String | 是 | AK(Access Key ID,获取方式请参考使用手册-“获取访问密钥”) |
exp | Integer | 是 | 超时时间(Unix时间戳,单位秒) |
nbf | Integer | 否 | 生效时间(Unix时间戳,单位秒),在此时间前无法使用 |
- JWT
Signature
的构建方式
SK(Access Key Secret,获取方式请参考使用手册-“获取访问密钥”)
生成示例
1 Python Sample Code
首先,您可以通过 pip
安装的方式将 PyJWT
安装到您的环境中,在命令行中执行如下命令:
pip3 install PyJWT==2.6.0
然后,可按照以下样例生成 Authorization
:
import time
import jwt
ak = "" # 填写您的ak
sk = "" # 填写您的sk
def encode_jwt_token(ak, sk):
headers = {
"alg": "HS256",
"typ": "JWT"
}
payload = {
"iss": ak,
"exp": int(time.time()) + 1800, # 填写您期望的有效时间,此处示例代表当前时间+30分钟
"nbf": int(time.time()) - 5 # 填写您期望的生效时间,此处示例代表当前时间-5秒
}
token = jwt.encode(payload, sk, headers=headers)
return token
authorization = encode_jwt_token(ak, sk)
print(authorization) # 打印生成的API_TOKEN
2 Java Sample Code
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 = ""; // 填写您的ak
static String sk = ""; // 填写您的sk
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);
Date notBefore = new Date(System.currentTimeMillis() - 5*1000);
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;
}
}
}
3 Golang Sample Code
package main
import (
"encoding/json"
"fmt"
"time"
"github.com/golang-jwt/jwt/v4"
)
func EncodeJwtToken(ak string, sk string) (string, error) {
payload := jwt.MapClaims{
"iss": ak,
"exp": time.Now().Add(1800 * time.Second).Unix(),
"nbf": time.Now().Add(-5 * time.Second).Unix(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, payload)
signedToken, err := token.SignedString([]byte(sk))
if err != nil {
fmt.Println("Error encoding JWT token:", err)
return "", err
}
return signedToken, nil
}
func main() {
ak := "" // 填写您的ak
sk := "" // 填写您的sk
token, err := EncodeJwtToken(ak, sk)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Encoded JWT token:", token) // 打印生成的API_TOKEN
}
}