上一章 我们说了 sign的生成 那么 我们如何确定这个sign的准确性呢 下来 我们说说 校验sign的那些事

在拿到header里面的内容之后 我们首先需要对其内容的基本参数做一个校验 我们补充下Common类的代码

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/8/15
* Time: 15:00
*/ namespace app\index\controller; use app\common\lib\execption\ApiException;
use think\Controller; class Common extends Controller
{
public function _initialize(){
$this->checkRequestAuth();
} public function checkRequestAuth(){
$header = request()->header(); ##判断header中基础参数
if(empty($header['sign'])){
throw new ApiException('sign不存在',400);
}
if(!in_array($header['app_type'],config("app.app_types"))){
throw new ApiException('app_type不合法',400);
}
}
}

判定基础参数之后 我们就要进入正题了 校验sign 那么在鉴权类 IAuth 里面新增 checkSignPass 方法 校验sign

 /**
* 校验SIGN是否正常
* @param $data
*/
public static function checkSignPass($data){
      ##解密
$str = (new Aes())->decrypt($data['sign']); if(empty($str)){
return false;
}
      ##转换为数组
parse_str($str,$arr);
      ##判定条件根据需求可增加
if(!is_array($arr) || empty($arr['did']) || $arr['did'] != $data['did']){
return false;
}
return true;
}

方法添加完成后 我们需要在Common里面进行校验

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/8/15
* Time: 15:00
*/ namespace app\index\controller; use app\common\lib\execption\ApiException;
use app\common\lib\IAuth;
use think\Controller; class Common extends Controller
{
public $header = ''; public function _initialize(){
$this->checkRequestAuth();
} public function checkRequestAuth(){
$header = request()->header(); ##判断header中基础参数
if(empty($header['sign'])){
throw new ApiException('sign不存在',400);
} if(!in_array($header['apptype'],config("app.app_types"))){
throw new ApiException('app_type不合法',400);
}
      ##调用鉴权类校验sign的准确性
if(!IAuth::checkSignPass($header)){
throw new ApiException('授权码sign失败',401);
}
      ##如果校验通过 将header值存起来 方便后面使用
$this->header = $header;
}
}

到这里 sign基本就校验完毕 后面只需要业务逻辑类 继承Common类就可以啦  当然 还有一些细节需要我们处理  下一章 我们再来进行

API开发之接口安全(二)-----sign校验的更多相关文章

  1. API开发之接口安全(三)----sign有效时间

    之前生成的sign和校验sign我们已经完全掌握了.但是仅仅凭借这样的sign是无法满足我们的需求的,如果一个黑客通过抓包抓到你的数据 他可以去修改你的header为这样的 body为那样的 也是可以 ...

  2. PHP开发APP接口(二)

    这里将会调用前面博客的数据库连接单例.文件缓存类和开发APP接口(一) <?php // http://app.com/list.php?page-=1&pagesize=12 requ ...

  3. API开发之接口安全(一)----生成sign

    在对于API的开发中 最让人头疼的 就是接口数据暴露 让一些有心之人 抓包之后恶意请求 那么如何解决这一弊端呢?自然而然的 我们就想到了 加密  那我们又如何加密 如何解密 才能使之有最安全的效率呢? ...

  4. 用ASP.NET Web API技术开发HTTP接口(二)

    在第一部分,我们创建了一个基本的ASP.NET Web API项目,新建成功了数据表,然后添加了一些测试数据,最后创建了API控制器,用json格式把数据表里面的内容成功输出到浏览器上.接下来我们将继 ...

  5. API开发之接口安全(四)----sign的唯一性

    r如何解决sign的唯一性呢,在以往的经验中,我们都是通过标识来确定 如果有 那就用过如果没有那就是没用过 当然我们还需要将sign存储起来 这样我们才能更好的去判断他是否用过 存储的话 我们有几种方 ...

  6. 高德地图 JavaScript API 开发系列教程(二)

    上节简单介绍高德地图JavaScript API及网页中基本地图展示.有了地图后我们可以用来做什么?有人说离我最近的超市在哪里,我怎么去?别急,这些功能我们后面都会慢慢实现.今天为大家详细讲解如何在地 ...

  7. asp.net开源流程引擎API开发调用接口大全-工作流引擎设计

    关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 一.程序调用开发接口二.   接口说明 所谓的驰骋工作流引擎的接口,在B ...

  8. 测试开发系列之Python开发mock接口(二)

    上一篇咱们已经把开发前的环境准备好了,还需要再做一点准备,你的账户信息是存在哪的呢,当然是存在数据库里的,咱们在去支付,扣钱的时候,肯定是从数据库里面操作的,去更新账户表里面的数据,所以咱们先要把数据 ...

  9. 豆瓣api开发

    前面有说过豆瓣API的开发,在做一些开源项目的时候,很多时候会用到豆瓣API接口,拿过来做测试,现在只是对豆瓣API开发做一些简单的梳理: 豆瓣API开发的接口: https://developers ...

随机推荐

  1. C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载

    维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...

  2. 前端经常碰到的小知识点-----js篇

    一    js 1.可视区宽和高 ① document.documentElement.clientWidth  //可视区的宽度 document.documentElement.clientHei ...

  3. 对DatagramSocket的使用实例(java使用UDP进行数据传输)

    今天刚看懂的一点点东西,记录一下,方便自己回顾 客户端: Client.java import java.io.IOException; import java.net.DatagramPacket; ...

  4. 【动态规划法(DP)】-C++

    360百科定义: 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bell ...

  5. Docker实现GPA+Exporter监控告警系统

    Docker实现GPA+Exporter监控告警系统 1.搭建grafana,prometheus,blackbox_exporter环境 # docker run -d -p 9090:9090 - ...

  6. numpy表示图片详解

    我自己的一个体会,在学习机器学习和深度学习的过程里,包括阅读模型源码的过程里,一个比较大的阻碍是对numpy掌握的不熟,有的时候对矩阵的维度,矩阵中每个元素值的含义晕乎乎的. 本文就以一个2 x 2 ...

  7. Python入门基础(8)

    上一篇介绍了一些python中函数的基本用法,那么,现在就来谈一谈python中的一些内置函数吧 python中的内置函数 1.map()函数 map()函数接受两个参数值,一个是函数,一个是Iter ...

  8. Lucene03--字段属性

    Lucene03--字段属性 1.Field 1.1  Field相当于Javabean的属性. 1.2  不同的Field的构造方法参数不一样: 大多数Field的构造函数有三个参数: a)第一个参 ...

  9. 关于vue项目font字体图标库导入未显示的问题

    运行项目时,弹出以下信息:

  10. 洛谷P1640 [SCOI2010]连续攻击游戏 题解

    题目链接: https://www.luogu.org/problemnew/show/P1640 分析: 这道题用二分图来解决即可.应该可以作为网络流中的模板题来食用, 每一个武器有两个属性,但是只 ...