客户端上传签名

最近更新时间:2019-06-17 12:16:13

简介

客户端在发起上传前,需要向 App 服务器请求上传签名(背景请参考 客户端上传指引)。如果 App 服务器允许客户端上传,则应按照本文介绍的签名规则为客户端生成一个上传签名。客户端执行上传操作时,必须携带该签名,让腾讯云点播验证客户端的上传是否被授权。

签名参数

参数名称 必选 类型 说明
secretId String 云 API 密钥中的 SecretId,获取方式参考 客户端上传指引 - 获取云 API 密钥
currentTimeStamp Integer 当前 Unix 时间戳。
expireTime Integer 签名到期 Unix 时间戳。
expireTime = currentTimeStamp + 签名有效时长
签名有效时长最大取值为7776000 ,即90天。
random Integer 构造签名明文串的参数,无符号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表示签名单次有效,相关错误码详见下文的单次有效签名相关部分。

    签名生成步骤

    客户端上传签名的生成步骤:

    1. 获取 API 密钥。
    2. 拼接明文串。
    3. 将明文串转为最终签名。

    注意:

    生成客户端签名代码较为复杂,点播提供了多种语言的签名生成示例代码,详细请参见 多语言签名生成示例

    第一步:获取 API 密钥

    参考 客户端上传指引 - 获取云 API 密钥 获取或者创建一个 SecretId,并拿到其对应的 SecretKey。

    第二步:拼接明文串

    按照 URL QueryString 的格式要求生成签名明文串 Original,格式如下:

    secretId=[secretId]&currentTimeStamp=[currentTimeStamp]&expireTime=[expireTime]&random=[random]

    注意:

    签名明文串 Original 需要满足:

    • 至少包含 secretId, currentTimeStamp, expireTime 和 random 四个必选参数,可包含任意多个选填参数;
    • 参数值必须经过 UrlEncode,否则可能导致 QueryString 解析失败。
    • 直接操作字符串的方式生成 Original 很容易出错,大多数编程语言均提供了相关类库帮助开发者完成 QueryString 的拼接和编码。因此,建议开发者尽量使用标准的类库来构造 Original。

    第三步:将明文串转为最终签名

    生成签名明文串 Original 后,用已获取的 SecretKey 对明文串进行 HMAC-SHA1加密,得到 SignatureTmp:

    SignatureTmp = HMAC-SHA1(secretKey, Original) 

    将密文串 SignatureTmp 放在明文串 Original 前面,拼接后进行 Base64 编码,得到最终的签名 Signature:

    Signature = Base64(append(SignatureTmp, Original)) 

    注意:

    签名密文串 SignatureTmp 的输出结果是20字节的二进制串。

    多语言签名生成示例

    此处提供多种语言平台的客户端签名生成示例,App 可以根据开发语言的偏好参考对应的示例:

    签名生成和校验工具

    此处提供了一组签名工具,帮助用户验证自己生成的签名是否正确:
    点播客户端上传 - 签名生成工具:在页面上填写签名所需要的参数和密钥,即可生成一个合法的签名。
    点播客户端上传 - 签名校验工具:对一个合法的签名进行解析,获得生成签名时所使用的参数。

    单次有效签名相关

    • 使用单次有效签名之后,签名服务器需要保证每次派发给用户的签名不相同(例如保证同一个时间点派发的签名的 random 不重复),否则会导致重复签名的错误。
    • 由签名错误导致的上传失败,如果需要重试,需要获取新的签名,否则签名重复将导致重试失败(Android 和 Java SDK 签名错误引起的错误状态码是1001)。