HTTP SignRESTful API 签名认证框架
HTTP Sign 是一个RESTful API 签名认证项目。
该项目将解决HTTP通信中的如下问题:
防止重放攻击
防止中途篡改数据
保证请求服务幂等
从而,尽可能地让 HTTP 通信接近安全。
HTTP Sign 的设计
字面约定
字面格式 | 含义 |
---|---|
< > | 变量 |
[ ] | 可选项 |
{ } | 必选项 |
| | 互斥关系 |
标点符号 | 本文一律采用英文标点符号 |
请求参数名,命名规则
首字母小写,如果名称由多个单词组成,每个单词的首字母要大写
英文缩写词一律小写
只能由 [A~Z]、[a~z]、[0~9] 以及字符"-"、"_"、"." 组成参数名
不能以数字开头
不允许出现中文及拼音命名
术语表
术语 | 全称 | 中文 | 说明 |
---|---|---|---|
RS | RESTful Web Services | WEB REST服务 | REST 架构风格的Web服务 |
SecurityGroup | Security Group | 安全组 | 安全组制定安全策略 |
GMT | Greenwich Mean Time | 格林尼治标准时间 | 指位于英国伦敦郊区的皇家格林尼治天文台的标准时间 |
URIPath | Uniform Resource Identifier Path | 统一资源标识符的路径 | 用于标识某一互联网资源路径 |
RFC | Request 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 GMT |
Host | 是 | 访问Host值(一般的http客户端工具都会自动带上这个请求头) |
公共请求参数(Common Http Request Parameters)
名称 | 是否必选 | 类型 | 描述 |
---|---|---|---|
version | 是 | String |
API 版本号,当前值为1 |
action | 是 | String |
接口的指令名称,如:action=myInfo |
nonce | 是 | String |
随机数,长度范围[8,36] |
accessKeyId | 是 | String |
在云API密钥上申请的标识身份的 accessKeyId,一个 accessKeyId 对应唯一的 accessKeySecret , 而 accessKeySecret 会用来生成请求签名 Signature |
signatureMethod | 否 | String |
签名算法,目前支持HMACSHA256和HMACSHA1.默认采用:HMACSHA1验证签名 |
token | 否 | String |
临时证书所用的Token,需要结合临时密钥一起使用 |
服务端将从 QueryString 获得这些参数。
签名机制
用户在HTTP请求中增加Authorization
的Header来包含签名(Signature)信息,表明这个消息已被签名,认证是否通过,服务端说了算。
评论