<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jack Jiang

    我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
    posts - 494, comments - 13, trackbacks - 0, articles - 1

    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單點(diǎn)接口來實(shí)現(xiàn)身份認(rèn)證;

    2)短連接用途2:集群式的IM中可能還會有獨(dú)立(或集成于SSO單獨(dú)登陸接口中)的SLB接口(即基于HTTP短連接拉取IM服務(wù)器集群IP列表);

    3)短連接用途3:各種小文件的上傳、下載接口實(shí)現(xiàn)(頭像、圖片、語音、文件等)都會是基于Http實(shí)現(xiàn);

    4)長連接用途1:用戶的實(shí)時上、下線狀態(tài)通知;

    5)長連接用途2:實(shí)時的加友、加群等指令收發(fā);

    6)長連接用途3:服務(wù)端發(fā)起的其它實(shí)時指令推送等。

    總之:當(dāng)今主流的移動IM系統(tǒng)中,“長”、“短”連接分工明確,各自將自身的優(yōu)勢發(fā)揮到最大化,優(yōu)點(diǎn)是:系統(tǒng)分工明確、分層清晰、業(yè)務(wù)劃分合理、負(fù)載方案成本低、符合移動網(wǎng)絡(luò)的特性等。

    針對上述主流移動IM系統(tǒng)中“長”、“短”連接的分工方式,其中最為重要也是用戶最先接觸到的——就是基于Http的SSO單點(diǎn)登陸接口(有的系統(tǒng)里可能并不叫SSO接口,本文討論的是其廣義:即實(shí)現(xiàn)身份認(rèn)證功能的http接口),那么這個SSO接口工作原理是什么?可以怎么來實(shí)現(xiàn)?有無最佳實(shí)踐建議?

    OK,帶著上述的這幾個疑問,讓我們開啟本文的正文部分。

    正文內(nèi)容說明:正文部分介紹SSO單點(diǎn)登陸接口時,是以通用信息系統(tǒng)的角度來闡述原理、邏輯、最佳實(shí)踐,而非專門針對IM系統(tǒng),但道理是一模一樣的,理解原理后完全可以設(shè)計出適合您IM系統(tǒng)的SSO接口。(話外音:其實(shí)是懶的重新打字和畫圖 ^_^)。

    學(xué)習(xí)交流:

    - 即時通訊開發(fā)交流群:320837163 [推薦]

    - 移動端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動端IM

    (本文同步發(fā)布于:http://www.52im.net/thread-1351-1-1.html

    2、相關(guān)文章

    ▼ 帶著本文對SSO單點(diǎn)登陸(或者說身份認(rèn)證)接口的知識,您將能更好的讀懂下述技術(shù)文章:

    淺談IM系統(tǒng)的架構(gòu)設(shè)計

    一套海量在線用戶的移動端IM架構(gòu)設(shè)計實(shí)踐分享(含詳細(xì)圖文)

    談?wù)勔苿佣?IM 開發(fā)中登錄請求的優(yōu)化

    移動端IM登錄時拉取數(shù)據(jù)如何作到省流量?

    通俗易懂:基于集群的移動端IM接入層負(fù)載均衡方案分享

    總之,以上幾篇精選的文章可以跟本文的知識相輔相成,共同完善您的IM技術(shù)開發(fā)知識體系,希望對你有用。

    ▼ IM開發(fā)干貨系列文章也適合作為IM開發(fā)的系統(tǒng)性入門資料(本文是其第10篇):

    IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(一):保證在線實(shí)時消息的可靠投遞

    IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(二):保證離線消息的可靠投遞

    如何保證IM實(shí)時消息的“時序性”與“一致性”?

    IM單聊和群聊中的在線狀態(tài)同步應(yīng)該用“推”還是“拉”?

    IM群聊消息如此復(fù)雜,如何保證不丟不重?

    一種Android端IM智能心跳算法的設(shè)計與實(shí)現(xiàn)探討(含樣例代碼)

    移動端IM登錄時拉取數(shù)據(jù)如何作到省流量?

    通俗易懂:基于集群的移動端IM接入層負(fù)載均衡方案分享

    淺談移動端IM的多點(diǎn)登陸和消息漫游原理

    IM開發(fā)基礎(chǔ)知識補(bǔ)課:正確理解前置HTTP SSO單點(diǎn)登陸接口的原理》(本文)

    如果您正在查閱更多移動端IM開發(fā)資料,強(qiáng)烈推薦閱讀《新手入門一篇就夠:從零開發(fā)移動端IM》。

    3、原作者

    楊麗:擁有多年互聯(lián)網(wǎng)應(yīng)用系統(tǒng)研發(fā)經(jīng)驗(yàn),曾就職于古大集團(tuán),現(xiàn)任職中青易游的系統(tǒng)架構(gòu)師,主要負(fù)責(zé)公司研發(fā)中心業(yè)務(wù)系統(tǒng)的架構(gòu)設(shè)計以及新技術(shù)積累和培訓(xùn)?,F(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)升級改造工作?,F(xiàn)關(guān)注架構(gòu)與工程效率,技術(shù)與業(yè)務(wù)的匹配與融合,技術(shù)價值與創(chuàng)新。

    4、單點(diǎn)登錄原理簡介

    假設(shè)一個場景:公司內(nèi)部有財務(wù)、OA、訂單服務(wù)等各類相互獨(dú)立的應(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ù)操作呢?顯然這是很不好的體驗(yàn)。

    因此我們需要引入一個這樣的機(jī)制:張三只要輸入一次用戶名和密碼登錄,成功登錄后,他就可以訪問財務(wù)系統(tǒng)、OA 系統(tǒng)、訂單服務(wù)等系統(tǒng)——這就是單點(diǎn)登錄。


    單點(diǎn)登錄的英文全稱是 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)頁之后,點(diǎn)擊跳轉(zhuǎn)到百度貼吧,這時可以發(fā)現(xiàn)你已經(jīng)自動登錄了百度貼吧——這就是單獨(dú)登陸的原理。

    5、理論聯(lián)系實(shí)際來講解SSO單點(diǎn)登陸技術(shù)實(shí)現(xiàn)

    5.1 基本介紹

    針對本文上半部分的原理介紹,我們以一個真實(shí)的信息系統(tǒng)為例,理論聯(lián)系實(shí)際來講解具體的SSO單點(diǎn)登陸技術(shù)實(shí)現(xiàn)(實(shí)際上,用IM系統(tǒng)的設(shè)計思路來看這個例子,可能有點(diǎn)復(fù)雜,但知識是相通的,它更有助于對SSO完整知識體系的理解。)


    SSO 的技術(shù)實(shí)現(xiàn)要想做好并不容易,作者認(rèn)為需求優(yōu)先級應(yīng)該先是單點(diǎn)登錄和單點(diǎn)注銷功能,然后是應(yīng)用接入的門檻,最后是數(shù)據(jù)安全性,安全性對于 SSO 也非常重要。SSO 的核心是認(rèn)證中心,但要實(shí)現(xiàn)用戶一次登錄,到處訪問的效果,技術(shù)實(shí)現(xiàn)需要建立在用戶系統(tǒng)、認(rèn)證中心、權(quán)限系統(tǒng)、企業(yè)門戶的基礎(chǔ)上。

    各職責(zé)如下:

    用戶系統(tǒng):負(fù)責(zé)用戶名、密碼等帳戶信息管理,包括增加、修改、啟用、停用用戶帳號,同時為認(rèn)證中心提供對用戶名和密碼的校驗(yàn);

    認(rèn)證中心:負(fù)責(zé)憑證 token 的生成、加密、頒發(fā)、驗(yàn)證、銷毀、登入 Login、登出 Logout。用戶只有擁有憑證并驗(yàn)證通過才能訪問企業(yè)門戶;

    權(quán)限系統(tǒng):負(fù)責(zé)角色管理、資源設(shè)置、授權(quán)設(shè)置、鑒定權(quán)限,具體實(shí)現(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ù)端功能實(shí)現(xiàn)

    主要包含以下內(nèi)容:

    登錄認(rèn)證:接收登錄帳號信息,讓用戶系統(tǒng)驗(yàn)證用戶的登錄信息;

    憑證生成:創(chuàng)建授權(quán)憑證 token,生成的憑證一般包含用戶帳號信息、過期時間等信息,它是一串加密的字符串,加密算法如 AES{憑證明文 +MD5 加信息},可采用 JWT 標(biāo)準(zhǔn);

    憑證頒發(fā):與 SSO 客戶端通信,發(fā)送憑證給 SSO 客戶端;

    憑證驗(yàn)證:接收并校驗(yàn)來自 SSO 客戶端的憑證有效性,憑證驗(yàn)證包括算法驗(yàn)證和數(shù)據(jù)驗(yàn)證;

    憑證銷毀與登出:接收來自 SSO 客戶端的登出請求,記錄并銷毀憑證,跳轉(zhuǎn)至登錄頁面。

    5.3 客戶端功能實(shí)現(xiàn)

    客戶端的實(shí)現(xiàn)邏輯大致如下:

    1)請求攔截:攔截應(yīng)用未登錄請求,跳轉(zhuǎn)至登錄頁面;

    2)獲取憑證:接收并存儲由 SSO 服務(wù)端發(fā)來的憑證,憑證存儲的方式有 Cookie、Session、網(wǎng)址傳參、Header 等;

    3)提交憑證驗(yàn)證:與 SSO 服務(wù)端通信,發(fā)出校驗(yàn)憑證有效性的請求;

    4)獲取用戶權(quán)限:獲取該憑證的用戶權(quán)限,并返回受保護(hù)資源給用戶;

    5)憑證銷毀與登出:銷毀本地會話,然后跳轉(zhuǎn)至登出頁面。

    5.4 用戶單點(diǎn)登錄流程


    用戶的單點(diǎn)登錄流程如下:

    1)登錄:將用戶輸入的用戶名和密碼發(fā)送至認(rèn)證中心,然后認(rèn)證中心調(diào)用用戶系統(tǒng)來驗(yàn)證登錄信息;

    2)生成并頒發(fā)憑證:通過登錄信息的驗(yàn)證后,認(rèn)證中心創(chuàng)建授權(quán)憑證 token,然后把這個授權(quán)憑證 token 返回給 SSO 客戶端。SSO 客戶端拿到這個 token,進(jìn)行存儲。在后續(xù)請求中,在 HTTP 請求數(shù)據(jù)中都得加上這個 token;

    3)憑證驗(yàn)證:SSO 客戶端發(fā)送憑證 token 給認(rèn)證中心,認(rèn)證中心校驗(yàn)這個 token 的有效性。憑證驗(yàn)證有算法驗(yàn)證和數(shù)據(jù)驗(yàn)證,算法驗(yàn)證可在 SSO 客戶端完成。

    5.5 用戶訪問流程和單點(diǎn)注銷


    以上是用戶的訪問流程,如果用戶沒有有效的憑證,認(rèn)證中心將強(qiáng)制用戶進(jìn)入登錄流程。對于單點(diǎ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)憑證驗(yàn)證:在國內(nèi)機(jī)票、國際機(jī)票應(yīng)用系統(tǒng)中調(diào)用 SSO 客戶端組件實(shí)現(xiàn)憑證的驗(yà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)(RFC 7519)。該 token 設(shè)計緊湊且安全,特別適用于分布式站點(diǎn)的單點(diǎn)登錄、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)點(diǎn)如下:

    JWT 支持多種語言,C#、Java、JavaScript、Node.js、PHP 等很多語言都可以使用;

    JWT 可以自身存儲一些和業(yè)務(wù)邏輯有關(guān)的所必要的非敏感信息,因?yàn)橛辛?Payload 部分;

    利于傳輸,因?yàn)?JWT 的構(gòu)成非常簡單,字節(jié)占用很小;

    不需要在服務(wù)端保存會話信息,不僅省去服務(wù)端資源開銷,而且使得應(yīng)用易于擴(kuò)展。

    (本文同步發(fā)布于:http://www.52im.net/thread-1351-1-1.html

    附錄:更多IM開發(fā)技術(shù)文章

    [1] 有關(guān)IM架構(gòu)設(shè)計:

    淺談IM系統(tǒng)的架構(gòu)設(shè)計

    簡述移動端IM開發(fā)的那些坑:架構(gòu)設(shè)計、通信協(xié)議和客戶端

    一套海量在線用戶的移動端IM架構(gòu)設(shè)計實(shí)踐分享(含詳細(xì)圖文)

    一套原創(chuàng)分布式即時通訊(IM)系統(tǒng)理論架構(gòu)方案

    從零到卓越:京東客服即時通訊系統(tǒng)的技術(shù)架構(gòu)演進(jìn)歷程

    蘑菇街即時通訊/IM服務(wù)器開發(fā)之架構(gòu)選擇

    騰訊QQ1.4億在線用戶的技術(shù)挑戰(zhàn)和架構(gòu)演進(jìn)之路PPT

    微信后臺基于時間序的海量數(shù)據(jù)冷熱分級架構(gòu)設(shè)計實(shí)踐

    微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(演講全文)

    如何解讀《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡》

    快速裂變:見證微信強(qiáng)大后臺架構(gòu)從0到1的演進(jìn)歷程(一)

    17年的實(shí)踐:騰訊海量產(chǎn)品的技術(shù)方法論

    移動端IM中大規(guī)模群消息的推送如何保證效率、實(shí)時性?

    現(xiàn)代IM系統(tǒng)中聊天消息的同步和存儲方案探討

    >> 更多同類文章 ……

    [2] 有關(guān)IM安全的文章:

    即時通訊安全篇(一):正確地理解和使用Android端加密算法

    即時通訊安全篇(二):探討組合加密算法在IM中的應(yīng)用

    即時通訊安全篇(三):常用加解密算法與通訊安全講解

    即時通訊安全篇(四):實(shí)例分析Android中密鑰硬編碼的風(fēng)險

    即時通訊安全篇(五):對稱加密技術(shù)在Android平臺上的應(yīng)用實(shí)踐

    即時通訊安全篇(六):非對稱加密技術(shù)的原理與應(yīng)用實(shí)踐

    傳輸層安全協(xié)議SSL/TLS的Java平臺實(shí)現(xiàn)簡介和Demo演示

    理論聯(lián)系實(shí)際:一套典型的IM通信協(xié)議設(shè)計詳解(含安全層設(shè)計)

    微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解

    來自阿里OpenIM:打造安全可靠即時通訊服務(wù)的技術(shù)實(shí)踐分享

    簡述實(shí)時音視頻聊天中端到端加密(E2EE)的工作原理

    移動端安全通信的利器——端到端加密(E2EE)技術(shù)詳解

    Web端即時通訊安全:跨站點(diǎn)WebSocket劫持漏洞詳解(含示例代碼)

    通俗易懂:一篇掌握即時通訊的消息傳輸安全原理

    >> 更多同類文章 ……

    [3] IM開發(fā)綜合文章:

    移動端IM中大規(guī)模群消息的推送如何保證效率、實(shí)時性?

    移動端IM開發(fā)需要面對的技術(shù)問題

    開發(fā)IM是自己設(shè)計協(xié)議用字節(jié)流好還是字符流好?

    請問有人知道語音留言聊天的主流實(shí)現(xiàn)方式嗎?

    IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(一):保證在線實(shí)時消息的可靠投遞

    IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(二):保證離線消息的可靠投遞

    如何保證IM實(shí)時消息的“時序性”與“一致性”?

    一個低成本確保IM消息時序的方法探討

    IM單聊和群聊中的在線狀態(tài)同步應(yīng)該用“推”還是“拉”?

    IM群聊消息如此復(fù)雜,如何保證不丟不重?

    談?wù)勔苿佣?IM 開發(fā)中登錄請求的優(yōu)化

    移動端IM登錄時拉取數(shù)據(jù)如何作到省流量?

    淺談移動端IM的多點(diǎn)登陸和消息漫游原理

    完全自已開發(fā)的IM該如何設(shè)計“失敗重試”機(jī)制?

    通俗易懂:基于集群的移動端IM接入層負(fù)載均衡方案分享

    微信對網(wǎng)絡(luò)影響的技術(shù)試驗(yàn)及分析(論文全文)

    即時通訊系統(tǒng)的原理、技術(shù)和應(yīng)用(技術(shù)論文)

    開源IM工程“蘑菇街TeamTalk”的現(xiàn)狀:一場有始無終的開源秀

    QQ音樂團(tuán)隊分享:Android中的圖片壓縮技術(shù)詳解(上篇)

    QQ音樂團(tuán)隊分享:Android中的圖片壓縮技術(shù)詳解(下篇)

    騰訊原創(chuàng)分享(一):如何大幅提升移動網(wǎng)絡(luò)下手機(jī)QQ的圖片傳輸速度和成功率

    騰訊原創(chuàng)分享(二):如何大幅壓縮移動網(wǎng)絡(luò)下APP的流量消耗(上篇)

    騰訊原創(chuàng)分享(二):如何大幅壓縮移動網(wǎng)絡(luò)下APP的流量消耗(下篇)

    如約而至:微信自用的移動端IM網(wǎng)絡(luò)層跨平臺組件庫Mars已正式開源

    基于社交網(wǎng)絡(luò)的Yelp是如何實(shí)現(xiàn)海量用戶圖片的無損壓縮的?

    >> 更多同類文章 ……

    (本文同步發(fā)布于:http://www.52im.net/thread-1351-1-1.html



    作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
    出處:http://www.52im.net/space-uid-1.html
    交流:歡迎加入即時通訊開發(fā)交流群 215891622
    討論:http://www.52im.net/
    Jack Jiang同時是【原創(chuàng)Java Swing外觀工程BeautyEye】【輕量級移動端即時通訊框架MobileIMSDK】的作者,可前往下載交流。
    本博文 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處(也可前往 我的52im.net 找到我)。


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
    主站蜘蛛池模板: 99爱在线精品免费观看| 最新亚洲精品国偷自产在线| 亚洲国产成人久久精品99 | ass亚洲**毛茸茸pics| 色播亚洲视频在线观看| 久久久久亚洲AV无码专区体验| 亚洲国产综合无码一区| 亚洲精品中文字幕乱码三区| 色噜噜亚洲精品中文字幕| 亚洲色婷婷综合久久| 亚洲人成人网站色www| 久久亚洲精品成人| 亚洲电影一区二区三区| 久久亚洲精品中文字幕| 亚洲视频国产精品| 亚洲香蕉久久一区二区三区四区| 亚洲中文无码av永久| 亚洲综合精品第一页| 国产精品久久久久久亚洲小说 | 亚洲狠狠婷婷综合久久久久| 亚洲成在人线av| 精品亚洲aⅴ在线观看| 亚洲国产成人精品电影| 国产精品高清视亚洲精品| 亚洲精品女同中文字幕| 美女黄网站人色视频免费| 国产精品1024在线永久免费| 久久九九全国免费| 国产香蕉免费精品视频| 成人啪精品视频免费网站| 四虎永久成人免费影院域名| 久久久久无码专区亚洲av| 亚洲av中文无码乱人伦在线播放| 亚洲美女视频一区二区三区| 亚洲中文字幕无码久久2020 | 亚洲欧洲国产精品久久| 亚洲熟妇无码八V在线播放| 黄色大片免费网站| 久久精品国产影库免费看| 少妇高潮太爽了在线观看免费 | 亚洲热妇无码AV在线播放|