国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

API 鑒權新姿勢 - 簽名鑒權

ormsf / 2366人閱讀

摘要:鑒權這是一個的鑒權包,采用密鑰加密的鑒權方式,只要客戶端不被反編譯從而泄露密鑰,該鑒權方式理論上來說是安全的不考慮量子計算機的出現。簽名重復,規定時間內出現兩次或以上相同的簽名。

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_keysecret_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

相關文章

  • 分布式系統--感性認識JWT

    摘要:的安全性不好,攻擊者可以通過獲取本地進行欺騙或者利用進行攻擊。 好久沒寫博客了,因為最近公司要求我學spring cloud ,早點將以前軟件遷移到新的架構上。所以我那個拼命的學吶,總是圖快,很多關鍵的筆記沒有做好記錄,現在又遺忘了很多關鍵的技術點,極其罪惡! 現在想一想,還是踏踏實實的走比較好。這不,今天我冒了個泡,來補一補前面我所學所忘的知識點。 想要解鎖更多新姿勢?請訪問我的博客...

    sherlock221 評論0 收藏0
  • javascript實現騰訊AI開放平臺,調用API時的接口鑒權,生成sign合法簽名

    摘要:整個流程圖在網上查了很多,但看到有人用前端做騰訊開放平臺,生成簽名的,所以閑著就自己弄了一下。這樣就可以請求騰訊開放平臺上的。注意如果使用身份證接口,字段是的的時候,格式問題不需要前面。 整個流程圖 showImg(https://segmentfault.com/img/bVbrHpe?w=745&h=924); 在網上查了很多,但看到有人用javascript前端做騰訊AI開放平臺...

    crelaber 評論0 收藏0
  • 小程序開發:上傳圖片到騰訊云

    這是小程序開發第二篇,主要介紹如何上傳圖片到騰訊云,之所以選擇騰訊云,是因為騰訊云免費空間大? 準備工作 上傳圖片主要是將圖片上傳到騰訊云對象存儲(COS)。 要使用對象存儲 API,需要先執行以下步驟: 購買騰訊云對象存儲(COS)服務 在騰訊云 對象存儲控制臺 里創建一個 Bucket 在控制臺 個人 API 密鑰 頁面里獲取 AppID、SecretID、SecretKey 內容 編寫一個...

    why_rookie 評論0 收藏0
  • 小程序開發:上傳圖片到騰訊云

    這是小程序開發第二篇,主要介紹如何上傳圖片到騰訊云,之所以選擇騰訊云,是因為騰訊云免費空間大? 準備工作 上傳圖片主要是將圖片上傳到騰訊云對象存儲(COS)。 要使用對象存儲 API,需要先執行以下步驟: 購買騰訊云對象存儲(COS)服務 在騰訊云 對象存儲控制臺 里創建一個 Bucket 在控制臺 個人 API 密鑰 頁面里獲取 AppID、SecretID、SecretKey 內容 編寫一個...

    idisfkj 評論0 收藏0
  • JWT+RSA鑒權

    摘要:一般根據前兩步的數據,再加上服務的的密鑰不要泄漏,最好周期性更換,通過加密算法生成。非對稱加密后的授權和鑒權流程用戶只需要與微服務交互,不用訪問授權中心,效率大大提高1)JWT簡介JWT,全稱是Json Web Token, 是JSON風格輕量級的授權和身份認證規范,可實現無狀態、分布式的Web應用授權;官網:https://jwt.io (JWT,生成Token加密字符串的一個標準或格式...

    Tecode 評論0 收藏0

發表評論

0條評論

ormsf

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<