签名接口
接口由开发者服务端开发,提供给前端在 JSSDK 初始化时填入接口 URL,JSSDK 内部会自行调用。
接口的交互流程
JSSDK 内部在向开放平台发送请求获取
access_token
时,会先调用此接口获取到signature
;开发者服务端将接收到的客户端请求参数,按照签名规则计算出签名值
signature
;接口返回签名值
signature
;
接口设计
请求类型 POST
请求头(Request Headers)Content-Type: application/x-www-form-urlencoded
参数
这些参数由 JSSDK 内部自动传入,开发者仅需在 JSSDK 调用 config() 初始化时填写接口 URL。
参数名 | 类型 | 必填 | 描述 |
---|---|---|---|
client_id | String | 是 | 喜马拉雅开放平台应用公钥,即 app_key(接入方服务端需要校验入参合法性) |
device_id | String | 是 | 设备 ID (接入方服务端需要校验入参合法性) |
nonce | String | 是 | 一个随机字符串,每个请求都会重新生成(接入方服务端需要校验入参唯一性) |
timestamp | String | 是 | 当前 Unix 毫秒数时间戳,每个请求都会重新生成(接入方服务端需要校验入参唯一性) |
params | String | 是 | 用于计算签名的全部业务请求参数, JSON.stringify() 后的结果(开发者服务端需要从这里解析出参数,用于计算签名) |
返回值
返回值结构必须如下,signature 键名必须完全相同,JSSDK 内部调用时会校验 signature,并且值有效,但不校验 code 的值。
字段名 | 类型 | 描述 |
---|---|---|
code | Int | 状态码 |
message | String | 消息内容 |
signature | String | 签名值 |
示例
参数
client_id(即 app_key)是隐私信息,所以示例演示用 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 替换了。
client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&device_id=dasffasddafs12345&nonce=sbby2hyM9M×tamp=1566285175413¶ms=%7B%22client_id%22%3A%22xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%22%2C%22device_id%22%3A%22dasffasddafs12345%22%2C%22nonce%22%3A%22sbby2hyM9M%22%2C%22timestamp%22%3A1566285175413%2C%22grant_type%22%3A%22js_client_credentials%22%7D
截取 curl 的部分关键信息
curl
...
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'
--data 'client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&device_id=dasffasddafs12345&nonce=sbby2hyM9M×tamp=1566285175413¶ms=%7B%22client_id%22%3A%22xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%22%2C%22device_id%22%3A%22dasffasddafs12345%22%2C%22nonce%22%3A%22sbby2hyM9M%22%2C%22timestamp%22%3A1566285175413%2C%22grant_type%22%3A%22js_client_credentials%22%7D'
...
返回值
{
"code": 0,
"message": "success",
"signature": "8445a409c8065a9a4441959f7035b5d0"
}