HTTP Sign RESTful API 签名认证框架 项目简介
HTTP Sign 是一个RESTful API 签名认证项目。该项目将解决HTTP通信中的如下问题:防止重放攻击防止中途篡改数据保证请求服务幂等从而,尽可能地让 HTTP 通信接近安全。HTTP Sign 的设计字面约定字面格式含义< >变量[ ]可选项{ }必选项|互斥关系标点符号本文一律采用英文标点符号请求参数名,命名规则首字母小写,如果名称由多个单词组成,每个单词的首字母要大写英文缩写词一律小写只能由 [A~Z]、[a~z]、[0~9] 以及字符"-"、"_"、"." 组成参数名不能以数字开头不允许出现中文及拼音命名术语表术语全称中文说明RSRESTful Web ServicesWEB REST服务REST 架构风格的Web服务SecurityGroupSecurity Group安全组安全组制定安全策略GMTGreenwich Mean Time格林尼治标准时间指位于英国伦敦郊区的皇家格林尼治天文台的标准时间URIPathUniform Resource Identifier Path统一资源标识符的路径用于标识某一互联网资源路径RFCRequest For Comments一系列以编号排定的文件几乎所有的互联网标准都有收录在RFC文件之中相关名词解释字典升序排列如同在字典中排列单词一样排序,按照字母表递增顺序排列,参与比较的两个单词,若它们的第一个字母相同,就比较第二个字母,依此类推.例如: zhong zhang zheng zhen, 做字典升序排列后的结果是 zhang zhen zheng zhong.幂等性接口在设计上可以被完全相同的URL重复调用多次,而最终得到的结果是一致的.使用限制请求端的当前时间与服务器的当前时间之差的绝对值不能大于10分钟,否则拒绝处理. 也就是说,请求端的时间不能比服务器时间快10分钟或慢10分钟,否则,服务器不受理.请求结构服务地址接口按照功能划分成了不同的功能模块,每个模块使用不同的域名或上下文访问,具体域名或上下文请参考各个接口的文档.通信协议所有接口均采用HTTPS通信.请求方法支持 [GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS].字符编码在无特别说明情况下,均使用UTF-8编码.API请求结构名称描述备注API入口API调用的RS服务的入口https://<domain>/path/hi公共header每个接口都包含的通用请求头详见 公共参数公共参数每个接口都包含的通用参数详见 公共参数公共参数公共请求头(Common Request Headers)名称是否必选描述Authorization是用于验证请求合法性的认证信息Accept是默认:"application/json",表示发送端(客户端)希望从服务端接受到的数据类型Content-Length是RFC2616中定义的HTTP请求内容长度(一般的http客户端工具都会自动带上这个请求头)Date是HTTP 1.1协议中规定的GMT时间,例如:Wed, 28 Mar 2018 09:09:19 GMTHost是访问Host值(一般的http客户端工具都会自动带上这个请求头)公共请求参数(Common Http Request Parameters)名称是否必选类型描述version是StringAPI 版本号,当前值为1action是String接口的指令名称,如:action=myInfononce是String随机数,长度范围[8,36]accessKeyId是String在云API密钥上申请的标识身份的 accessKeyId,一个 accessKeyId 对应唯一的 accessKeySecret , 而 accessKeySecret 会用来生成请求签名 SignaturesignatureMethod否String签名算法,目前支持HMACSHA256和HMACSHA1.默认采用:HMACSHA1验证签名token否String临时证书所用的Token,需要结合临时密钥一起使用服务端将从 QueryString 获得这些参数。签名机制用户在HTTP请求中增加Authorization的Header来包含签名(Signature)信息,表明这个消息已被签名,认证是否通过,服务端说了算。