成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

API 鑒權(quán)新姿勢 - 簽名鑒權(quán)

ormsf / 2374人閱讀

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

laravel-api-auth

laravel API 鑒權(quán)

這是一個 laravel 的 API 鑒權(quán)包, laravel-api-auth 采用密鑰加密的鑒權(quán)方式,只要客戶端不被反編譯從而泄露密鑰,該鑒權(quán)方式理論上來說是安全的(不考慮量子計算機的出現(xiàn))。

項目地址: github.com/96qbhy/laravel-api-auth

安裝
composer require 96qbhy/laravel-api-auth
配置

注冊 ServiceProvider:

QbhyLaravelApiAuthServiceProvider::class,

laravel 5.5+ 版本不需要手動注冊

發(fā)布配置文件

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 數(shù)組中。

"roles" => [
    "{access_key}" => [
        "name" => "{role_name}",        // 角色名字,例如 android
        "secret_key" => "{secret_key}",
    ],
],

自定義簽名方法 (可選)
config/api_auth.php 中的 encrypting 可以修改為自定義的簽名函數(shù),該函數(shù)將傳入三個參數(shù): 密鑰: $secret_key、隨機字符串: $echostr、時間戳: $timestamp,返回簽名后的字符串。該函數(shù)默認為:

/**
 * @param $secret_key
 * @param $echostr
 * @param $timestamp
 * @return string
 */
function encrypting($secret_key, $echostr, $timestamp) {
    return md5($secret_key . $echostr . $timestamp);
}

自定義簽名校驗規(guī)則(可選)
config/api_auth.php 中的 rule 可以修改為自定義的校驗函數(shù),該函數(shù)將傳入三個參數(shù): 密鑰: $secret_key、客戶端簽名: $signature、服務端簽名: $server_signature,必須返回布爾值。該函數(shù)默認為:

/**
 * @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 可以修改為自定義的錯誤處理函數(shù),該函數(shù)將傳入兩個參數(shù): 請求: $request、錯誤碼: $code。該函數(shù)默認為:

/**
 * @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 -> 簽名重復,規(guī)定時間內(nèi)出現(xiàn)兩次或以上相同的簽名。

使用 路由中
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 前端的例子,其他客戶端同理,生成簽名并且?guī)现付▍?shù)即可正常請求。
通過自定義簽名方法和自定義校驗方法,可以使用其他加密方法進行簽名,例如 哈希 等其他加密算法。更多自定義可以直接復制 QbhyLaravelApiAuthLaravelApiAuthMiddleware 中間件后自行修改 。有問題請開 issue 。

96qbhy.com
[email protected]

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26017.html

相關(guān)文章

  • 分布式系統(tǒng)--感性認識JWT

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

    sherlock221 評論0 收藏0
  • javascript實現(xiàn)騰訊AI開放平臺,調(diào)用API時的接口鑒權(quán),生成sign合法簽名

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

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

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

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

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

    idisfkj 評論0 收藏0
  • JWT+RSA鑒權(quán)

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

    Tecode 評論0 收藏0

發(fā)表評論

0條評論

ormsf

|高級講師

TA的文章

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