关于接口调用凭证
为了保障平台和用户的数据安全,大部分服务端API都需要使用接口凭证进行调用,以便平台识别调用者身份信息。
由于各种接口都有其适用的不同业务场景,对调用者的身份有不同的要求,因此平台设定了应用维度和用户维度两种不同的鉴权方式,开发者需要根据接口鉴权要求提前获取相应的调用凭证。
支持的凭证类型:
- 应用签名:开发者以应用身份调用接口,平台识别应用身份,判断应用是否具有对当前接口的调用权限。目前主要支持该方式
- 调用形式:请参考本页面的“应用签名”
- 用户凭证(user_token):开发者以已登录用户身份调用接口,平台识别用户身份,判断用户是否具有对当前接口的调用权限
- 调用形式:api_url?user_token=USER_TOKEN
应用签名
- 签名算法
- 使用HMAC-SHA256,安全性相对MD5更高
- 需要签名字段(除key外,都放到header)
- Gy-H-Api-Appid:应用id,由开放平台分配给应用的唯一ID
- Gy-H-Api-Timestamp:时间戳,单位s; 填写当前时间戳,误差5秒之内
- Gy-H-Api-Nonce-Str:随机值,可以是数字和字母的组合;长度32位
- key: 应用密钥,由开放平台分配;仅用于签名内容拼接,不能放到请求中
- 签名结果字段(放到header)
- Gy-H-Api-Sign:使用应用的密钥,通过HMAC-SHA256算法签名后,得出的结果
- 签名生成规则:将签名之外的字段用字典序排序,然后使用appid分配的对应秘钥,计算出签名。
- (1). 将参数的 key,value 进行排序 (注意排除Gy-H-Api-Sign)
- (2). 拼接成 key1=value1&key2=value2.... &的模式
- (3). 拼接秘钥 key1=value1&key2=value2.... &key=秘钥
- (4). 将上述字符串使用HMAC-SHA256签名后转为大写
- 签名示例代码
示例:
#1.对参数按照key=value的格式,并按照参数名ASCII字典序排序生成字符串:
Gy-H-Api-Appid=gy_12345&Gy-H-Api-Nonce-Str=abc123456&Gy-H-Api-Timestamp=1650966683
#2.连接密钥key:
Gy-H-Api-Appid=gy_12345&Gy-H-Api-Nonce-Str=abc123456&Gy-H-Api-Timestamp=1650966683&key=secret123456
#3.使用HMAC-SHA256签名算法生成sign并转成大写:
sign=FD4FA5DF12F81BA099506005E6E9E3B1EB74DE66D9B834F444F3A1151DD34BEF
#4.最终的提交的header参数为:(注意`这里不能提交key`)
Gy-H-Api-Appid:gy_12345
Gy-H-Api-Nonce-Str:abc123456
Gy-H-Api-Timestamp:1650966683
Gy-H-Api-Sign:FD4FA5DF12F81BA099506005E6E9E3B1EB74DE66D9B834F444F3A1151DD34BEF
如何携带用户相关信息:
- 携带方式:包头中
- 可携带字段
- Gy-H-App-User-Id: 用户在应用侧的唯一Id
- 如应用是以微信小程序,则这里可以填写微信分配给应用的用户openId
- Gy-H-App-User-Type: 用户类型,用于区分后续流程,可选
- qq:表示该账号为QQ体系账号
- wechat:表示该账号为微信体系分配的openId账号
- wecom:表示该账号为企业微信账户体系分配的账号
- Gy-H-App-User-Id: 用户在应用侧的唯一Id