前置说明

本文档将以一个例子,说明如何通过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

  • 第三步:生成签名值
  1. 使用HMAC-SHA256加密算法,将第一步中的到的源串以及第二步中得到的密钥进行加密。

  2. 然后将加密后的字符串经过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中即可完成.

文档更新时间: 2022-03-03 17:38   作者:admin