lumen5.6. 接入larsign 做外部接口验签

参考1. Api Authorized Signature Middleware for Laravel 5

参考2.Laravel 5 API 服务端支持签名授权认证

以上两者内容几一致。

 

在lumen中使用

  1. composer require havenshen/larsign
  2. bootstrap.php 增加如下内容:
    $app->configure('larsign');
    
    #声明路由中间件,当然你可以使用其他的比如globalMiddleWare
    $app->routeMiddleware([
        'auth.larsign' => \HavenShen\Larsign\HandleLarsign::class,
    ]);
    
    
    $app->register(HavenShen\Larsign\LarsignServiceProvider::class);
    
    #声明facade类 Larsign
    class_alias(\HavenShen\Larsign\LarsignFacade::class, 'Larsign');

     

  3.  声明了auth.larsign 中间件后,我们写一个闭包路由做验签测试,路由地址
    #此接口需要验签访问
    Route::group(['middleware' => ['auth.larsign']], function () {
        Route::get('/larsign', function () {
            return [
                'message' => 'done.'
            ];
        });
    });

     

  4.  调试 & 生成header Sign 接口
    Route::get('/lar', function (\Illuminate\Http\Request $request) {
        #base64_encode会产生url不友好的符号,这里有safebased4encode,当然就有safebased4decode
        #这里临时测试上手,找了php.net  base64_encode下的评论区也有相关函数,试了不爽;
        #回来在larsign包check sign 扒出此部分代码
        #此方法如果客户端也引入了larsign,可以使用facade方式:Larsign::base64_urlSafeEncode($str)
        function urlsafe_b64encode($string) {
            $find = array('+', '/');
            $replace = array('-', '_');
            return str_replace($find, $replace, base64_encode($string));
        }
        //'accessKey' => env('LARSIGN_ACCESS_KEY', 'Hi^fjhKJlIUKjuM'),
        // 'secretKey' => env('LARSIGN_SECRET_KEY', 'PlrNIaO'),
        $rawStr = "/larsign\n" . (time()+86400);
        //Base64 url safe encode
        $base64 = urlsafe_b64encode($rawStr);
        $sign = hash_hmac('sha1', $base64, config('larsign.secretKey'), true);
        $sign = urlsafe_b64encode($sign);
        //titching headerName Space AccessKey:sign:signingStrBase64UrlSafeEncode
        $headerName = config('larsign.headerName');
        $accessKey = config('larsign.accessKey');
        $larsignToken = "{$headerName} {$accessKey}:{$sign}:{$base64}";
        //最终设置的header头,名称为$headerName ;值为$larsignToken
        $headerStr = $headerName . ':' . $larsignToken;
    
        dd(config('larsign'), $sign, $headerStr);
    });

     

  5. postman  Test,先生成sign092bdd9a4b1d7c538430c4f5d186c5d3a64.jpg 
  6.  请求需要验签接口 ,先错填headerb9da1ef923efa0c00ef1f0a4fdb2b0cc357.jpg修正确再次请求 :fd3b762d0076ed3a6054ffd1875292bf65a.jpg

 

转载于:https://my.oschina.net/u/3659172/blog/2981145

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值