客户端在发起上传前,需要向 App 的签名派发服务器申请上传签名。客户端执行上传操作时,必须携带该签名,以便云点播验证客户端的上传是否被授权。
签名生成步骤
1. 获取云 API 密钥
获取调用服务端 API 所需的安全凭证,即 SecretId 和 SecretKey,具体步骤如下:
1.1 登录控制台,选择云产品 > 访问管理 > API密钥管理,进入“API 密钥管理”页面。
1.2 获取云 API 密钥。如果您尚未创建密钥,则单击新建密钥即可创建一对 SecretId 和 SecretKey。
2. 拼接明文串 original
按照 URL QueryString 的格式要求拼接签名明文串 original,其格式如下:
secretId=[secretId]¤tTimeStamp=[currentTimeStamp]&expireTime=[expireTime]&random=[random]
注意:
上述 original 中的
secretId
、currentTimeStamp
、expireTime
及random
需您自行替换成具体的参数值。original 至少包含
secretId
、currentTimeStamp
、expireTime
及random
四个必选参数,可包含任意多个选填参数,详细请参见 签名参数。参数值必须经过 UrlEncode,否则可能导致 QueryString 解析失败。
3. 将明文串转为最终签名(以部分 Java 代码为例)
3.1 用已获取的 SecretKey 对明文串 original 进行 HMAC-SHA1 加密,得到 signatureTmp:
Mac mac = Mac.getInstance("HmacSHA1");SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes("UTF-8"), mac.getAlgorithm());mac.init(secretKey);byte[] signatureTmp = mac.doFinal(original.getBytes("UTF-8"));
说明:
signatureTmp 是使用 UTF-8 编码、通过 HMAC-SHA1 加密出来的字节数组。
3.2 将明文串 original 使用 UTF-8 编码成字节数组,然后把 signatureTmp 与该数组进行合并,最后把合并后的结果进行 Base64 编码,得到最终签名 signature:
String signature = base64Encode(byteMerger(signatureTmp, original.getBytes("utf8")));
说明:
签名生成示例
云点播还提供了签名生成示例代码和签名工具,便于您参考和验证:
签名参数说明
参数名称 | 必选 | 类型 | 说明 |
secretId | 是 | String | |
currentTimeStamp | 是 | Integer | 当前 Unix 时间戳。 |
expireTime | 是 | Integer | 签名到期 Unix 时间戳。 expireTime = currentTimeStamp + 签名有效时长 签名有效时长最大取值为7776000,即90天。 |
random | 是 | Integer | 构造签名明文串的参数。十进制数,最大值 4294967295 (2^32-1,即32位无符号二进制数的最大值)。 |
classId | 否 | Integer | 视频文件分类,默认为0。 |
procedure | 否 | String | |
taskPriority | 否 | Integer | 视频后续任务优先级(仅当指定了 procedure 时才有效),取值范围为[-10,10],默认为0。 |
taskNotifyMode | 否 | String | 任务流状态变更通知模式(仅当指定了 procedure 时才有效)。 Finish:只有当任务流全部执行完毕时,才发起一次事件通知。 Change:只要任务流中每个子任务的状态发生变化,都进行事件通知。 None:不接受该任务流回调。 默认为 Finish。 |
sourceContext | 否 | String | |
oneTimeValid | 否 | Integer | 默认为0,表示不启用;1表示签名单次有效。 |
vodSubAppId | 否 | Integer | |
sessionContext | 否 | String | |
storageRegion | 否 | String |
单次有效签名说明
使用单次有效签名后,签名服务器需要保证每次派发给用户的签名不相同(如保证同一个时间点派发的签名
random
不重复),否则会导致重复签名的错误。签名错误导致的上传失败,如果重试,则需要获取新的签名。
Android 和 Java SDK 签名错误引起的错误状态码是
1001
。