签名格式: Authorization: Scheme AccessKey:Signature
德拓标准的格式:
Authorization: DATATOM AccessKey:Signature
AccessKey 和 Signature 中间用 : 号字符隔开
Signature = Base64 (strtoupper(hmac-sha1(SecretKey,uri_path)));
signature 详细计算算法如下:
1. 根据请求的url 提取path 部分
是指请求uri 中的path部分
如: http://192.168.1.1/api/idml/core/config/get ,那么path部分为:
uri_path = /api/idml/config/get
2. 根据颁发给开发用户的 SecretKey 计算 Signature, 使用 Base64 和 HMAC-SHA1算法
$signature = Base64(strtoupper(hmac-sha1(secret_key, uri_path)));
注意:HMAC-SHA1 计算出来的散列值转换成字符串,并且转换成全大写字母,再计算Base64,否则计算不一致
3. 添加授权信息到HTTP请求的 header
中
在请求http header中增加以下项:
Authorization: DATATOM AccessKey:Signature
AccessKey:Signature 中间用分号隔开, 中间不要有空隔!
eg: Authorization: DATATOM ZGF0YXRvbTpkYXRhd:G9tLmNvbS5wYXNzd29yZA==DDKJWEXAdjaJ
补充说明:
德拓数据管理引擎通过基于HMAC (Hash Message Authentication Code) 算法的自定义HTTP头来进行认证操作。
要认证一个请求, 客户端首先根据请求的Path部分和办法的secret_key计算出HMAC值,再对HMAC值做一次Base64编码这个过程被称为:请求签名(signing the request),计算出的HMAC值被称之为:签名(signature),之后,用户将该签名以参数请求的形式发给服务器。
当服务器收到该请求时, 会根据请求中的授权信息在本地进行校验合法性,并通过和客户端同样的算法计算出该请求的签名, 并进行匹配 , 匹配成功则允许操作。
HMAC-SHA1 算法的详细信息可参看 RFC 2104(http://www.ietf.org/rfc/rfc2104.txt) 标准。该算法输入两个参数:Key 和 Message,并计算出一个结果 Digest。对于德拓云来说,Key 就是 SecretAccessKey,Message 就是 UTF-8 编码的 StringToSign,计算出的结果 Digest 经过 Base64 编码之后就是 Signature。