日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

WebSocket 實(shí)時(shí)通信 JWT 安全認(rèn)證實(shí)現(xiàn)

admin
2025年6月17日 14:41 本文熱度 430

概述

WebSocket作為一種通信協(xié)議引入到Web應(yīng)用中,并不會(huì)解決Web應(yīng)用中存在的安全問(wèn)題,因此WebSocket應(yīng)用的安全實(shí)現(xiàn)是由開(kāi)發(fā)者或服務(wù)端負(fù)責(zé)。這就要求開(kāi)發(fā)者了解WebSocket應(yīng)用潛在的安全風(fēng)險(xiǎn),以及如何做到安全開(kāi)發(fā)規(guī)避這些安全問(wèn)題。

認(rèn)證

使用JWT進(jìn)行身份認(rèn)證是一種常見(jiàn)的做法,因?yàn)樗梢苑奖愕卦诳蛻舳撕头?wù)器之間傳遞用戶的身份信息。在WebSocket通信中,可以通過(guò)URL地址傳遞令牌參數(shù)來(lái)實(shí)現(xiàn)JWT身份認(rèn)證。

服務(wù)端

GatewayWorker

GatewayWorker是基于Workerman開(kāi)發(fā)的一個(gè)可分布式部署的TCP長(zhǎng)連接框架,專(zhuān)門(mén)用于快速開(kāi)發(fā)TCP長(zhǎng)連接應(yīng)用,例如app推送服務(wù)端、即時(shí)IM服務(wù)端、游戲服務(wù)端、物聯(lián)網(wǎng)、智能家居等等.

安裝地址:https://www.workerman.net/doc/gateway-worker

生成令

安裝jwt插件

composer require tinywan/php-jwt

生成一個(gè)訪問(wèn)令牌

<?php
/**
 * @desc JWT 
 * @author Tinywan(ShaoBo Wan)
 */

declare(strict_types=1);

require'vendor/autoload.php';

// Your secret key (keep this secure)
$secretKey = 'Tinywan2050040000011';

// Create an instance of Jwt
$jwt = new \Tinywan\Jwt($secretKey);

// Create a JWT
$payload = [
    "user_id" => 20501000001,
    "username" => 'Tinywan',
    "exp" => time() + 3600// Token expiration time (1 hour)
];
$token = $jwt->createToken($payload);

var_dump($token);

執(zhí)行輸出

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VyX2lkIjoyMDUwMTAwMDAwMSwidXNlcm5hbWUiOiJUaW55d2FuIiwiZXhwIjoxNzQ5OTk5NTU1fQ.
om7PERuIAzEfPoEui1wJd40M4QJ-CE5gMisiG7Gc0NY

服務(wù)端認(rèn)證 ??

WebSocket 接入連接后,服務(wù)端將解析 URL 參數(shù)中的Authorization令牌.

// 當(dāng)客戶端連接上來(lái)時(shí),設(shè)置連接的onWebSocketConnect,即在websocket握手時(shí)的回調(diào)
$gateway->onConnect = function ($connection) {
    $connection->onWebSocketConnect = function ($connection, $http_header) 
    
{
       // Your secret key (keep this secure)
        $secretKey = 'Tinywan2050040000011';

        // Create an instance of Jwt
        $jwt = new \Tinywan\Jwt($secretKey);

        // 獲取URL參數(shù)中的Authorization
        $token = $_GET['Authorization'];

        // Validate and decode the JWT
        if ($jwt->validateToken($token)) {
            echo'JWT is valid.' . PHP_EOL;
            $decodedPayload = $jwt->decodeToken($token);
            echo"Decoded Payload: " . json_encode($decodedPayload, JSON_PRETTY_PRINT) . PHP_EOL;
            var_dump(json_decode(json_encode($decodedPayload), true));
        } else {
            echo'JWT is invalid.' . PHP_EOL;
            return $connection->close();
        }
        returntrue;
    };
};

客戶端

在WebSocket通信中加入Token主要是為了實(shí)現(xiàn)身份驗(yàn)證和授權(quán),確保只有經(jīng)過(guò)驗(yàn)證的用戶可以建立WebSocket連接。由于WebSocket API本身不支持直接在連接時(shí)設(shè)置HTTP頭部,因此需要采用一些變通的方法來(lái)傳遞Token。這里將認(rèn)證令牌參數(shù)Authorization放入 URL 參數(shù)中。

連接地址格式如下:

ws://后端IP:端口/?Authorization=Bearer eyJ0eXAi...

調(diào)試案例

var ws = new WebSocket('ws://127.0.0.1:8782/?Authorization={{token}}'); 
ws.onmessage = function(event{
    console.log('開(kāi)源技術(shù)小棧接收消息: ' + event.data);
};

如果服務(wù)端支持請(qǐng)求頭認(rèn)證,也可使用如下形式傳參:

headers:{
   Authorization:"Bearer "+getToken(),
}

令牌認(rèn)證

var ws = new WebSocket('ws://127.0.0.1:8782/?Authorization={{token}}'); 
ws.onmessage = function(event{
    console.log('開(kāi)源技術(shù)小棧接收消息: ' + event.data);
};

客戶端連接截圖

服務(wù)端認(rèn)證結(jié)果

JWT is valid.
Decoded Payload: {
    "user_id"20501000001,
    "username""Tinywan",
    "exp"1749999555
}
/var/www/webman/GatewayWorker/Applications/YourApp/start_gateway.php:49:
array(3) {
'user_id' =>
  int(20501000001)
'username' =>
string(7"Tinywan"
'exp' =>
  int(1749999555)
}

參考

  1. PHP如何創(chuàng)建和管理JWT令牌
  2. PHP分布式TCP長(zhǎng)連接框架 GatewayWorker
  3. WebSocket教程:JWT身份驗(yàn)證參數(shù)方式有哪些?

?

閱讀原文:https://mp.weixin.qq.com/s/OOVBmJt2BQYckerTn15gbg


該文章在 2025/6/17 18:14:37 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

欧美综合91| 国产调教在线| 在线免费视频 行啪| 国产颜射精品综合| 一区 亚洲 欧美 综合| 大香蕉Av免费在线| 亚洲精品天堂久久久久久| 日日干夜夜干| 日韩欧美天射| 大色欧美高潮| 欧美全肉视频| 国产丝袜操操AV| 日本69黄色小视频中文版| 日本道dvd久久久合| 免费看不卡AV| 国产91白丝在一线播放| 国产 日韩 欧美 超碰| 日韩熟女第三区| 欧美特黄免费淫片| 精品國產美女964| 2020最新毛片网站| 色色中文字幕| 中文日本字幕中文日本字幕中文| 美欧黄片一级| 欧美日韩国产一区一起草| 国产情趣一区| 色窝窝视频| 狠狠干AV狠狠干一区二区| 台湾佬中文娱乐一区二区| 欧美日韩亚洲一区二区| 久久久日本动作电影| rihanquguochanqu| 蜜桃有码| 国产伦理草草影院| 99国产精品久久久久久中文字幕| 色吧av| 亚洲天天操第四页| 久久98久久98久久| 国产91P色| 国产一区二区三区网站| 天天av中文AV|