JS-SDK使用权限签名算法
- JsapiToken
- 生成签名之前必须先了解一下JsapiToken,JsapiToken是开放平台用于调用APP JS接口的临时票据。正常情况下,JsapiToken的有效期为7200秒,通过accessToken来获取。由于获取JsapiToken的api调用次数非常有限,频繁刷新JsapiToken会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存JsapiToken 。
- 用accessToken 采用http GET方式请求获得JsapiToken(有效期7200秒,开发者必须在自己的服务全局缓存accessToken):https://api.open.imasheng.com/openapi/token/getJsapiToken?accessToken=***
成功返回如下JSON:
{
"jsapiToken":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expiresIn":7200
}
- 获得JsapiToken之后,就可以生成JS-SDK权限验证的签名了。
- 签名算法
- 签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的JsapiToken, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
- 即signature=sha1(string1)。 示例:
- noncestr=Wm3WZYTPz0wzccnW
jsapiToken=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://www.baidu.com?params=value
-
步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
jsapiToken=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://www.baidu.com?params=value
-
步骤2. 对string1进行sha1签名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
注意事项
签名用的noncestr和timestamp必须与配置data中的nonceStr和timestamp相同。
签名用的url必须是调用JS接口页面的完整URL。
出于安全考虑,开发者必须在服务器端实现签名的逻辑。