文档平台 视频处理 API 文档 鉴权及签名文档

鉴权及签名文档

最近更新时间:2018-05-28 15:51:31

查看pdf

注意:以下鉴权与签名方法,仅适用于原微视频用户,新用户请参见COS上传API请求签名

1 签名与鉴权

腾讯移动服务通过签名来验证请求的合法性。开发者通过将签名授权给客户端,使其具备上传下载及管理指定资源的能力。签名分为多次有效签名单次有效签名
多次有效签名:签名中不绑定文件fileid,需要设置大于当前时间的有效期,有效期内此签名可多次使用,有效期最长可设置三个月。
单次有效签名:签名中绑定文件fileid,有效期必须设置为0,此签名只可使用一次,且只能应用于被绑定的文件。
具体适用场景参见签名适用场景

2 签名算法

2.1 获取签名所需信息

生成签名所需信息包括项目ID(appid),空间名称(bucket,视频资源的组织管理单元),项目的Secret ID和Secret Key。获取这些信息的方法如下:
1) 登录 微视频-视频空间, 进入视频空间;
2) 如开发者未创建视频空间,可添加视频空间,空间名称(bucket)由用户自行输入;
3) 登录视频空间-项目设置,进入项目设置;
4) 如果开发者未添加密钥,则需添加密钥,获取项目的Secret ID和Secret Key,每个项目最多添加两对密钥;如果已经添加过密钥则直接获取项目的Appid、Secret ID和Secret Key。
注:
(1) 添加视频空间可参考添加视频空间
(2) 密钥管理可参考添加密钥

2.2 拼接签名串

拼接多次有效签名串:
a=[appid]&b=[bucket]&k=[SecretID]&e=[expiredTime]&t=[currentTime]&r=[rand]&f=
拼接单次有效签名串:
a=[appid]&b=[bucket]&k=[SecretID]&e=[expiredTime]&t=[currentTime]&r=[rand]&f=[fileid]

签名串中各字段含义如下:

字段 解释
a 开发者的项目ID,接入微视频创建空间时系统生成的唯一标识项目的ID,即Appid
b 视频空间名称bucket
k 项目的Secret ID
e 签名的有效期,是一个符合UNIX Epoch时间戳规范的数值,单位为秒;单次签名时,e必须设置为0
t 当前时间戳,是一个符合UNIX Epoch时间戳规范的数值,单位为秒,多次签名时,e应大于t
r 随机串,无符号10进制整数,用户需自行生成,最长10位
fileid 资源存储的唯一标识,格式为"/appid/bucketname/用户自定义路径或资源名",并且需要对其中非'/'字符进行urlencode编码

注:
拼接单次有效签名的签名串时,过期时间e必须设置为0,以保证此签名只能只能针对固定资源且只能使用一次;
删除文件必须使用单次有效签名;
上传必须使用多次有效签名;

具体适用场景参见签名适用场景

2.3 生成签名

  1. 微视频使用 HMAC-SHA1 算法对请求进行签名;
  2. 签名串需要使用 Base64 编码。
    即生成签名的公式如下:

    SignTmp = HMAC-SHA1(SecretKey, orignal)
    Sign = Base64(SignTmp.orignal)

其中SecretKey为2.1节获取的Secret Key,orignal为2.2节中拼接好的签名串,首先对orignal使用HMAC-SHA1算法进行签名,然后将orignal附加到签名结果的末尾,再进行Base64编码,得到最终的sign。
注:此处使用的是标准的Base64编码,不是urlsafe的Base64编码,请注意。

3 实例

本节介绍生成签名的算法实例,实例中使用PHP语言,如果开发者使用其他与开发,请使用对应的算法。

3.1 获取签名所需信息

获取得到的签名所需信息如下。

项目ID:200001
空间名称(bucket):newbucket
Secret ID:AKIDUfLUEUigQiXqm7CVSspKJnuaiIKtxqAv
Secret Key:bLcPnl88WU30VY57ipRhSePfPdOfSruK

3.2 拼接签名串

拼接的多次有效签名串如下:
a=200001&b=newbucket&k=AKIDUfLUEUigQiXqm7CVSspKJnuaiIKtxqAv&e=1438669115&t=1436077115&r=11162&f=
拼接的单次有效签名串如下:
a=10001290&b=tencentyun&k=AKIDgaoOYh2kOmJfWVdH4lpfxScG2zPLPGoK&e=0&t=1436077115&r=11162&f=tencentyunSignTest


$appid = "200001";
$bucket = "newbucket";
$secret_id = "AKIDUfLUEUigQiXqm7CVSspKJnuaiIKtxqAv";
$secret_key = "bLcPnl88WU30VY57ipRhSePfPdOfSruK";
$expired = time() + 60;
$onceExpired = 0;
$current = time();
$rdm = rand();
$userid = "0";
$fileid = "/200001/newbucket/tencent_test.jpg";

$srcStr = 'a='.$appid.'&b='.$bucket.'&k='.$secret_id.'&e='.$expired.'&t='.$current.'&r='.$rdm.'&f=';

$srcStrOnce= 'a='.$appid.'&b='.$bucket.'&k='.$secret_id.'&e='.$onceExpired .'&t='.$current.'&r='.$rdm
.'&f='.$fileid;

3.3 生成签名


$signStr = base64_encode(hash_hmac('SHA1', $srcStr, $secret_key, true).$srcStr);

$signStrOnce = base64_encode(hash_hmac('SHA1',$srcStrOnce,$secret_key, true).$srcStrOnce);

echo $signStr."\n"; 

echo $signStrOnce."\n";

最终得到的多次有效签名为:
vxzLR6vzMNhBMUVzMTWKUB+LMeVhPTIwMDAwMSZrPUFLSURVZkxVRVVpZ1FpWHFtN0 NWU3NwS0pudWFpSUt0eHFBdiZlPTE0Mzc5OTU3MDQmdD0xNDM3OTk1NjQ0JnI9MjA4 MTY2MDQyMSZmPSZiPW5ld2J1Y2tldA==

单次有效签名为:
f11dDSuw86CR02Ko1INzsZstbRlhPTIwMDAwMSZrPUFLSURVZkxVRVVpZ1FpWHFtN0 NWU3NwS0pudWFpSUt0eHFBdiZlPTAmdD0xNDM3OTk1NjQ1JnI9MTE2NjcxMDc5MiZm PS8yMDAwMDEvbmV3YnVja2V0L3RlbmNlbnRfdGVzdC5qcGcmYj1uZXdidWNrZXQ=

4 签名适用场景

微视频对签名的适用场景做了如下限制:

场景 适用签名
下载(不开启token防盗链) 不验证签名
上传 多次有效签名
查询目录、文件
创建目录
下载(开启token防盗链)
删除目录、文件 单次有效签名
更新目录、文件

如果有其他疑问,您也可以在问答社区中寻求帮助。前往问答社区 >