HTTP Sign 是一个RESTful API 签名认证项目。
该项目将解决HTTP通信中的如下问题:
防止重放攻击
防止中途篡改数据
保证请求服务幂等
从而,尽可能地让 HTTP 通信接近安全。
字面格式 | 含义 |
---|---|
< > | 变量 |
[ ] | 可选项 |
{ } | 必选项 |
| | 互斥关系 |
标点符号 | 本文一律采用英文标点符号 |
首字母小写,如果名称由多个单词组成,每个单词的首字母要大写
英文缩写词一律小写
只能由 [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 | 每个接口都包含的通用请求头 | 详见 公共参数 |
公共参数 | 每个接口都包含的通用参数 | 详见 公共参数 |
名称 | 是否必选 | 描述 |
---|---|---|
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客户端工具都会自动带上这个请求头) |
名称 | 是否必选 | 类型 | 描述 |
---|---|---|---|
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。 之后