@soszrg
2019-12-12T08:24:54.000000Z
字数 3284
阅读 662
yunhe
在header中添加头域Yunhe_Autorization,值为认证字符串(生成规则参考下面描述)的Base64结果;
Yunhe_Autorization: Base64(认证字符串)
yunhe-auth/{version}/{client_type}/{auth_id}/{timestamp}/{nonce}/{region}/{service}/{signature}
| 段 | 说明 |
|---|---|
| yunhe-auth | 固定头 |
| version | 认证规则版本,目前为v1 |
| client_type | 客户端类型,取值:设备 device, 手机应用 app,web前端:web |
| auth_id | 用于认证的ID信息:设备 产品id,app 应用id,web前端 AccessKeyId |
| timestamp | 请求时间戳(毫秒级,整型) |
| nonce | 唯一随机数。用于防止网络重放攻击。用户在不同请求中要使用不同的随机数值,可以用UUID |
| region | 请求资源所在区域,当前固定值all |
| service | 请求服务,当前固定值yunhe |
| signature | 签名 |
生成方式:HMAC-SHA256-HEX(SecretAccessKey,SignString)
计算公式为: SignString = HTTP Method + "\n" + CanonicalURI + "\n" + CanonicalQueryString + "\n" + CanonicalHeaders,
指HTTP协议中定义的GET、PUT、POST等请求,必须使用全大写的形式。yunhe API所涉及的HTTP Method有如下四种:
CanonicalURI是对URL中的绝对路径进行编码后的结果,即CanonicalURI = UriEncodeExceptSlash(Path)。要求绝对路径Path必须以“/”开头和结尾,不以“/”开头和结尾的需要补充上,空路径为“/”,。
说明
相关举例:
若URL为https://yunhe.com/example/测试/,则其URL Path为/example/测试/,将之规范化得到CanonicalURI = /example/%E6%B5%8B%E8%AF%95/。
CanonicalQueryString对于URL中的Query String(Query String即URL中“?”后面的“key1 = valve1 & key2 = valve2 ”字符串)进行编码后的结果。
编码步骤如下
编码示例
获取URL为https://yunhe.com/example?text&text1=测试&text10=test的CanonicalQueryString
# 认证字符串:yunhe-auth/v1/device/123/456/789/all/yunhe/signature# 拆分出的编码内容:{"verison":"v1","client_type":"device","auth_id":"123","timestamp": "456","nonce":"789","region":"all","service":"yunhe"}
{"host": "yunhe.com""verison":"v1","client_type":"device","auth_id":"123","nonce":"456","region":"all","service":"yunhe"}
auth_id%3d123&client_type%3ddevice&host%3dyunhe.com&nonce%3d456®ion%3dall&service%3dyunhe&verison%3dv1
# signaturesignature = HMAC-SHA256-HEX(SecureAccessKey, SignString)# 认证字符串sign_str = yunhe-auth/{version}/{client_type}/{auth_id}/{timestamp}/{nonce}/{region}/{service}/{signature}# 使用时记得对认证字符串进行BASE64编码