摘要:鑒權這是一個的鑒權包,采用密鑰加密的鑒權方式,只要客戶端不被反編譯從而泄露密鑰,該鑒權方式理論上來說是安全的不考慮量子計算機的出現。簽名重復,規定時間內出現兩次或以上相同的簽名。
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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 內容 編寫一個...
閱讀 1120·2021-11-25 09:43
閱讀 1569·2021-10-25 09:47
閱讀 2466·2019-08-30 13:46
閱讀 753·2019-08-29 13:45
閱讀 1280·2019-08-26 13:29
閱讀 2990·2019-08-23 15:30
閱讀 1103·2019-08-23 14:17
閱讀 1325·2019-08-23 13:43