一、获取凭证
请联系管理员获取以下凭证:
| 凭证 | 格式 | 说明 |
|---|---|---|
| Access Key | cvx_ak_ + 40 位十六进制字符 | 标识调用方身份,相当于用户名。 |
| Secret Key | cvx_sk_ + 64 位十六进制字符 | 用于签名,相当于密码。 |
Secret Key 仅在创建或重置时展示一次,并会发送至邮箱,请妥善保存。遗失后请在系统中重置,或联系管理员重置。
二、生成签名 Token
签名规范
| 格式 | JWT (RFC 7519) |
| 签名算法 | HS256 (HMAC-SHA256) |
| 签名密钥 | Secret Key 原文,例如 cvx_sk_... |
| 有效期 | 建议 5 分钟,每次请求前重新生成。 |
Token 结构
标准 JWT 由三部分用 . 连接:Header.Payload.Signature
Headerjson
{ "alg": "HS256", "typ": "JWT" }左右滑动查看完整代码
Payloadjson
{
"access_key": "cvx_ak_a1b2c3d4e5f67890...",
"iat": 1715500000,
"exp": 1715500300
}左右滑动查看完整代码
Signaturetext
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
"cvx_sk_your_secret_key"
)左右滑动查看完整代码
Authorization Headerhttp
Authorization: Bearer <企业用户自行生成的签名>左右滑动查看完整代码
三、调用方式
将生成的 Token 放入 HTTP 请求头的 Authorization 字段:
curlbash
curl -X POST https://api.example.com/your-endpoint \
-H "Authorization: Bearer <企业用户自行生成的签名>" \
-H "Content-Type: application/json" \
-d '{ ...业务参数 }'左右滑动查看完整代码
- 使用 Access Key 和 Secret Key 生成 JWT Token。
- 将 Token 放入请求头:
Authorization: Bearer <token>。 - 调用驰声 AI 服务接口,服务端自动验证签名、检查凭证状态和配额。
- 验证通过 → 正常返回 AI 结果;验证失败 → 返回错误信息(见下方)。
Token 建议每次请求重新生成,不要缓存过久。过期的 Token 会被拒绝。
四、Token 生成代码示例
Pythonpython
import time
import jwt # pip install PyJWT
ACCESS_KEY = "cvx_ak_your_access_key_here"
SECRET_KEY = "cvx_sk_your_secret_key_here"
def generate_token():
now = int(time.time())
payload = {
"access_key": ACCESS_KEY,
"iat": now,
"exp": now + 300,
}
return jwt.encode(payload, SECRET_KEY, algorithm="HS256")
print(generate_token())左右滑动查看完整代码
Javajava
// 依赖: io.jsonwebtoken:jjwt-api:0.12.6, jjwt-impl, jjwt-jackson
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.nio.charset.StandardCharsets;
import java.util.Date;
public class TokenGenerator {
private static final String ACCESS_KEY = "cvx_ak_your_access_key_here";
private static final String SECRET_KEY = "cvx_sk_your_secret_key_here";
public static String generateToken() {
long now = System.currentTimeMillis();
return Jwts.builder()
.claim("access_key", ACCESS_KEY)
.issuedAt(new Date(now))
.expiration(new Date(now + 5 * 60 * 1000))
.signWith(Keys.hmacShaKeyFor(SECRET_KEY.getBytes(StandardCharsets.UTF_8)))
.compact();
}
}左右滑动查看完整代码
Node.jsjavascript
// npm install jsonwebtoken
const jwt = require('jsonwebtoken');
const ACCESS_KEY = 'cvx_ak_your_access_key_here';
const SECRET_KEY = 'cvx_sk_your_secret_key_here';
function generateToken() {
const now = Math.floor(Date.now() / 1000);
return jwt.sign(
{
access_key: ACCESS_KEY,
iat: now,
exp: now + 300,
},
SECRET_KEY,
{ algorithm: 'HS256' }
);
}
console.log(generateToken());左右滑动查看完整代码
Gogo
package main
import (
"fmt"
"time"
"github.com/golang-jwt/jwt/v5"
)
const accessKey = "cvx_ak_your_access_key_here"
const secretKey = "cvx_sk_your_secret_key_here"
func generateToken() (string, error) {
now := time.Now()
claims := jwt.MapClaims{
"access_key": accessKey,
"iat": now.Unix(),
"exp": now.Add(5 * time.Minute).Unix(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString([]byte(secretKey))
}
func main() {
token, err := generateToken()
if err != nil {
panic(err)
}
fmt.Println(token)
}左右滑动查看完整代码
PHPphp
// composer require firebase/php-jwt
use Firebase\JWT\JWT;
$accessKey = 'cvx_ak_your_access_key_here';
$secretKey = 'cvx_sk_your_secret_key_here';
function generateToken($accessKey, $secretKey) {
$now = time();
$payload = [
'access_key' => $accessKey,
'iat' => $now,
'exp' => $now + 300,
];
return JWT::encode($payload, $secretKey, 'HS256');
}
echo generateToken($accessKey, $secretKey);左右滑动查看完整代码
C#csharp
// NuGet: System.IdentityModel.Tokens.Jwt
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
string accessKey = "cvx_ak_your_access_key_here";
string secretKey = "cvx_sk_your_secret_key_here";
string GenerateToken()
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var now = DateTime.UtcNow;
var token = new JwtSecurityToken(
claims: new[] { new Claim("access_key", accessKey) },
notBefore: now,
expires: now.AddMinutes(5),
signingCredentials: credentials
);
return new JwtSecurityTokenHandler().WriteToken(token);
}左右滑动查看完整代码
五、错误说明
| 错误信息 | 原因 | 解决方式 |
|---|---|---|
| token 格式无效 | JWT 格式不正确 | 检查 Token 是否为标准 JWT 格式(三段 Base64URL,用 . 分隔) |
| token 缺少 access_key | Payload 中没有 access_key | 确认生成 Token 时包含了 access_key 字段 |
| 凭证不存在 | Access Key 无效 | 确认 Access Key 正确,未被删除 |
| token is expired | Token 已过期 | 每次请求重新生成 Token,确保 exp 大于当前时间 |
| signature is invalid | 签名密钥错误 | 确认使用正确的 Secret Key 原文进行签名 |
| 凭证已暂停 / 已冻结 | 凭证状态异常 | 联系管理员恢复凭证 |
| 配额不足 | 调用额度已用完 | 联系管理员增加配额 |
六、安全须知
- Secret Key 必须保密 — 仅存储在您的服务端,切勿写入前端代码、客户端 App 或提交到代码仓库。
- 每次请求生成新 Token — 建议有效期设为 5 分钟,不要长期缓存 Token。
- 仅在服务端签名 — Token 的生成必须在您的后端服务中完成,不要在浏览器或移动端直接使用 Secret Key。
- 密钥泄露立即重置 — 如果 Secret Key 泄露,请立即在系统中重置或联系管理员,旧密钥将立即失效。
