JSAPI鉴权流程
【摘要】 鉴权流程部分JSAPI需要先完成鉴权方可调用,请参考鉴权流程完成鉴权。不需要鉴权的JSAPI调用请参考。鉴权流程步骤描述1服务端获取access_token2服务端获取jsapi_ticket3服务端计算签名信息生成signature4前端H5页面使用 HWH5.config 方法进行签名校验第一步:服务端获取access_token详情参考第二步:服务端获取jsapi_ticket请求格式...
鉴权流程
部分JSAPI需要先完成鉴权方可调用,请参考鉴权流程完成鉴权。不需要鉴权的JSAPI调用请参考。
鉴权流程
步骤 | 描述 |
---|---|
1 | 服务端获取access_token |
2 | 服务端获取jsapi_ticket |
3 | 服务端计算签名信息生成signature |
4 | 前端H5页面使用 HWH5.config 方法进行签名校验 |
第一步:服务端获取access_token
第二步:服务端获取jsapi_ticket
请求格式说明
请求方式: GET (HTTPS)
请求头部:
x-wlk-Authorization: access_token
请求地址:
https://open.welink.huaweicloud.com/api/auth/v1/jstickets
请求参数: 无
响应格式说明
返回结果:
{ "code": "0", "message": "ok", "jstickets": "A593A60B5594D4A157AE85E05DE4C77E0517CEFBE2337522E5386D2A3E9BF7CD"}
返回参数说明:
参数 | 说明 |
---|---|
code | 数据正常返回“0”,如果发生错误,会返回对应的错误码 |
message | 返回信息,包括接口请求发生错误时的详细信息 |
jstickets | JSAPI凭证 |
错误码说明:
code | message |
---|---|
41600 | token invalid,to get jstickets Exception! |
第三步:服务端计算签名信息生成signature
参数说明
参数 | 说明 |
---|---|
jsapi_ticket | jstickets |
noncestr | 随机数 |
timestamp | 签名的时间戳 |
url | 当前页面的路径 |
使用说明
1、将所有参数拼接成一个字符串进行sha1加密,参考下文示例,获得签名信息。
2、url是完整的url,包括 http(s)
协议部分和‘?’后面的Get参数部分,但不包括‘#’后面的内容。生成签名用的url需要对页面url的query部分做一次urldecode。
例如,如果url是
http://abc.com?url=http%3A%2F%2Fabc.com%2somewhere
那么生成签名用到的url应该是对原url做过decode的url,即
http://abc.com?url=http://abc.com/somewhere
代码示例
Java示例:
public static String sign(String jsticket, String nonceStr, long timeStamp, String url) throws OApiResultException { String urldecode = java.net.URLDecoder.decode(url, "UTF-8"); String plain = "jsapi_ticket=" + jsticket + "&noncestr=" + nonceStr + "×tamp=" + String.valueOf(timeStamp) + "&url=" + urldecode; try { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); sha256.reset(); sha256.update(plain.getBytes("UTF-8")); return bytesToHex(sha256.digest()); } catch (NoSuchAlgorithmException e) { throw new OApiResultException(e.getMessage()); } catch (UnsupportedEncodingException e) { throw new OApiResultException(e.getMessage()); } }
Python示例:
import hashlibfrom time import timedef sign(jsticket, nonceStr, url, timeStamp): plain = 'jsapi_ticket=' + jsticket +\ '&noncestr=' + nonceStr +\ '×tamp=' + str(timeStamp) +\ '&url=' + url sha = hashlib.sha256() sha.update(plain.encode('utf-8')) return sha.hexdigest() if __name__ == '__main__': timeStamp = "1562132124" jsticket = "7327E371B4076F02AD2E95A24536640F5E171B1A5A7D2AA25FD4B79AA850B39A1C8B1CAF44331A0DE57D6188DC3A85F6FBCCA9F17DF45AFDA307FB55665D" nonceStr = "2019-04-09" url = "http://grapejuice.vhooper.myhuaweicloud.com/h5/jsonline/" print('signature is :' + sign(jsticket, nonceStr, url, timeStamp)) >> signature is :0ae401929f84c98d68ec794ca6fd7b893800cf21ac516892b501db9aa3ba7bfe
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)