亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JWT技術解決IM系統的認證痛點

發布時間:2020-08-11 05:04:09 來源:ITPUB博客 閱讀:206 作者:普通程序員 欄目:軟件技術

一、痛點

隨著業務的發展,多個業務線接入了IM系統,IM系統長連接的安全問題變得很重要。

瓜子有統一登錄認證系統SSO,IM長連接通道也利用這個系統做安全認證,結構如下圖。 

JWT技術解決IM系統的認證痛點

認證步驟如下

1、用戶登錄App,App從業務后臺拿到單點系統SSO頒發的token

2、當App需要使用IM功能時,將token傳給IM客服端SDK

3、SDK跟IM Server建立長連接的時候用token進行認證

4、IM Server請求SSO系統,確認token合法性

咋一看,這個過程沒有什么問題,但是IM(尤其是移動IM)業務的特殊性,這個結構并不好。

手機(移動端)網絡很不穩定,進出地鐵可能斷網,挪動位置也可能換基站。在一次聊天過程中,會經常重新建立長連接,第3步會被頻繁執行,進而第4步也會頻繁執行。(1)大大增加了SSO系統的壓力;(2)較長的鏈路帶來的延遲對用戶的體驗是一種傷害(SSO系統也可能短暫開小差)。

如果不通過第4步就能完成驗證,那這個痛點會得到極大緩解。我們想到了JWT技術。

二、什么是JWT?

官網上是這么定義JWT的。JSON Web Token(JWT)是一種開放標準(RFC 7519),它定義了一種緊湊且獨立的方式,可以在各方之間通過JSON對象安全地傳輸信息。此信息可以通過數字簽名進行驗證和信任。 JWT可以使用密碼(使用HMAC算法)或使用RSA或ECDSA的公鑰/私鑰對進行簽名。

JWT能做什么?

1、授權(Authorization)

這是JWT最常見的使用場景。一旦用戶登錄,后續每個請求將帶上JWT,就可以訪問該令牌(token)允許的路由,服務和資源。

JWT現在廣泛應用于單點登錄,它開銷很小,并且能夠輕松跨域。

2、信息交換(Information Exchange)

JWT是在各方之間安全傳輸信息的好方法。因為JWT可以簽名(使用公鑰/私鑰對,簽名原理參看《你的HTTP接口簽名校驗做對了嗎?》)

您可以確定發件人的真實身份。此外,由于使用標頭和payload計算簽名,您還可以驗證內容是否未被篡改。

JWT數據結構

JWT包含了使用“.”分隔的三部分: Header 頭部 Payload 負載 Signature 簽名 

JWT技術解決IM系統的認證痛點

Header

在header中通常包含了兩部分:token類型和采用的加密算法。{ "alg": "HS256", "typ": "JWT"} 接下來對這部分內容使用 Base64Url 編碼組成了JWT結構的第一部分。

Payload

Token的第二部分是負載,它包含了claim, claim是一些實體(通常指的用戶)的狀態和額外的元數據,有三種類型的claim:reserved, public 和 private.

Signature

Signature是對header和payload兩部分數據簽名,通過指定的算法生成哈希,以確保數據不會被篡改。

更多關于JWT的資料參看

https://jwt.io/introduction/

三、怎么做驗證

采用JWT驗證長連接的流程如下 

JWT技術解決IM系統的認證痛點

1、用戶登錄App,App從業務后臺拿到單點系統SSO頒發的token

2、當App需要使用IM功能時,將token傳給IM客服端SDK

3、SDK將用戶名及第2步中得到的token發給后臺的JWT Server(簽發jwttoken的模塊),請求jwttoken。

4、JWT Server通過SSO系統驗證token的合法性,如果合法,用跟IM Server約定的公鑰/私鑰(或用對稱加密),根據業務需要簽發jwttoken,返回給IM Client SDK。

5、IM Client SDK使用得到的jwttoken請求IM Server驗證長連接。IM Server根據約定的算法(不依賴其他系統)即可完成jwttoken合法性驗證。

頻繁建立長連接的驗證痛點得到解決。

四、缺點

1、JWT的最大缺點是服務器不保存會話狀態,所以在使用期間不可能取消令牌或更改令牌的權限。也就是說,一旦JWT簽發,在有效期內將會一直有效。

2、JWT本身包含認證信息,因此一旦信息泄露,任何人都可以獲得令牌的所有權限。為了減少盜用,JWT的有效期不宜設置太長。對于某些重要操作,用戶在使用時應該每次都進行進行身份驗證。

3、為了減少盜用和竊取,JWT不建議使用HTTP協議來傳輸代碼,而是使用加密的HTTPS(SSL)協議進行傳輸

以下這個地址的文章寫了一些適用JWT的場景

https://www.jianshu.com/p/af8360b83a9f

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巩留县| 都昌县| 屏东县| 通许县| 大田县| 加查县| 高唐县| 青田县| 乌兰县| 普安县| 二连浩特市| 漳浦县| 邢台县| 辉南县| 文成县| 宁陕县| 玛多县| 土默特右旗| 中阳县| 阿拉善盟| 东方市| 嫩江县| 齐河县| 大新县| 安化县| 孝昌县| 颍上县| 永泰县| 保定市| 铜川市| 潼南县| 台前县| 宁武县| 洛川县| 龙泉市| 澄城县| 四平市| 皋兰县| 芦溪县| 普格县| 张家口市|