sdksid接口验证指南
一、什么是sdksid
sdksid是点播sdk请求点播服务api传递的验证参数,对应单独的接口验证方式,此验证方式称作sdksid接口验证。与之对应的是点播旧版sdk使用thqs算法生成签名的接口验证方式。
二、sdksid的使用流程
app调用sdk功能api, 使用sdksid验证方式时需要调用对应的api, 具体参照SDK开发指南。
sdk在请求获得场景服务端接口时,先回调app获取sdksid。
app在回调函数中请求app服务端接口获取sdksid,app可对sdksid做缓存。
app服务端接口按照指定规则计算sdksid, 此接口可以增加一些接口验证,如登录状态等,避免随意请求。
app服务端接口将计算好的sdksid和sdksid截止过期时间戳(秒)返回给app, app可将sdksid及其截止过期时间戳(秒)缓存起来,下次回调时可复用, 是否缓存及缓存方式由app实现,需要保证缓存过期时间小于生成sdksid时指定的截止过期时间戳(秒)。
app回调函数将sdksid返回给sdk。
sdk将 sdksid + userid + 业务参数提交给获得场景服务器接口进行校验, 其中sdksid是存放在请求头Sdk-Sid中。
获得场景服务器接口校验sdksid,确认合法性。
校验通过后,会向sdk提供正常服务。
三、sdksid的生成规则
sdksid的生成分为三步:
生成一个字符串qs, qs="expire=截止过期时间戳(秒)&time=当前时间戳(秒)"
生成一个hash值, hash=md5(qs + 点播key)
生成sdksid, sdksid = Base64.encode(qs + "&hash=" + hash)
以上字符串拼接顺序不可改变。
java示例代码如下:
/**
* 生成sdksid字符串
* @param vodKey 点播key
* @return 返回sdkSid字符串
*/
public static String createSdksid(String vodKey) {
long nowTime = System.currentTimeMillis() / 1000;
String qs = String.format("expire=%s&time=%s", nowTime + 600, nowTime);
// 将拼接后的字符串qs加上点播key后通过md5生成hash签名
String hash = Hashlib.md5(qs + vodKey);
// 将hash与之前的字符串qs拼接在一起,hash参数必须拼接在最后边
qs = qs + "&hash=" + hash;
// 将最终的qs字符串进行Base64编码后生成新字符串返回,返回结果即为sdksid
return new String(Base64.getEncoder().encode(qs.getBytes()), StandardCharsets.UTF_8);
}
某些app中可能使用多个获得场景的账号,sdksid只能用于其生成时对应点播key的账号,不可在多个账号之间共用。
四、测试demo sdksid的生成
为了方便sdk demo的运行,sdk demo在服务端生成sdksid的接口由点播服务端提供,只给demo中指定的测试账号使用。