前置说明
本文档将以一个例子,说明如何通过OAuth1 2-Legged方式访问API
访问例子接口:GET https://api.dev.kingxunlian.com/plat/company/current-user/get
提前参数准备
参数名 | 说明 | 来源 | 对应Oauth参数(需编码转化) |
---|---|---|---|
appKey | 应用Key | app上架后生成 | oauth_consumer_key |
appSecret | App秘钥 | app上架后生成 | oauth_consumer_secret |
token | 租户(公司)的授权Key | 租户激活API app后生成 | oauth_token |
tokenSecret | 租户(公司)授权秘钥 | 租户激活APP app后生成 | oauth_token_secret |
- 关于token和tokenSecret,管理员在应用管理激活API对接 app后生成。如下图所示:
- 相关算法说明
简写 | 名称 | 说明 | |
---|---|---|---|
url.encode | URL编码 | 可将字符串以URL编码 | |
url.decode | URL解码 | 本函数对字符串进行URL解码 | |
base64.encode | base64编码 | Base64就是一种基于64个可打印字符来表示二进制数据的方法 | |
base64.decode | base64解码 | Base64就是一种基于64个可打印字符来表示二进制数据的方法 | |
HmacSHA256 |
目的
访问 GET https://api.dev.kingxunlian.com/plat/company/current-user/get
需要准备的oauth参数如下:
参数key | value | value例子 | 说明 |
---|---|---|---|
oauth_consumer_key | url.encode(appKey) | OAUTH.2LEGGED.APP | 应用的唯一Key标记 |
oauth_token | url.encode(tokenKey) | M2EyZDU2ZjM0ZDQ3NDFjZmIzYTliNzJkYmU2MjA1NjA%3D | 租户(公司)授权的Key标记 |
oauth_signature_method | HMAC-SHA256 | HMAC-SHA256 | 签名方法,暂只支持HMAC-SHA256,必须为”HMAC-SHA256” |
oauth_timestamp | url.encode(“时间戳”) | 1554281731 | 时间戳(秒) |
oauth_nonce | url.encode(“随机字符串”) | JObPuLS38Mp | 单次值,随机生成32位字符串,防止重放攻击(每次请求必须不同) |
oauth_version | 1.0 | 1.0 | 版本号,必须为”1.0” |
oauth_signature | 待生成 | 待生成 |
方法
一、获取签名
- 第一步:构造待签名源串.
Step1:
获取请求方法,得到Step1结果
GET
Step2:
将请求的URI路径进行URL编码,得到Step2结果
https%3A%2F%2Fapi.dev.kingxunlian.com%2Fplat%2Fcompany%2Fcurrent-user%2Fget
Step3:
将除“oauth_signature”外的所有参数按key进行字典升序排列,得到:
oauth_consumer_key,oauth_nonce,oauth_signature_method,oauth_timestamp,oauth_version
排序后的参数(key=value)用&拼接起来,并进行URL编码,得到Step3结果
oauth_consumer_key%3DOAUTH.2LEGGED.APP%26oauth_nonce%3DJObPuLS38Mp%26oauth_signature_method%3DHMAC-SHA256%26oauth_timestamp%3D1554281731%26oauth_token%3DM2EyZDU2ZjM0ZDQ3NDFjZmIzYTliNzJkYmU2MjA1NjA%253D%26oauth_version%3D1.0
Step4:
将Step1 + “&” + Step2 + “&” +Step3,得到Step4以及第一步结果,即待签名字符串
GET&https%3A%2F%2Fapi.dev.kingxunlian.com%2Fplat%2Fcompany%2Fcurrent-user%2Fget&oauth_consumer_key%3DOAUTH.2LEGGED.APP%26oauth_nonce%3DJObPuLS38Mp%26oauth_signature_method%3DHMAC-SHA256%26oauth_timestamp%3D1554281731%26oauth_token%3DM2EyZDU2ZjM0ZDQ3NDFjZmIzYTliNzJkYmU2MjA1NjA%253D%26oauth_version%3D1.0
- 第二步:构造秘钥
将 url.encode(appSecret) + “&” + url.encode(tokenSecret),得到第二步结果,秘钥
MzE4ODJjNThiMDE5NDE4MDg0YmQ3NGVlNDVjNTJkNWY%3D&YjllZmEzYWU2NjM4NDUwOTk3ODU2YWRjNWM2YmE3MGY%3D
- 第三步:生成签名值
使用HMAC-SHA256加密算法,将第一步中的到的源串以及第二步中得到的密钥进行加密。
然后将加密后的字符串经过Base64编码,编码后进行url.encode,即得到oauth_signature签名参数的值。
即:
eLs2OgUDzoawLHmuiw42a0pdtVPsb895sQT0DDMd8SU%3D
二、构造请求
可得下列参数
oauth_consumer_key OAUTH.2LEGGED.APP
oauth_token M2EyZDU2ZjM0ZDQ3NDFjZmIzYTliNzJkYmU2MjA1NjA%3D
oauth_signature_method HMAC-SHA256
oauth_timestamp 1554281731
oauth_nonce JObPuLS38Mp
oauth_version 1.0
oauth_signature eLs2OgUDzoawLHmuiw42a0pdtVPsb895sQT0DDMd8SU%3D
将上述参数(key=”value”)并用逗号,拼接起来,并在前面增加”OAuth “,可获得字符串
OAuth oauth_consumer_key=”OAUTH.2LEGGED.APP”,oauth_token=”M2EyZDU2ZjM0ZDQ3NDFjZmIzYTliNzJkYmU2MjA1NjA%3D”,oauth_signature_method=”HMAC-SHA256”,oauth_timestamp=”1554281731”,oauth_nonce=”JObPuLS38Mp”,oauth_version=”1.0”,oauth_signature=”eLs2OgUDzoawLHmuiw42a0pdtVPsb895sQT0DDMd8SU%3D”
注意:注意引号、空格…
将此字符串写入请求Header的Authorization中即可完成.