获取凭证

开放平台为每个应用分配一套凭证。S2S 接口使用 AppKey + AppSecret 进行请求签名; 了解签名算法是正确调用接口的前提。

在哪里找凭证

登录控制台,进入「应用管理」,点击应用名称, 在「凭证管理」Tab 中可查看:

凭证名称示例格式查看方式
App ID100023(纯数字)直接显示,即 X-App-Id 请求头的值
AppKeyak_live_xxxxxxxxxxx明文显示,参与签名计算
AppSecretsk_live_xxxxxxxxxxx输入登录密码二次验证后方可查看
AppSecret 仅在二次验证后可见一次,请立即复制保存到安全位置(如密钥管理服务)。 如遗失可在控制台重置,旧密钥立即失效,需同步更新所有调用方。

凭证说明

凭证用途是否在请求中直接传输
App ID标识调用方身份,平台据此隔离数据是,作为 X-App-Id Header
AppKey参与签名计算(不单独传输)否,仅用于本地生成签名
AppSecret签名密钥,绝对保密否,仅在服务端本地使用

S2S 签名鉴权

S2S 接口(/open/v1/...)使用请求签名方式鉴权,每次请求需在 Header 中携带以下三个字段:

Header类型必填说明
X-App-Idstring控制台中的 App ID(数字字符串)
X-TimestampintegerUnix 秒级时间戳,有效窗口 ±5 分钟(防重放)
X-SignaturestringMD5 签名,见下方算法

签名算法

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 泄漏,立即在控制台重置,旧密钥即刻失效