亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

ormsf / 2437人閱讀

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

laravel-api-auth

laravel API 鑒權(quán)

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

項(xiàng)目地址: github.com/96qbhy/laravel-api-auth

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

注冊(cè) ServiceProvider:

QbhyLaravelApiAuthServiceProvider::class,

laravel 5.5+ 版本不需要手動(dòng)注冊(cè)

發(fā)布配置文件

php artisan vendor:publish --provider="QbhyLaravelApiAuthServiceProvider"

AppHttpKernal 中注冊(cè)中間件

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ù)將傳入三個(gè)參數(shù): 密鑰: $secret_key、隨機(jī)字符串: $echostr、時(shí)間戳: $timestamp,返回簽名后的字符串。該函數(shù)默認(rèn)為:

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

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

/**
 * @param $secret_key
 * @param $signature
 * @param $server_signature
 * @return bool
 */
function rule($secret_key, $signature, $server_signature)
{
    return $signature === $server_signature;
}

自定義錯(cuò)誤處理(可選)
config/api_auth.php 中的 error_handler 可以修改為自定義的錯(cuò)誤處理函數(shù),該函數(shù)將傳入兩個(gè)參數(shù): 請(qǐng)求: $request、錯(cuò)誤碼: $code。該函數(shù)默認(rèn)為:

/**
 * @param Request $request
 * @param int $code
 * @return IlluminateHttpJsonResponse
 */
function error_handler($request, $code)
{
    return response()->json([
        "msg" => "Forbidden",
        "code" => $code
    ], 403);
}  

$code 可能是以下幾個(gè)值中的一個(gè):

LaravelApiAuthMiddleware::LACK_HEADER -> 缺少請(qǐng)求頭。

LaravelApiAuthMiddleware::ACCESS_KEY_ERROR -> access_key 錯(cuò)誤。

LaravelApiAuthMiddleware::SIGNATURE_ERROR -> 簽名錯(cuò)誤。

LaravelApiAuthMiddleware::SIGNATURE_LAPSE -> 簽名失效,客戶端簽名時(shí)間和服務(wù)端簽名時(shí)間差超過設(shè)置的 timeout 值。

LaravelApiAuthMiddleware::SIGNATURE_REPETITION -> 簽名重復(fù),規(guī)定時(shí)間內(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...
});

通過驗(yàn)證后 $request 會(huì)添加一個(gè) client_role 字段,該字段為客戶端的角色名稱。

前端
import axios from "axios";

const access_key = "{access_key}";  // 服務(wù)端生成的 access_key
const secret_key = "{secret_key}";  // 服務(wù)端生成的 secret_key

const timestamp = Date.parse(new Date()) / 1000;    // 取時(shí)間戳
const echostr = "asldjaksdjlkjgqpojg64131321";      // 隨機(jī)字符串自行生成

function encrypting(secret_key, echostr, timestamp){
    return md5(secret_key + echostr + timestamp);    // md5 庫(kù)自行引入
}

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ù)即可正常請(qǐng)求。
通過自定義簽名方法和自定義校驗(yàn)方法,可以使用其他加密方法進(jìn)行簽名,例如 哈希 等其他加密算法。更多自定義可以直接復(fù)制 QbhyLaravelApiAuthLaravelApiAuthMiddleware 中間件后自行修改 。有問題請(qǐng)開 issue 。

96qbhy.com
96qbhy@gmail.com

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/26017.html

相關(guān)文章

  • 分布式系統(tǒng)--感性認(rèn)識(shí)JWT

    摘要:的安全性不好,攻擊者可以通過獲取本地進(jìn)行欺騙或者利用進(jìn)行攻擊。 好久沒寫博客了,因?yàn)樽罱疽笪覍W(xué)spring cloud ,早點(diǎn)將以前軟件遷移到新的架構(gòu)上。所以我那個(gè)拼命的學(xué)吶,總是圖快,很多關(guān)鍵的筆記沒有做好記錄,現(xiàn)在又遺忘了很多關(guān)鍵的技術(shù)點(diǎn),極其罪惡! 現(xiàn)在想一想,還是踏踏實(shí)實(shí)的走比較好。這不,今天我冒了個(gè)泡,來補(bǔ)一補(bǔ)前面我所學(xué)所忘的知識(shí)點(diǎn)。 想要解鎖更多新姿勢(shì)?請(qǐng)?jiān)L問我的博客...

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

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

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

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

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

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

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

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

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

ormsf

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<