获取凭证
开放平台为每个应用分配一套凭证。S2S 接口使用 AppKey + AppSecret 进行请求签名; 了解签名算法是正确调用接口的前提。
在哪里找凭证
登录控制台,进入「应用管理」,点击应用名称, 在「凭证管理」Tab 中可查看:
| 凭证名称 | 示例格式 | 查看方式 |
|---|---|---|
| App ID | 100023(纯数字) | 直接显示,即 X-App-Id 请求头的值 |
| AppKey | ak_live_xxxxxxxxxxx | 明文显示,参与签名计算 |
| AppSecret | sk_live_xxxxxxxxxxx | 输入登录密码二次验证后方可查看 |
AppSecret 仅在二次验证后可见一次,请立即复制保存到安全位置(如密钥管理服务)。 如遗失可在控制台重置,旧密钥立即失效,需同步更新所有调用方。
凭证说明
| 凭证 | 用途 | 是否在请求中直接传输 |
|---|---|---|
| App ID | 标识调用方身份,平台据此隔离数据 | 是,作为 X-App-Id Header |
| AppKey | 参与签名计算(不单独传输) | 否,仅用于本地生成签名 |
| AppSecret | 签名密钥,绝对保密 | 否,仅在服务端本地使用 |
S2S 签名鉴权
S2S 接口(/open/v1/...)使用请求签名方式鉴权,每次请求需在 Header 中携带以下三个字段:
| Header | 类型 | 必填 | 说明 |
|---|---|---|---|
X-App-Id | string | 是 | 控制台中的 App ID(数字字符串) |
X-Timestamp | integer | 是 | Unix 秒级时间戳,有效窗口 ±5 分钟(防重放) |
X-Signature | string | 是 | MD5 签名,见下方算法 |
签名算法
X-Signature = md5(app_key + timestamp + app_secret + request_body)拼接规则:
app_key:控制台 AppKey 原始字符串timestamp:与X-Timestamp值相同的字符串app_secret:控制台 AppSecret 原始字符串request_body:请求体 JSON 字符串(GET 请求传空字符串"")
对以上四段直接拼接后取 MD5,结果为 32 位小写十六进制字符串。
签名示例
// PHP
$appKey = "ak_live_abc123";
$appSecret = "sk_live_xyz789";
$timestamp = time(); // 当前 Unix 时间戳
$body = '{"channel_user_id":"u001","user":{"name":"张三"}}';
$signature = md5($appKey . $timestamp . $appSecret . $body);
// 请求头
X-App-Id: 100023
X-Timestamp: {$timestamp}
X-Signature: {$signature}# Python
import hashlib, time, json
app_key = "ak_live_abc123"
app_secret = "sk_live_xyz789"
timestamp = str(int(time.time()))
body = json.dumps({"channel_user_id": "u001", "user": {"name": "张三"}}, ensure_ascii=False)
raw = app_key + timestamp + app_secret + body
signature = hashlib.md5(raw.encode("utf-8")).hexdigest()签名计算在服务端完成后,客户端仅转发已带签名头的请求, 不需要在移动端持有 AppKey / AppSecret。
安全注意事项
- AppSecret 只能存储在服务端(服务器环境变量 / 密钥管理服务),严禁写入客户端代码
- 不要将 AppSecret 提交至代码仓库(建议在
.gitignore中排除.env文件) - 建议定期轮换 AppSecret,控制台支持平滑轮换(旧密钥有 10 分钟宽限期)
- 如发现 AppSecret 泄漏,立即在控制台重置,旧密钥即刻失效