本开放API使用HMAC方式进行第三方身份使用认证。HMAC(密钥散列消息认证码,英语:Keyed-hash message authentication code),是一种通过特别计算方式之后产生的消息认证码(MAC),使用密码散列函数,同时结合一个加密密钥。它可以用来保证数据的完整性,同时可以用来作某个消息的身份验证。
1.HTTP的REST结构图
|----- PART 1 -----|-------------- PART 2 --------------|
+-------------------------------------------------------+
| URL | HEADER | BODY |
+-------------------------------------------------------+
| | |
\ / \ / \ /
{ path-para } 通用头部 jsonFields
[ query_para ] 认证头部
2.申请apiKey和secretKey
在使用本开放平台之前,您需要申请属于您的apiKey和secretKey
3.RESTful授权请求
POST /ws-rest/v1/users/147/envelopes HTTP/1.1
Accept: application/json
Content-Type: application/json
Date: Wed, 02 Nov 2016 03:25:54 GMT
Authorization:HmacSHA512 a1S0H2-U0-v5I-0586-017-z6D-7B5-K0h-1o0-G0-9923G3Xm:53f7ae4a-937b-4ddc-8872-42dd094d56eb:NCMwvHfZS9ZzB2SgVbRzTuS/N5yDRM8Ak6tRvCavHD5T9nKjydc9ha+Rj48e0YIFC5V9IRtFL8Z1d0hvse7Ulg==
User-Agent: SignIt RestAPI Client v1.0.0
Host: localhost:8080
名称 | 释义 |
---|---|
POST | 请求方法 |
Accept | 客户端期望接收数据类型 |
Content-Type | 发起的请求内容类型 |
Date | 请求时间 |
Authorization | 认证信息 |
User-Agent | 用户代理 |
Host | 请求主机信息 |
4.认证信息头
Authorization:<algorithm> <apiKey>:<nonce>:<signature>
名称 | 释义 | 内容 |
---|---|---|
algorithm | 摘要算法 | 默认为 HmacSHA512 |
apiKey | apiKey | 接口访问的授权码,由申请获得的 |
nonce | 随机数 | 客户端生成的随机数(至少16位) |
signature | 摘要值 | Base64编码后的摘要值 |
5.signature构建方法
1.使用secretKey作为HMAC需要的密钥KEY:
2.根据KEY和algorithm初始化HMAC,将以下字段根据"名称"字典序后取其对应值,且值间以'\n'分隔(最终以'\n'结尾)的累积更新摘要,生成最终摘要值:
名称 | 释义 |
---|---|
apiKey | 由申请获得的接口访问的授权码 |
contentType | 请求内容类型 |
date | 请求时间 |
host(serverName:serverPort) | 请求主机信息(访问地址:访问端口) |
method | 请求方式 |
nonce | 随机数 |
payload | 请求体内容数据 |
resource | 请求资源URI |
scheme | 协议类型(如:http/https/ftp等) |
3.将2中得到的摘要值进行Base64编码,得到最终signature:
6.响应
验证成功后,您将收到请求操作的返回结果:
{
"resultStatusCode":"100600000",
"resultCode":0,
"resultDesc":"\u521b\u5efa\u4fe1\u5c01\u6210\u529f",
"resultData":{
"envelopeId":"978dc60b-af1c-4227-9ddf-3be73ab75e96",
"link":
{"href":"/ws-rest/v1/users/978dc60b-af1c-4227-9ddf-3be73ab75e96/envelopes/{envelope-id}",
"method":"GET"
},
"statusDatetime":1478058994000,"type":0,"status":0}
}