概述
日志易RESTful API提供对日志易系统的调用接口。当前仅作为日志易企业版的一部分发布,便于用户以灵活的方式集成日志易系统。
签名验证
概述
访问日志易RESTful API服务需要进行签名验证。签名验证的目的是:
- 验证用户身份:只有拥有表明用户身份的key,用户才能够访问API服务。
- 保护网络传输过程中用户请求不被篡改:API会验证用户使用key为每次请求计算出的签名,以防止在网络传输过程中用户的请求被篡改。
- 防止重复请求攻击(Replay attack):当API使用者的HTTP请求记录被窃取(如:访问API的日志文件泄露),导致窃取者可以重复发送此的请求,从API服务窃取对应的查询结果。
通过给用户分发access_key、secure_key,API服务提供了基于MD5的签名验证机制。其中针对重复请求攻击,API服务承诺会接受当前时间一分钟之内的请求,对于签名生成时间到API服务接收时间之间间隔超过一分钟的请求则直接拒绝。
获取签名需要的key
请从API服务提供者处获取一对access_key和secure_key。key的形式为长度为32的字符串。举例如下:
- access_key:e31429454b845ae95ece2cbeae06a3a6
- secure_key:535479d978359bf4975acf7e7f3f0147
使用签名
签名计算过程:
- 将原始请求构造成Hash形式origin_params,hash的key与value均为字符串。
- 将origin_params的key按照字母顺序排序后,key与value之间用
=
进行字符串链接,每对key之间用&
进行字符串链接,构造一个用来生成签名的字符串sorted_query_str
- 将以毫秒计的当前Unix时间戳query_time和从API提供者处获得的secure_key跟sorted_query_str进行字符串链接获得字符串进行MD5计算,其结果截取前32个字符即为本次请求的sign
在原始请求之上,添加 { ‘qt’: query_time, ‘ak’: access_key, ‘sign’: sign } 作为额外参数即可使用签名访问API服务。
下面的python样例程序演示了如何使用签名:
java版: