安装

安装包文件

composer require "entere/sign:v1.0.0"

使用

php 实例:

<?php
require_once("./src/Sign.php");use Entere\Sign\Sign;$params = ['access_key'=>'7576762362','timestamp'=>'1439279383630','screen_name'=>'entere','format'=>'json'
];
$secret = 'f827182b1051075e601c73ac1ae329fa';
$result = Sign::generateSign($params,$secret);
return $result;?>

Laravel5 实例:

<?php namespace App\Http\Controllers;use Entere\Sign\Sign;class WelcomeController extends Controller {public function index(){$params = ['access_key'=>'7576762362','timestamp'=>'1439279383630','screen_name'=>'entere','format'=>'json'];$secret = 'f827182b1051075e601c73ac1ae329fa';$result = Sign::generateSign($params,$secret);return $result;}
}?>

说明

客户端与服务端的数据交互,大部分应用都采用的 RESTful API 的方式,那么如何确保 API 接口的安全性呢?URL 签名的方式可以确保请求的过程中参数不被修改。

签名的机制是由开发者在 API 客户端计算出系列参数组合的哈希值,将产生的信息添加到 URL 请求的 sign 参数。

例如 API 请求参数如下:

{"access_key":"7576762362","timestamp":"1439279383630","screen_name":"entere","format":"json"
}

1、按参数名进行升序排列

access_key, timestamp, screen_name, format 其中不包括空值参数

排序后的参数为:

{"access_key":"7576762362","format":"json","screen_name":"entere","timestamp":"1438279283630",}

2、构造签名串

以secret字符串开头,追加排序后参数名称和值,格式:

secretkey1value1key2value2...

假设 secret的值为 f827182b1051075e601c73ac1ae329fa 应用到上述示例得到签名串为:

f827182b1051075e601c73ac1ae329faaccess_key7576762362formatjsonscreen_nameenteretimestamp1438279283630

3、计算签名

对上面的签名串进行 md5 签名:

md5(f827182b1051075e601c73ac1ae329faaccess_key7576762362formatjsonscreen_nameenteretimestamp1438279283630)

并把值转成小写:

927c0fc11caaf98840ed7773b348685c

4、添加签名

将计算的签名值以 sign 参数名,附加到 URL 请求中。一个典型的 API 请求如下所示

https://xxx.com/xxx?access_key=7576762362&format=json&screen_name=entere&timestamp=1438279283630&sign=927c0fc11caaf98840ed7773b348685c

5、服务器验证

验证请求者的身份:简单判断 access_key。

防止重放攻击:服务器端首先验证时间戳 timestamp 是否有效,比如是服务器时间戳 5 分钟之前的请求视为无效。

保护传输中的数据:服务端收到请求时,将基于相同签名方法(去掉 sign 参数)重新计算哈希,并将其与请求中包括的哈希值进行匹配。如果哈希值不匹配,服务器将返回 401(未授权被拒绝)错误码。

License

MIT

http请求中简单的签名验证相关推荐

  1. postman简单教程,如何在请求中引用上次请求返回的值

    做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...

  2. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)(二)

    二.跨域: 回到顶部 跨域知识介绍: 点我以前博客 跨域解决方法:CORS:跨域资源共享 CORS请求分类(简单请求和非简单请求) 简单请求(simple request):只需要在头信息之中增加一个 ...

  3. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)(一)

    阅读目录 一.Django中的缓存: 前戏: Django中的几种缓存方式: Django中的缓存应用: 二.跨域: 跨域知识介绍: CORS请求分类(简单请求和非简单请求) 示例: 三.自动生成接口 ...

  4. 【2012百度之星/资格赛】H:用户请求中的品牌 [后缀数组]

    时间限制: 1000ms 内存限制: 65536kB 描述 馅饼同学是一个在百度工作,做用户请求(query)分析的同学,他在用户请求中经常会遇到一些很奇葩的词汇.在比方说"johnsonj ...

  5. Web请求响应简单整理

    简单对Web请求响应如何处理进行的整理,难免有理解不到位,理解有偏差的地方,如有理解有误的地方,希望大牛批评指正. 1.Web开发的定义 首先看看微软对Web开发的定义: Web开发是一个指代网页或网 ...

  6. Web容器自动对HTTP请求中参数进行URLDecode处理

    这篇文章转载自 : Web容器自动对HTTP请求中参数进行URLDecode处理 如题,在Java中也许很多人都没有注意到当我们发送一个http请求时,如果附带的参数被URLEncode之后,到达we ...

  7. 详细记录如何在跨域请求中携带cookie

    1. 搭建环境 1.生成工程文件 npm init 2.安装 express npm i express --save 3.新增app1.js,开启服务器1 端口:3001 const express ...

  8. 程序员过关斩将--Http请求中如何保持状态?

    微信搜一搜 架构师修行之路 这是一个被无数程序员撸过的问题,却只有少数人了解了真相.大体上搜了一下,网上关于http协议保持状态误导大家的文章还是有的,比如:有人说利用ViewState,那是asp. ...

  9. Nodejs教程09:实现一个带接口请求的简单服务器

    示例代码请访问我的GitHub: github.com/chencl1986/- 带接口请求的简单服务器需求 虽然当前还未涉及到数据库的知识,但已经可以通过文件读写,实现一个简单的服务器,需求如下: ...

  10. 使用jQuery在AJAX请求中添加标头

    本文翻译自:Add header in AJAX request with jQuery I would like to add a custom header to an AJAX POST req ...

最新文章

  1. 【电子信息复试】考研复试常考问题——组成原理
  2. 浏览器打开出现证书错误_PADI 电子潜水证书更新啦!
  3. Andriod动态布局
  4. CodeForces 468 CHack it!
  5. 12、箱形图和小提琴图的绘制
  6. 如何批量将多个 Txt、Json、Html 以及记事本等文本文档快速合并成一个文档
  7. php 获取xlsx,PHP Excel Reader读取xlsx文件
  8. 微型计算机原理与接口技术第三版答案
  9. 解决小程序view之间默认的空隙
  10. python中的英文歌_Python 爬网易音乐云歌曲,MV
  11. 团队协助 开源项目_Open Atrium 是一套开源的团队协作和知识管理系统
  12. 【CAD.Net】基础课程 AutoCAD 中的凸度,求圆弧的圆心、起始角度、圆弧的中心点
  13. 在Xshell上下载vim
  14. Redis集群之多主多从
  15. python手机编译器怎么编写程序_怎么用手机编写Python程序?
  16. GitHub 前 CTO:全面微服务是最大的架构错误!网友:这不是刚改完吗...
  17. 最早的计算机就是智慧的中国人发明的什么,美国人:这个人类使用了百年的科技,中国人居然说是他们发明的?...
  18. HTML 微信 获取微信ID,关于微信订阅号获取openid的问题_html/css_WEB-ITnose
  19. python怎么取小数点_Python如何取小数点位数
  20. 运行fis3 server start --type smarty启动时,报错The “data“ argument must be of type string or an instance of

热门文章

  1. h2o api java_H2O框架简介
  2. qq飞车找不到服务器了,QQ飞车体验服务器专区
  3. scratch3.0教程 水果忍者游戏
  4. 开发在线投票系统过程遇到的问题
  5. FlashFXP导出导入站点
  6. Goole helper使用
  7. (考试大整理~)Xxy 的车厢调度
  8. 牛逼的 弹出层 layer !!!
  9. 2021级《高级语言》重现 F 方阵
  10. web邮箱和客户端的区别