首页 > 其他分享 >laravel11: 给接口增加签名验证

laravel11: 给接口增加签名验证

时间:2024-07-17 17:29:26浏览次数:11  
标签:return 中间件 接口 sign secret params 签名 laravel11 data

一,添加controller/中间件/路由

1,添加中间件

liuhongdi@lhdpc:/data/site/gsapi$ php artisan make:middleware ApiSign

   INFO  Middleware [app/Http/Middleware/ApiSign.php] created successfully. 

2,添加路由:

在routes/api.php文件中

Route::controller(VirtualController::class)->group(function () {
    Route::get('/virtual/info', 'info')->middleware([ApiSign::class]);
});

二,代码

1,中间件:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use App\extend\result\Result;


class ApiSign
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        $post_data = $request->all();
        if (!$this->getSign($post_data)) {
            return Result::ErrorCode(1,'接口签名验证错误');
        } else {
            return $next($request);
        }
    }

    private function getSign(array $params): bool
    {
        //从配置文件中得到secret
        $app_secret = config("client.my_secret");
        if (empty($params)) {
            return false;
        }
        if (!isset($params['sign'])) {
            return false;
        }
        $sign = $params['sign'];
        unset($params['sign']);
        ksort($params);
        $strParams = [];
        foreach ($params as $k => $v) {
            if (preg_match('/\/\S+\/\S+/', $k) != 0 || preg_match('/\S+\/\S+/', $k) != 0) {
                continue;
            }
            $strParams[] = "$k_$v";
        }
        $inputStr = implode('&', $strParams)."&secret_".$app_secret;
        $creSign = md5($inputStr);
        return $creSign !== $sign  ? false : true ;
    }

}

 

2,controller:

class VirtualController extends Controller
{
    //测试接口签名验证
    public function info(Request $request) {
        $data = ['name'=>'老张'];
        return Result::Success($data);
    }
}

 

三,测试效果

用postman提交参数:

 

标签:return,中间件,接口,sign,secret,params,签名,laravel11,data
From: https://www.cnblogs.com/architectforest/p/18307922

相关文章

  • 自动化接口测试用例简单描述
    1.比如创建任务,每次都需要一个name,而且不可重复,可以random随机生成name,作为前置脚本使用:"name":"${job_name}",//namenow_time=DateFormatUtils.format(newDate(),"yyyyMMdd_HHmmss_SSS");random_number=RandomUtils.nextInt(0,1000000);affix=now_time+&......
  • WebAPI公开接口请求签名验证
    前言现在的系统后端开发的时候,会公开很多API接口对于要登录认证后才能访问的接口,这样的请求验证就由身份认证模块完成但是也有些接口是对外公开的,没有身份认证的接口我们怎么保证接口的请求是合法的,有效的.这样我们一般就是对请求的合法性做签名验证.实现原理为保证接......
  • vue请求接口常用写法(axios)
    1.项目根目录下新建一个utils文件夹,并新建一个request.js文件(注意:是以axios方法请求的,所以需要先安装axios或cdn引入)安装:npmnpminstallaxios-Syarnyarnaddaxios-Scdn<scriptsrc="https://unpkg.com/axios/dist/axios.min.js"></script>&&配置代码imp......
  • iftop--实时网络接口流量监控工具
    1、介绍iftop是实时流量监控工具,可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等。 2、安装yum-yinstalliftop查看版本strings/usr/sbin/iftop|grep"version" 3、常用参数-h显示帮助信息-n不进行dns解析,直接显示ip地址-N显示端......
  • Java身份证识别接口在打车场景的应用
    曾几何时,滴滴打车似乎成了打车一族的首选,评论有好有坏。近几日,美团打车在上海的首秀还不错。为了吸引更多司机加入,美团还设置了新人推荐奖。根据美团打车司机端的信息显示,3月20和3月31日期间,司机每邀请一名新司机,并且新司机完成8单,即可拿到100元奖励。根据美团的宣传,其首日接......
  • 2024年最新版微信小程序批量检测封禁接口实现代码分享
    ​       ​      <?php//要检测的appid列表$appids=array('appid1','appid2','appid3');//使用实际的appid//循环调用接口检测小程序状态foreach($appidsas$appid){    $url='https://down.ychengsnsm.com/xcx/checkxcx.php?appid='......
  • python接口测试示例
    1、从sql读取需要的内容,作为接口的请求参数的一部分,生成请求的body,再去请求接口1importrequests2importpymysql3importjson456conn=pymysql.connect(host="172.16.11.118",port=3306,user="root",passwd="123456",db="digital_energy_base&......
  • uniapp [全端兼容] - 详细实现用户电子签名 “逐字校验“ 将姓名按字拆开分别手写签署
    前言如果您需要“合同专用”签字板及展示,请访问这篇文章。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)项目开发中,详解完成用户进行电子签名时,将其姓名进行拆分为独立的汉字,并由系统自动生成渲染对应的单个汉字文字的签名和验证笔画......
  • laravel11:发生异常时返回json
    一,未配置前laravel11直接render页面如图:二,配置1, bootstrap/app.php<?phpuseIlluminate\Http\Request;useIlluminate\Auth\AuthenticationException;useIlluminate\Database\Eloquent\ModelNotFoundException;useIlluminate\Foundation\Application;useIllu......
  • 未公开 泛微OA E-Cology 某接口SQL注入漏洞
    0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者......