JWT技術解決IM系統的認證痛點
一、痛點
隨著業務的發展,多個業務線接入了IM系統,IM系統長連線的安全問題變得很重要。
瓜子有統一登入認證系統SSO,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 簽名
Header
在header中通常包含了兩部分:token型別和採用的加密演算法。{ "alg": "HS256", "typ": "JWT"} 接下來對這部分內容使用 Base64Url 編碼組成了JWT結構的第一部分。
Payload
Token的第二部分是負載,它包含了claim, claim是一些實體(通常指的使用者)的狀態和額外的後設資料,有三種型別的claim:reserved, public 和 private.
Signature
Signature是對header和payload兩部分資料簽名,透過指定的演算法生成雜湊,以確保資料不會被篡改。
更多關於JWT的資料參看
三、怎麼做驗證
採用JWT驗證長連線的流程如下
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的場景
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556438/viewspace-2220346/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 瞭解JWT認證JWT
- 自定義Django認證系統的技術方案Django
- 寬頻認證計費系統的認證技術主要有哪些
- CRM系統的痛點,如何解決?
- 秒殺系統的技術難點與解決方案
- express實現JWT使用者認證系統ExpressJWT
- drf的JWT認證JWT
- JWT 多表認證JWT
- CRM系統能為企業解決5大痛點
- 解決 Laravel JWT 多表認證時獲取不到當前認證使用者的問題LaravelJWT
- 系統登入認證流程對比(cookie方式與jwt)CookieJWT
- CDN加速技術可以解決網路客戶的哪些痛點問題?-VeCloudCloud
- DRF JWT認證(一)JWT
- DRF JWT認證(二)JWT
- DRF之JWT認證JWT
- KGB知識圖譜技術能夠解決哪些行業痛點?行業
- 區塊鏈防偽溯源技術,解決各行各業痛點問題區塊鏈
- CRM系統如何幫助客戶彙總並解決痛點
- JWT身份認證(附帶原始碼講解)JWT原始碼
- 作業系統(AIX)雙因素身份認證解決方案作業系統AI
- 『JWT』,你必須瞭解的認證登入方案JWT
- 圖解Jwt和shiro認證方式的區別圖解JWT
- koa 實現 jwt 認證JWT
- Django(65)jwt認證原理DjangoJWT
- 什麼是客戶的痛點?CRM系統如何解決痛點的四大流程
- Lumen 8.0 使用 Jwt 認證的 ApiJWTAPI
- 寬頻認證計費系統的主要特點
- 討論一下秒殺系統的技術難點與解決方案
- 認證系統之登入認證系統的進階使用 (二)
- 微商城分銷系統能為零售業解決哪些痛點?
- AIGC 真的解決了我的痛點AIGC
- 微信WiFi認證的解決方案WiFi
- 前端架構之node jwt認證前端架構JWT
- drf JWT認證模組與自定製JWT
- 使用 JWT 認證使用者身份JWT
- laravel 介面使用JWT(dingo)認證LaravelJWTGo
- JWT登入認證-專案BotBattleJWTBAT
- Laravel + dingoapi + jwt 使用者認證無法正確指定 guard 的解決辦法LaravelGoAPIJWT