Skip to content

Latest commit

 

History

History
115 lines (89 loc) · 5.35 KB

token_format.md

File metadata and controls

115 lines (89 loc) · 5.35 KB

#羚羊云token认证机制 ##1 羚羊云的身份验证方式 羚羊云采用目前web领域普遍的认证方式:基于token的身份验证。

无论是调用羚羊云Web API或者客户端SDK的接口,需要将token作为参数传入,在羚羊云服务端进行身份验证。

##2 羚羊云token内容格式

格式:{明文段}_{验证码}

样式:cid_control_expire_[vod_time]_[ip]_[refer]_digest

其中: **cid_control_expire_[vod_time]_[ip]_[refer]为明文段,[ ]**标记表示可选字段。 digest为验证码

举例: 537067556_3222536192_1493481600_f0399b369aa760362ac4edd224bae23b

##3 token明文段 token明文段包含以下字段:

字段 含义
cid 设备id,为访问云平台的设备id,如摄像机或需要p2p通讯或直播的手机id,在参与计算token时采用4字节整数方式;
control 控制字段,表示此设备将使用的平台功能权限,在参与计算token时采用4字节整数方式;该字段各个字节和位所表达的意思请见下文的control字段介绍。
expire 过期时间,指token的有效时间,为Unix时间戳(秒级精度,4字节)在参与计算token时采用4字节整数方式;
vod_time 点播时间,指点播时对应的录制时间,同时也是点播文件的文件名部分,在参与计算token时采用4字节整数方式;
ip 指设备的公网ip地址,在计算token时采用4字节整数方式;
refer http请求时的refer地址中的域名部分,这个字段一般用来启用防盗链功能,在参与计算token时采用字符串方式;

注意: 除refer字段外,所有的字段都是主机字节序(Little-Endian小端存储),无符号四字节整数类型;

##4 token明文段的control字段 第一字节为int类型的低位,第四字节为int类型的高位

| 第一字节(推送播放验证) | 第二字节(录制控制) | 第三字节(播放控制)| 第四字节(多码流保留)|

  • 第一字节(0-7位):验证及推送控制字段 0位: 是否开启rtmp直播 1位: 是否开启hls直播 2位: 是否验证推送ip 3位: 是否验证refer 4位: UDP standby,是否可以接受UDP连接 5-7位:保留

  • 第二字节(0-7位):录制控制 0-3位: 存储时间权限, 0000=>没有存储权限, 0001=>存储7天, 0010=>存储30天,0011=>90天其他保留 4位 : FLV 持久化开关,默认为 0 不打开 5位 : HLS 持久化开关,默认为 0 不打开 6-7位: 保留

  • 第三字节(0-7位):播放控制 0位:能否观看公众 1位:能否观看私有 2位:能否观看时移 3位:能否观看录像 4位:能否语音回传 5位:能否视频回传 6位:能否查看截图 7位:能否收听声音

##5 token验证码 由明文串配上羚羊云提供的密钥,通过HMAC-MD5标准算法,生成token的验证码部分。验证码为16个无符号的字节数组。

  • 明文串格式:各个字段按顺序无缝拼接而成,长度根据字段数目不同而不定。例如:53706755632225361921493481600 其中:537067556为cid字段,3222536192为control字段,1493481600为expire字段。
  • 密钥:羚羊云提供给用户的appkey。
  • 生成的验证码:16进制32个字符的字符串。
  • 验证码生成的示例代码:
    //C语言代码,并不完整,仅作为示例以供参考

    unsigned int cid = 537067556;
	unsigned int control = 3222536192;
	unsigned int expire = 1493481600;
	unsigned char src[12];
	char token[100];
	memcpy(src, &cid, 4);
	memcpy(src+4, &control, 4);
	memcpy(src+8, &expire, 4);
    char key[50] = "abcdefghijklmnopqrstuvwxyz123456";
	unsigned char digest[16];

	int ret = hmac_md5((unsigned char*)key,strlen(key),src,12,digest);
	if(ret != 0)
	{
		return -1;
	}

	snprintf(token, sizeof(token), “%u_%u_%u_%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x, cid, control, expire, digest[0] , digest[1] , digest[2] , digest[3] , digest[4] , digest[5] , digest[6] , digest[7] , digest[8] , digest[9] , digest[10] , digest[11] , digest[12] , digest[13] , digest[14] , digest[15]”);

	return 0;

##6 羚羊云token类型 根据设备(包括手机、摄像头等)所处于羚羊云端点的不同,token分为设备token和访问token。本方所携带的token称为设备token,对端设备的token称为访问token。

  • 设备token

明文组成部分为cid + control + expire + [ip]; [ip]:可选项,如果control字段里面设置验证IP的标志位,则IP字段需要加入到用于token验证码计算的明文中。

  • 访问token

明文组成部分为cid + control + expire + [vod_time] + [ip] + [refer]; 按照访问方式不同,[]中的可选项又分为以下几种情况: [vod_time]:只有在看http点播时必须使用,其他情况不得添加; [ip]:可选项,如果control字段里面设置验证IP的标志位,则IP字段需要加入到用于token验证码计算的明文中; [refer]:可选项,并只有在http访问方式下使用,如果control里设置了验证refer标志位,则refer字段需要加入到用于token验证码计算的明文中。

##相关链接 羚羊云SDK接入指南 羚羊云推拉流URL格式解析