• <table id="5bpl0"></table>

    <td id="5bpl0"></td>
    <td id="5bpl0"><ruby id="5bpl0"></ruby></td>

    <bdo id="5bpl0"></bdo>

    當前位置:首頁 > 短網址資訊 > 正文內容

    WebSocket 的鑒權授權方案

    引子

    WebSocket 是個好東西,為我們提供了便捷且實時的通訊能力。然而,對于 WebSocket 客戶端的鑒權,協議的 RFC 是這么說的:

    This protocol doesn’t prescribe any particular way that servers can
    authenticate clients during the WebSocket handshake. The WebSocket
    server can use any client authentication mechanism available to a
    generic HTTP server, such as cookies, HTTP authentication, or TLS
    authentication.

    也就是說,鑒權這個事,得自己動手

    協議原理

    WebSocket 是獨立的、創建在 TCP 上的協議。

    為了創建Websocket連接,需要通過瀏覽器發出請求,之后服務器進行回應,這個過程通常稱為“握手”。

    實現步驟:

    1. 發起請求的瀏覽器端,發出協商報文:

    2. 服務器端響應101狀態碼(即切換到socket通訊方式),其報文:

    3. 協議切換完成,雙方使用Socket通訊

    直觀的協商及通訊過程:

    websocket-lifecycle

    方案

    通過對協議實現的解讀可知:在 HTTP 切換到 Socket 之前,沒有什么好的機會進行鑒權,因為在這個時間節點,報文(或者說請求的Headers)必須遵守協議規范。但這不妨礙我們在協議切換完成后,進行鑒權授權:

    鑒權

    1. 在連接建立時,檢查連接的HTTP請求頭信息(比如cookies中關于用戶的身份信息)

    2. 在每次接收到消息時,檢查連接是否已授權過,及授權是否過期

    3. 以上兩點,只要答案為否,則服務端主動關閉socket連接

    授權

    服務端在連接建立時,頒發一個ticket給peer端,這個ticket可以包含但不限于:

    • peer端的uniqueId(可以是ip,userid,deviceid…任一種具備唯一性的鍵)

    • 過期時間的timestamp

    • token:由以上信息生成的哈希值,最好能加鹽

    安全性的補充說明

    有朋友問:這一套機制如何防范重放攻擊,私以為可以從以下幾點出發:

    • 可以用這里提到的expires,保證過期,如果你愿意,甚至可以每次下發消息時都發送一個新的Ticket,只要上傳消息對不上這個Ticket,就斷開,這樣非Original Peer是沒法重放的

    • 可以結合redis,實現 ratelimit,防止高頻刷接口,這個可以參考 express-rate-limit,原理很簡單,不展開

    • 為防止中間人,最好使用wss(TLS)

    代碼實現

    WebSocket連接處理,基于 node.js 的 ws 實現:

    授權用到的 Ticket(這里存儲用到的是knex + postgreSQL):

    utils 的哈希方法:

    掃描二維碼推送至手機訪問。

    版權聲明:本文由短鏈接發布,如需轉載請注明出處。

    本文鏈接:http://www.virginiabusinesslawupdate.com/article_382.html

    標簽: WebSocket鑒權
    分享給朋友:

    相關文章

    喂不飽的特斯拉,恐怕最后還得攜手AMD自研芯片

    喂不飽的特斯拉,恐怕最后還得攜手AMD自研芯片

    [ FT12短網址 ] 據外媒報道,AMD的半導體代工廠GlobalFoundries的CEO Sanjay Jha在該公司的技術大會上確認,他們正在與特斯拉合作生產用于自動駕駛程序的定制化芯片,并為后者提供晶元生產代工服務。圖片...

    來自于知乎的干貨:人生最重要的三種能力,都不是讀書能學來的

      人際交往中的希望值管理才能  應對片面時空歪曲的才能  影視劇中通常有這么的觀感:一個地痞或者土匪,素日無惡不作。到了最終一集,哎,這貨俄然抗日了,例如《大宅門》里的三爺?! ∵@即是希望值在前期被編劇壓低之后的福利?! 「吲d值 = 現實...

    叫板微信 支付寶小程序正式公測

    叫板微信 支付寶小程序正式公測

    【億邦動力網訊】8月18日消息,億邦動力網獲悉,支付寶小程序于昨日起正式開始公測。目前只有企業類型支付寶賬號才能申請公測,申請通過后才可去開發者中心創建小程序。早在今年1月份,就有消息稱支付寶小程序也正在開發中。在微信小程序面世的8個多月后...

    騰訊推行信用分的背后,或許是小程序電商的鋪墊

    騰訊推行信用分的背后,或許是小程序電商的鋪墊

    前言  最近騰訊信譽分開端進行灰度測驗,引起了相當多的重視?! ∈聦嵣?,騰訊信征早已對外開放,而且推出時刻和芝麻信譽一樣,同樣是2015年?! ≈徊贿^彼時騰訊只推出了信征報告,能夠查詢的內容也比較有限,其給出當前信譽較好、較差,以及當前排名...

    為了搶奪搶中國游客,馬云與萬豪國際設合資公司

    北京時間8月7日晚間消息,據彭博報道,阿里巴巴與萬豪國際合作,大力推動自己的旅行服務。萬豪是全球最大的酒店經營商,旗下6,000多家酒店遍及全球?! 蛇厡⒊闪⒁粋€合資公司,在阿里巴巴旗下的飛豬(Fliggy)網站上推廣萬豪旗下的酒店,包括...

    FT12短網址教你如何通過今日頭條引精準流量,現學現用

    FT12短網址教你如何通過今日頭條引精準流量,現學現用

    我發現許多人都對今天頭條引流對比感興趣,每天都有人在微信上問我做今天頭條引流的玩法,我也多多少少的答復了他們??墒?,頭條規則改動太快,許多當時有效的玩法,沒過多久就失效了。這兒說的玩法,是指文章或視頻上留微信號的辦法。由于只要留了微信號,才...

    發表評論

    訪客

    ◎歡迎參與討論,請在這里發表您的看法和觀點。
    一本色综合网久久
  • <table id="5bpl0"></table>

    <td id="5bpl0"></td>
    <td id="5bpl0"><ruby id="5bpl0"></ruby></td>

    <bdo id="5bpl0"></bdo>