IM开发基础知识补课(一):正确理解前置HTTP SSO单点登陆接口的原理
1、前言
一個安全的信息系統(tǒng),合法身份檢查是必須環(huán)節(jié)。尤其IM這種以“人”為中心的社交體系,身份認(rèn)證更是必不可少。
一些PC時代小型IM系統(tǒng)中,身份認(rèn)證可能直接做到長連接中(也就是整個IM系統(tǒng)都是以長連接為中心:身份鑒權(quán)、數(shù)據(jù)收發(fā)、文件傳送等等)。但當(dāng)前主流的IM(尤其新一代的移動端IM)中,都是“長”(指TCP或UDP長連接)、“短”(是指Http短連接)相結(jié)合的方式。
一個現(xiàn)代的移動端IM“長”、“短”連接配合內(nèi)容大致如下:
?
- 1)短連接用途1:前置HTTP的SSO單點接口來實現(xiàn)身份認(rèn)證;
- 2)短連接用途2:集群式的IM中可能還會有獨立(或集成于SSO單獨登陸接口中)的SLB接口(即基于HTTP短連接拉取IM服務(wù)器集群IP列表);
- 3)短連接用途3:各種小文件的上傳、下載接口實現(xiàn)(頭像、圖片、語音、文件等)都會是基于Http實現(xiàn);
- 4)長連接用途1:用戶的實時上、下線狀態(tài)通知;
- 5)長連接用途2:實時的加友、加群等指令收發(fā);
- 6)長連接用途3:服務(wù)端發(fā)起的其它實時指令推送等。
總之:當(dāng)今主流的移動IM系統(tǒng)中,“長”、“短”連接分工明確,各自將自身的優(yōu)勢發(fā)揮到最大化,優(yōu)點是:系統(tǒng)分工明確、分層清晰、業(yè)務(wù)劃分合理、負(fù)載方案成本低、符合移動網(wǎng)絡(luò)的特性等。
針對上述主流移動IM系統(tǒng)中“長”、“短”連接的分工方式,其中最為重要也是用戶最先接觸到的——就是基于Http的SSO單點登陸接口(有的系統(tǒng)里可能并不叫SSO接口,本文討論的是其廣義:即實現(xiàn)身份認(rèn)證功能的http接口),那么這個SSO接口工作原理是什么?可以怎么來實現(xiàn)?有無最佳實踐建議?
OK,帶著上述的這幾個疑問,讓我們開啟本文的正文部分。
正文內(nèi)容說明:正文部分介紹SSO單點登陸接口時,是以通用信息系統(tǒng)的角度來闡述原理、邏輯、最佳實踐,而非專門針對IM系統(tǒng),但道理是一模一樣的,理解原理后完全可以設(shè)計出適合您IM系統(tǒng)的SSO接口。(話外音:其實是懶的重新打字和畫圖 ^_^)。
2、相關(guān)文章
▼?帶著本文對SSO單點登陸(或者說身份認(rèn)證)接口的知識,您將能更好的讀懂下述技術(shù)文章:
?
- 《淺談IM系統(tǒng)的架構(gòu)設(shè)計》
- 《一套海量在線用戶的移動端IM架構(gòu)設(shè)計實踐分享(含詳細(xì)圖文)》
- 《談?wù)勔苿佣?IM 開發(fā)中登錄請求的優(yōu)化》
- 《移動端IM登錄時拉取數(shù)據(jù)如何作到省流量?》
- 《通俗易懂:基于集群的移動端IM接入層負(fù)載均衡方案分享》
總之,以上幾篇精選的文章可以跟本文的知識相輔相成,共同完善您的IM技術(shù)開發(fā)知識體系,希望對你有用。
▼?IM開發(fā)干貨系列文章適合作為IM開發(fā)熱點問題參考資料
- 《IM開發(fā)基礎(chǔ)知識補(bǔ)課(二):如何設(shè)計大量圖片文件的服務(wù)端存儲架構(gòu)?》
- 《IM開發(fā)基礎(chǔ)知識補(bǔ)課(三):快速理解服務(wù)端數(shù)據(jù)庫讀寫分離原理及實踐建議》
3、原作者
楊麗:擁有多年互聯(lián)網(wǎng)應(yīng)用系統(tǒng)研發(fā)經(jīng)驗,曾就職于古大集團(tuán),現(xiàn)任職中青易游的系統(tǒng)架構(gòu)師,主要負(fù)責(zé)公司研發(fā)中心業(yè)務(wù)系統(tǒng)的架構(gòu)設(shè)計以及新技術(shù)積累和培訓(xùn)。現(xiàn)階段主要關(guān)注開源軟件、軟件架構(gòu)、微服務(wù)以及大數(shù)據(jù)。
張輝清:10 多年的 IT 老兵,先后擔(dān)任攜程架構(gòu)師、古大集團(tuán)首席架構(gòu)、中青易游 CTO 等職務(wù),主導(dǎo)過兩家公司的技術(shù)架構(gòu)升級改造工作。現(xiàn)關(guān)注架構(gòu)與工程效率,技術(shù)與業(yè)務(wù)的匹配與融合,技術(shù)價值與創(chuàng)新。
4、單點登錄原理簡介
假設(shè)一個場景:公司內(nèi)部有財務(wù)、OA、訂單服務(wù)等各類相互獨立的應(yīng)用系統(tǒng),員工張三對這些系統(tǒng)有操作權(quán)限,如果張三想要登錄某個系統(tǒng)進(jìn)行業(yè)務(wù)操作,那么他需要輸入相應(yīng)的賬號與密碼。
想象一下:當(dāng)公司內(nèi)部有 100 個應(yīng)用系統(tǒng),張三是不是要輸入 100 次用戶名和密碼進(jìn)行登錄,然后分別才能進(jìn)行業(yè)務(wù)操作呢?顯然這是很不好的體驗。
因此我們需要引入一個這樣的機(jī)制:張三只要輸入一次用戶名和密碼登錄,成功登錄后,他就可以訪問財務(wù)系統(tǒng)、OA 系統(tǒng)、訂單服務(wù)等系統(tǒng)——這就是單點登錄。
單點登錄的英文全稱是 Single Sign On,簡稱是 SSO:
它的意思是說用戶只需要登錄一次,就可以在個人權(quán)限范圍內(nèi),訪問所有相互信任應(yīng)用的功能模塊,不管整個應(yīng)用群的內(nèi)部有多么復(fù)雜,對用戶而言,都是一個統(tǒng)一的整體。用戶訪問 Web 系統(tǒng)的整個應(yīng)用群與訪問單個系統(tǒng)一樣,登錄和注銷分別只要一次就夠了。
舉個簡單的例子,你登錄了百度網(wǎng)頁之后,點擊跳轉(zhuǎn)到百度貼吧,這時可以發(fā)現(xiàn)你已經(jīng)自動登錄了百度貼吧——這就是單獨登陸的原理。
5、理論聯(lián)系實際來講解SSO單點登陸技術(shù)實現(xiàn)
?
5.1基本介紹
針對本文上半部分的原理介紹,我們以一個真實的信息系統(tǒng)為例,理論聯(lián)系實際來講解具體的SSO單點登陸技術(shù)實現(xiàn)(實際上,用IM系統(tǒng)的設(shè)計思路來看這個例子,可能有點復(fù)雜,但知識是相通的,它更有助于對SSO完整知識體系的理解。)
SSO 的技術(shù)實現(xiàn)要想做好并不容易,作者認(rèn)為需求優(yōu)先級應(yīng)該先是單點登錄和單點注銷功能,然后是應(yīng)用接入的門檻,最后是數(shù)據(jù)安全性,安全性對于 SSO 也非常重要。SSO 的核心是認(rèn)證中心,但要實現(xiàn)用戶一次登錄,到處訪問的效果,技術(shù)實現(xiàn)需要建立在用戶系統(tǒng)、認(rèn)證中心、權(quán)限系統(tǒng)、企業(yè)門戶的基礎(chǔ)上。
各職責(zé)如下:
?
- 用戶系統(tǒng):負(fù)責(zé)用戶名、密碼等帳戶信息管理,包括增加、修改、啟用、停用用戶帳號,同時為認(rèn)證中心提供對用戶名和密碼的校驗;
- 認(rèn)證中心:負(fù)責(zé)憑證 token 的生成、加密、頒發(fā)、驗證、銷毀、登入 Login、登出 Logout。用戶只有擁有憑證并驗證通過才能訪問企業(yè)門戶;
- 權(quán)限系統(tǒng):負(fù)責(zé)角色管理、資源設(shè)置、授權(quán)設(shè)置、鑒定權(quán)限,具體實現(xiàn)可參考 RBAC。權(quán)限系統(tǒng)可為企業(yè)門戶提供用戶權(quán)限范圍內(nèi)的導(dǎo)航;
- 企業(yè)門戶:作為應(yīng)用系統(tǒng)的集成門戶 (Portal),集成了多個應(yīng)用系統(tǒng)的功能,為用戶提供鏈接導(dǎo)航、用戶信息和登出功能等。
5.2服務(wù)端功能實現(xiàn)
主要包含以下內(nèi)容:
?
- 登錄認(rèn)證:接收登錄帳號信息,讓用戶系統(tǒng)驗證用戶的登錄信息;
- 憑證生成:創(chuàng)建授權(quán)憑證 token,生成的憑證一般包含用戶帳號信息、過期時間等信息,它是一串加密的字符串,加密算法如 AES{憑證明文 +MD5 加信息},可采用 JWT 標(biāo)準(zhǔn);
- 憑證頒發(fā):與 SSO 客戶端通信,發(fā)送憑證給 SSO 客戶端;
- 憑證驗證:接收并校驗來自 SSO 客戶端的憑證有效性,憑證驗證包括算法驗證和數(shù)據(jù)驗證;
- 憑證銷毀與登出:接收來自 SSO 客戶端的登出請求,記錄并銷毀憑證,跳轉(zhuǎn)至登錄頁面。
5.3客戶端功能實現(xiàn)
客戶端的實現(xiàn)邏輯大致如下:
?
- 1)請求攔截:攔截應(yīng)用未登錄請求,跳轉(zhuǎn)至登錄頁面;
- 2)獲取憑證:接收并存儲由 SSO 服務(wù)端發(fā)來的憑證,憑證存儲的方式有 Cookie、Session、網(wǎng)址傳參、Header 等;
- 3)提交憑證驗證:與 SSO 服務(wù)端通信,發(fā)出校驗憑證有效性的請求;
- 4)獲取用戶權(quán)限:獲取該憑證的用戶權(quán)限,并返回受保護(hù)資源給用戶;
- 5)憑證銷毀與登出:銷毀本地會話,然后跳轉(zhuǎn)至登出頁面。
5.4用戶單點登錄流程
用戶的單點登錄流程如下:
?
- 1)登錄:將用戶輸入的用戶名和密碼發(fā)送至認(rèn)證中心,然后認(rèn)證中心調(diào)用用戶系統(tǒng)來驗證登錄信息;
- 2)生成并頒發(fā)憑證:通過登錄信息的驗證后,認(rèn)證中心創(chuàng)建授權(quán)憑證 token,然后把這個授權(quán)憑證 token 返回給 SSO 客戶端。SSO 客戶端拿到這個 token,進(jìn)行存儲。在后續(xù)請求中,在 HTTP 請求數(shù)據(jù)中都得加上這個 token;
- 3)憑證驗證:SSO 客戶端發(fā)送憑證 token 給認(rèn)證中心,認(rèn)證中心校驗這個 token 的有效性。憑證驗證有算法驗證和數(shù)據(jù)驗證,算法驗證可在 SSO 客戶端完成。
5.5用戶訪問流程和單點注銷
以上是用戶的訪問流程,如果用戶沒有有效的憑證,認(rèn)證中心將強(qiáng)制用戶進(jìn)入登錄流程。對于單點注銷,用戶如果注銷了應(yīng)用群內(nèi)的其中一個應(yīng)用,那么全局 token 也會被銷毀,應(yīng)用群內(nèi)的所有應(yīng)用將不能再被訪問。
?
5.6具體接入與集成
例子中的應(yīng)用接入與集成具體如下:
?
- 1)用戶系統(tǒng):接入國內(nèi)機(jī)票平臺的用戶系統(tǒng),負(fù)責(zé)登錄認(rèn)證;
- 2)權(quán)限系統(tǒng):接入國內(nèi)機(jī)票平臺的權(quán)限系統(tǒng);
- 3)認(rèn)證中心:負(fù)責(zé)生成并頒發(fā)憑證、銷毀憑證,改造國內(nèi)機(jī)票平臺的登入、登出;
- 4)憑證驗證:在國內(nèi)機(jī)票、國際機(jī)票應(yīng)用系統(tǒng)中調(diào)用 SSO 客戶端組件實現(xiàn)憑證的驗證;
- 5)企業(yè)門戶:由國內(nèi)機(jī)票平臺、國際機(jī)票平臺承擔(dān)。
?
6、附加知識:一項被稱為JWT的技術(shù)
JSON Web Token (JWT) 是目前應(yīng)用最為廣泛的 token 格式,是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于 JSON 的開放標(biāo)準(zhǔn)。該 token 設(shè)計緊湊且安全,特別適用于分布式站點的單點登錄、API 網(wǎng)關(guān)等場景。
JWT 的聲明一般被用來在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息。該 token 也可直接被用于認(rèn)證,也可被加密。JWT 信息體由 3 部分構(gòu)成:頭 Header+ 載荷 Payload+ 簽名 Signature。
JWT具體優(yōu)點如下:
?
- JWT 支持多種語言,C#、Java、JavaScript、Node.js、PHP 等很多語言都可以使用;
- JWT 可以自身存儲一些和業(yè)務(wù)邏輯有關(guān)的所必要的非敏感信息,因為有了 Payload 部分;
- 利于傳輸,因為 JWT 的構(gòu)成非常簡單,字節(jié)占用很小;
- 不需要在服務(wù)端保存會話信息,不僅省去服務(wù)端資源開銷,而且使得應(yīng)用易于擴(kuò)展。
網(wǎng)易云信,你身邊的即時通訊和音視頻技術(shù)專家,了解我們,請戳網(wǎng)易云信官網(wǎng)
想要行業(yè)洞察和技術(shù)干貨,請關(guān)注網(wǎng)易云信博客
本文轉(zhuǎn)載自52im,作者:JackJiang
總結(jié)
以上是生活随笔為你收集整理的IM开发基础知识补课(一):正确理解前置HTTP SSO单点登陆接口的原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巨头拼杀下的IM市场,网易云信如何站上终
- 下一篇: IM开发基础知识补课(三):快速理解服务