JSAPI鉴权流程

举报
云会议运营喵大人 发表于 2020/02/17 15:11:49 2020/02/17
【摘要】 鉴权流程部分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返回信息,包括接口请求发生错误时的详细信息
jsticketsJSAPI凭证

错误码说明:

codemessage
41600token invalid,to get jstickets Exception!

第三步:服务端计算签名信息生成signature

参数说明
参数说明
jsapi_ticketjstickets
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 + "&timestamp=" + 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 +\          '&timestamp=' + 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。