摘要:鉴权这是一个的鉴权包,采用密钥加密的鉴权方式,只要客户端不被反编译从而泄露密钥,该鉴权方式理论上来说是安全的不考虑量子计算机的出现。签名重复,规定时间内出现两次或以上相同的签名。
laravel-api-auth
laravel API 鉴权
这是一个 laravel 的 API 鉴权包, laravel-api-auth 采用密钥加密的鉴权方式,只要客户端不被反编译从而泄露密钥,该鉴权方式理论上来说是安全的(不考虑量子计算机的出现)。
安装项目地址: github.com/96qbhy/laravel-api-auth
composer require 96qbhy/laravel-api-auth配置
注册 ServiceProvider:
QbhyLaravelApiAuthServiceProvider::class,
laravel 5.5+ 版本不需要手动注册
发布配置文件
php artisan vendor:publish --provider="QbhyLaravelApiAuthServiceProvider"
在 AppHttpKernal 中注册中间件
protected $routeMiddleware = [ "api_auth" => QbhyLaravelApiAuthLaravelApiAuthMiddleware::class, // other ... ];
添加 role
php artisan api_auth
然后按照格式把 access_key 和 secret_key 添加到, config/api_auth.php 里面的 roles 数组中。
"roles" => [ "{access_key}" => [ "name" => "{role_name}", // 角色名字,例如 android "secret_key" => "{secret_key}", ], ],
自定义签名方法 (可选)
config/api_auth.php 中的 encrypting 可以修改为自定义的签名函数,该函数将传入三个参数: 密钥: $secret_key、随机字符串: $echostr、时间戳: $timestamp,返回签名后的字符串。该函数默认为:
/** * @param $secret_key * @param $echostr * @param $timestamp * @return string */ function encrypting($secret_key, $echostr, $timestamp) { return md5($secret_key . $echostr . $timestamp); }
自定义签名校验规则(可选)
config/api_auth.php 中的 rule 可以修改为自定义的校验函数,该函数将传入三个参数: 密钥: $secret_key、客户端签名: $signature、服务端签名: $server_signature,必须返回布尔值。该函数默认为:
/** * @param $secret_key * @param $signature * @param $server_signature * @return bool */ function rule($secret_key, $signature, $server_signature) { return $signature === $server_signature; }
自定义错误处理(可选)
config/api_auth.php 中的 error_handler 可以修改为自定义的错误处理函数,该函数将传入两个参数: 请求: $request、错误码: $code。该函数默认为:
/** * @param Request $request * @param int $code * @return IlluminateHttpJsonResponse */ function error_handler($request, $code) { return response()->json([ "msg" => "Forbidden", "code" => $code ], 403); }
$code 可能是以下几个值中的一个:
LaravelApiAuthMiddleware::LACK_HEADER -> 缺少请求头。
LaravelApiAuthMiddleware::ACCESS_KEY_ERROR -> access_key 错误。
LaravelApiAuthMiddleware::SIGNATURE_ERROR -> 签名错误。
LaravelApiAuthMiddleware::SIGNATURE_LAPSE -> 签名失效,客户端签名时间和服务端签名时间差超过设置的 timeout 值。
LaravelApiAuthMiddleware::SIGNATURE_REPETITION -> 签名重复,规定时间内出现两次或以上相同的签名。
使用 路由中Route::get("api/example", function(Request $request){ // $request->get("client_role"); // todo... })->middleware(["api_auth"]); or Route::group(["middleware"=>"api_auth"], function(){ // routes... });
前端通过验证后 $request 会添加一个 client_role 字段,该字段为客户端的角色名称。
import axios from "axios"; const access_key = "{access_key}"; // 服务端生成的 access_key const secret_key = "{secret_key}"; // 服务端生成的 secret_key const timestamp = Date.parse(new Date()) / 1000; // 取时间戳 const echostr = "asldjaksdjlkjgqpojg64131321"; // 随机字符串自行生成 function encrypting(secret_key, echostr, timestamp){ return md5(secret_key + echostr + timestamp); // md5 库自行引入 } const requestConfig = { headers: { "api-signature": encrypting(secret_key, echostr, timestamp), "api-echostr": echostr, "api-timestamp": timestamp, "api-access-key": access_key } }; axios.post("/api/example",{},requestConfig).then(res=>{ // todo });
本例子为 web 前端的例子,其他客户端同理,生成签名并且带上指定参数即可正常请求。
通过自定义签名方法和自定义校验方法,可以使用其他加密方法进行签名,例如 哈希 等其他加密算法。更多自定义可以直接复制 QbhyLaravelApiAuthLaravelApiAuthMiddleware 中间件后自行修改 。有问题请开 issue 。
96qbhy.com
96qbhy@gmail.com
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/26017.html
摘要:的安全性不好,攻击者可以通过获取本地进行欺骗或者利用进行攻击。 好久没写博客了,因为最近公司要求我学spring cloud ,早点将以前软件迁移到新的架构上。所以我那个拼命的学呐,总是图快,很多关键的笔记没有做好记录,现在又遗忘了很多关键的技术点,极其罪恶! 现在想一想,还是踏踏实实的走比较好。这不,今天我冒了个泡,来补一补前面我所学所忘的知识点。 想要解锁更多新姿势?请访问我的博客...
摘要:整个流程图在网上查了很多,但看到有人用前端做腾讯开放平台,生成签名的,所以闲着就自己弄了一下。这样就可以请求腾讯开放平台上的。注意如果使用身份证接口,字段是的的时候,格式问题不需要前面。 整个流程图 showImg(https://segmentfault.com/img/bVbrHpe?w=745&h=924); 在网上查了很多,但看到有人用javascript前端做腾讯AI开放平台...
这是小程序开发第二篇,主要介绍如何上传图片到腾讯云,之所以选择腾讯云,是因为腾讯云免费空间大? 准备工作 上传图片主要是将图片上传到腾讯云对象存储(COS)。 要使用对象存储 API,需要先执行以下步骤: 购买腾讯云对象存储(COS)服务 在腾讯云 对象存储控制台 里创建一个 Bucket 在控制台 个人 API 密钥 页面里获取 AppID、SecretID、SecretKey 内容 编写一个...
这是小程序开发第二篇,主要介绍如何上传图片到腾讯云,之所以选择腾讯云,是因为腾讯云免费空间大? 准备工作 上传图片主要是将图片上传到腾讯云对象存储(COS)。 要使用对象存储 API,需要先执行以下步骤: 购买腾讯云对象存储(COS)服务 在腾讯云 对象存储控制台 里创建一个 Bucket 在控制台 个人 API 密钥 页面里获取 AppID、SecretID、SecretKey 内容 编写一个...
阅读 1082·2021-11-25 09:43
阅读 1545·2021-10-25 09:47
阅读 2451·2019-08-30 13:46
阅读 741·2019-08-29 13:45
阅读 1270·2019-08-26 13:29
阅读 2972·2019-08-23 15:30
阅读 1089·2019-08-23 14:17
阅读 1314·2019-08-23 13:43