HTTP Sign

RESTful API 签名认证框架
授权协议 Apache
开发语言 Java
所属分类 Web应用开发、 REST/RESTful项目
软件类型 开源软件
地区 国产
投 递 者 戚英逸
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

HTTP Sign 是一个RESTful API 签名认证项目。
该项目将解决HTTP通信中的如下问题:

  • 防止重放攻击

  • 防止中途篡改数据

  • 保证请求服务幂等

从而,尽可能地让 HTTP 通信接近安全。

HTTP Sign 的设计

字面约定

字面格式 含义
< > 变量
[ ] 可选项
{ } 必选项
| 互斥关系
标点符号 本文一律采用英文标点符号

请求参数名,命名规则

  1. 首字母小写,如果名称由多个单词组成,每个单词的首字母要大写

  2. 英文缩写词一律小写

  3. 只能由 [A~Z]、[a~z]、[0~9] 以及字符"-"、"_"、"." 组成参数名

  4. 不能以数字开头

  5. 不允许出现中文及拼音命名

术语表

术语 全称 中文 说明
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文件之中

相关名词解释

  1. 字典升序排列
    如同在字典中排列单词一样排序,按照字母表递增顺序排列,参与比较的两个单词,若它们的第一个字母相同,就比较第二个字母,依此类推.
    例如: zhong zhang zheng zhen, 做字典升序排列后的结果是 zhang zhen zheng zhong.

  2. 幂等性
    接口在设计上可以被完全相同的URL重复调用多次,而最终得到的结果是一致的.

使用限制

请求端的当前时间与服务器的当前时间之差的绝对值不能大于10分钟,否则拒绝处理. 也就是说,请求端的时间不能比服务器时间快10分钟或慢10分钟,否则,服务器不受理.

请求结构

  1. 服务地址
    接口按照功能划分成了不同的功能模块,每个模块使用不同的域名或上下文访问,具体域名或上下文请参考各个接口的文档.

  2. 通信协议
    所有接口均采用HTTPS通信.

  3. 请求方法
    支持 [GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS].

  4. 字符编码
    在无特别说明情况下,均使用UTF-8编码.

  5. 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)信息,表明这个消息已被签名,认证是否通过,服务端说了算。

  • 以下内容是参考别人的博客内容整理,如有不足之处,敬请指正。。。 大家先思考一个问题:  你在写开放的API接口时是如何保证数据的安全性的? 先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题,例如: 1.     请求来源(身份)是否合法? 2.     请求参数被篡改? 3.     请求的唯一性(不可复制) 解决方案

  • 本文章向大家介绍使用sign签名发送请求,主要包括使用sign签名发送请求使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 import CryptoJS from “crypto-js”; import urlencode from “urlencode”; methods:{ async initUser () { try { const url

  • 安装 安装包文件 composer require "entere/sign:v1.0.0" 使用 php 实例: <?php require_once("./src/Sign.php"); use Entere\Sign\Sign; $params = [ 'access_key'=>'7576762362', 'timestamp'=>'1439279383630',

  • public static string SignToMd5(Dictionary<string, object> @params, string secret) { var sortDic = new SortedDictionary<string, object>(@params); var query = new StringB

  • Java开发中,经常会有与第三方接口对接的情况。为了提高对接中数据传输的安全性,防止请求参数被篡改,通常都需要增加签名sign。比如支付接口,依照双方事先约定好的规则,请求方对数据进行加签,接口提供方则对签名进行验证,验证通过才能放行,进行后续的业务逻辑处理。  这里最重要的就是签名规则,将参数按照一定顺序排列,添加密钥,然后加密,得到sign。 1、对请求参数加密。此处是以get请求链接为例,以

  • signtool 微软参考文档 https://docs.microsoft.com/zh-cn/windows/win32/seccrypto/signtool 使用signtool签名参考文档 https://docs.microsoft.com/en-us/windows/win32/seccrypto/using-signtool-to-sign-a-file sha1签名方式 signt

  • 前言 1.在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等,但是为了安全起见让用户暴露的明文密码次数越少越好,我们一般在web项目中,大多数采用保存的session中,然后在存一份到cookie中,来保持用户的回话有效性。但是在app提供的开放接口中,后端

 相关资料
  • 基本概念 Account Key, Account Secret: 用于标示开发者,获取方式见快速入门中生成新的云密钥图中的帐号密钥 App Key, App Secret: 用于标示开发者的App,获取的方式见快速入门中生成新的云密钥 Signature:根据Access Key和Secret Key和用户请求计算出的数字签名,用于验证用户身份。 Note 介绍签名算法时我们不区分Account

  • 在过去的几周里,我一直在使用iText对PDF文件进行数字签名,根据我的理解,有两种方法可以将信息添加到PDF中,使其启用LTV: > 使用iText示例中提供的代码添加信息,此方法要求签名已经存在,因为DSS 嵌入crl字节 尽管第一种方法生成了一个整洁的pdf文件,但问题是它修改pdf文件以创建/附加条目,从而导致认证签名无效,第二个很好,但它会根据crl列表的大小大幅增加pdf大小(这也可能

  • 开发者需要自己维护预签名下发服务器,由预签名下发服务器调用FDS SDK产生预签名链接 由于签名信息在url中,所有http请求请使用https协议 与请求签名认证的区别 对客户端要求低:开发者服务端计算请求签名 更安全:无须把密钥发布到设备上 签名信息保存在url中,而不是在http请求头部 用预签名URL完成分片上传 参考Presigned url分片上传示例 调试相关 参考 预签名链接使用相

  • 离线交易签名认证 如果你不想管理自己的以太坊客户端,或者不想向以太坊客户端提供诸如密码之类的钱包详细信息,那么就通过离线交易认证签名。 离线交易签名认证允许你在web3j中使用你的以太坊钱包签署交易,允许你完全控制你的私有凭据。然后,离线创建的交易可以被发送到网络上的任何以太坊客户端,只要它是一个有效的交易,它会将交易传播到其他节点。 如果需要,还可以执行进程外交易签名认证。这可以通过重写ECKe

  • 小程序调起支付后提示签名认证失败, JAVA 该如何生成paySign?

  • 我在理解SSL方面有点困难,即自签名vs认证。 首先,我的假设是自签名证书仍然会提示常见的浏览器警告消息吗? 其次,来自https域的数据不会传输到超文本传输协议域,对吗?所以如果我的网站在domain.com,我的api在api.domain.com,我需要两个证书,并为https设置它们? 最后,我注意到像StartSSL这样的网站上有免费的SSL证书。这让人觉得可疑,因为在其他网站上获得证书

  • 我想创建一个签名并使用openssl验证它。我想有我的签名的十六进制输出。 这是我的密码 我得到这个错误: 如果我在创建签名的过程中删除了-hex,它就可以工作了。

  • 我正在试图找到一种方法,以锁定一个签名和认证的PDF修改使用iText的方式,像Abode Reader DC这样的观众告诉我该文档是不开放的修改像这样 (如果我使用Adobe签署文档,我就可以这样做)使用PDF版本1.7和iText版本7.1.6。 然而,当我认证并签署我的pdf文件时,我的结果是: 在处理过程中,首先使用认证签名对此PDF进行签名,认证级别设置为form filling。 之后