You need to enable JavaScript to run this app.
文档中心
语音服务

语音服务

复制全文
下载 pdf
消息回执
消息回执鉴权
复制全文
下载 pdf
消息回执鉴权

说明

语音服务在回调前会对回调数据进行签名操作,如果用户已通过其他方式完成鉴权,可忽略以下内容

1. 前提

语音服务在 服务开通时,会为每个用户生成 AuthToken( 随机10位字符串 )。
用户可在基础设置页编辑 Token ,支持输入10~20位字符串

2. 描述

火山通信将在回调url时添加两个请求参数,分别为 timestampauthCode

字段说明
timestampunix时间戳(单位:秒),消息回执时间戳
authCode验证签名,根据AuthCode计算公式得出

AuthCode 计算公式

AuthCode = SHA256(timestamp + SHA256(requestBody).toHexString() + authToken).toHexString()
3. 用户侧验签流程

假设某次回调地址为

http://example.com/path?timestamp=1622539884&authCode=8090de7b7bab3d9e626280f635a60a8453d2ba75403f13aac3f4d5dccf6c2264

用户收到请求后,查询配置在语音服务侧的token为

8D202AC288

同时收到本次请求的body为

{"callId":"abcdefg","accountId":"123456789"}

获取url中的timestamp参数为

1622539884

根据公式计算AuthCode,为

8090de7b7bab3d9e626280f635a60a8453d2ba75403f13aac3f4d5dccf6c2264

与url中的参数一致,验签通过

4. AuthCode计算样例(Java)
/**

 * AuthCode工具 */public class AuthCodeUtils {
    public static String calAuthCode(String authToken, String timestamp, byte[] body) throws NoSuchAlgorithmException {
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
        // SHA256(responseBody).toHexString()
        String middleStr = Hex.encodeHexString(messageDigest.digest(body));
        // SHA256(timestamp + SHA256(responseBody).toHexString() + authToken).toHexString()
        String originStr = timestamp + middleStr + authToken;
        return Hex.encodeHexString(messageDigest.digest(originStr.getBytes(Charset.forName("UTF-8"))));
    }
}
最近更新时间:2023.03.14 15:18:06
这个页面对您有帮助吗?
有用
有用
无用
无用