接口鉴权 | 大装置帮助中心
跳到主要内容

接口鉴权

注意:平台已支持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由三个部分组成:HeaderPayloadSignature

  • JWT Header 的构建方式
{"typ":"JWT","alg":"HS256"}  # 手动生成JWT,JWT Header中alg填写HS256
  • JWT Payload 的构建方式
名称类型必须描述
issStringAK(Access Key ID,获取方式请参考使用手册-“获取访问密钥”
expInteger超时时间(Unix时间戳,单位秒)
nbfInteger生效时间(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
}
}