騰訊工作心得:統(tǒng)一登錄的幾種常用設計模式

資訊頻道 - 設計技 來源:人人都是產(chǎn)品經(jīng)理 作者:cdo 2021-01-12

很多時候我們都會遇到需要登陸的情況,特別是在系統(tǒng)設計中,我們常遇到統(tǒng)一登錄問題,比如在公司的多種項目上;統(tǒng)一登陸需要注意哪些要點,有什么設計方法?本文作者介紹了統(tǒng)一登錄服務需要考慮的點和幾種常用的設計模式,我們一起來看一下。


在公司內(nèi)部,如果有多個項目,每個項目都有登錄,并且多個項目想要共用一套賬戶體系時,一般都會設計一個統(tǒng)一登錄服務來實現(xiàn)業(yè)務快速接入。

下面講下做一個統(tǒng)一登錄服務需要考慮的點和幾種常用的設計模式:

01/

需要具備的基本要素

注:下文的業(yè)務側(cè)指需要接入統(tǒng)一登錄的業(yè)務方。

一個統(tǒng)一登錄的登錄流程:攜帶參數(shù)發(fā)起登錄 -> 統(tǒng)一登錄認證 -> 重定向業(yè)務后端地址 -> 業(yè)務側(cè)注入登錄態(tài) -> 業(yè)務側(cè)重定向到前端頁面。

從登錄流程可以看出幾個核心要點:

1. 統(tǒng)一登錄認證

按道理統(tǒng)一登錄服務,不是隨隨便便一個業(yè)務都能接入的;比如公司外部的 惡意方堅決不能讓它接入,所以統(tǒng)一登錄必須要有來源的認證。

需要接入的業(yè)務方,一般會給它分配appId和appSecret,appId用于識別業(yè)務,比如appId=1表示是采購平臺,appId=2表示是審核平臺。

appSecret是業(yè)務方秘鑰,業(yè)務方需要使用密鑰通過算法計算簽名,只有統(tǒng)一登錄服務才能解出這個簽名,從而識別出是信任授權(quán)應用,應用認證才能通過。

當應用認證通過后,開始校驗用戶,如果是新用戶注冊,就把業(yè)務appId和用戶信息寫入數(shù)據(jù)庫;如果是老用戶則直接校驗數(shù)據(jù)庫數(shù)據(jù),用戶校驗成功后,整個認證成功。

2. 認證成功后的跳轉(zhuǎn)

當認證成功后,統(tǒng)一服務會發(fā)起業(yè)務側(cè)url跳轉(zhuǎn)。

上面說的業(yè)務方攜帶參數(shù)發(fā)起登錄,這里的參數(shù)一般都有哪些呢?

appId、簽名、用戶信息、個性化數(shù)據(jù)、重定向地址 (appId和簽名上面已經(jīng)說明用途)。

重定向地址用于認證成功后的業(yè)務跳轉(zhuǎn),一般是業(yè)務端的后臺地址,統(tǒng)一登錄會把用戶的信息透傳給業(yè)務側(cè),業(yè)務側(cè)一般會做:登錄態(tài)注入相應的業(yè)務域名和做一些用戶數(shù)據(jù)初始化的操作。

個性化數(shù)據(jù)有什么用?當你訪問一個頁面時,登錄態(tài)失效后會自動退出到登錄頁面,當再次登錄成功時,按道理最好是跳轉(zhuǎn)到當初退出時的具體頁面。

個性化數(shù)據(jù)就是用于存放這個登錄退出前的前端頁面地址,統(tǒng)一登錄會透傳這個個性化數(shù)據(jù)到業(yè)務側(cè),業(yè)務側(cè)注入登錄態(tài)成功后,會跳轉(zhuǎn)到這個前端頁面。

當然個性化數(shù)據(jù)還可以放置其他的一些業(yè)務側(cè)數(shù)據(jù)。

3. 異常處理

統(tǒng)一登錄的過程可能會有以下的異常,要注意做好錯誤碼和錯誤提示的返回。
.應用未登記指的是業(yè)務側(cè)沒有獲取統(tǒng)一登錄服務授權(quán)的appId和appSecret;
.用戶已存在指的是數(shù)據(jù)庫里已經(jīng)存在同一個用戶;
.用戶注冊信息不合法;
.認證超時;

統(tǒng)一登錄的登錄認證一般都會做 “防重放” 的防御,意思就是業(yè)務側(cè)發(fā)送的簽名是有有效期的(有效期一般按秒計算),是為了防止惡意用戶利用算好的簽名重復多次登錄。

02/

設計模式

1. 直接域名

統(tǒng)一登錄平臺直接提供一個統(tǒng)一登錄域名,當?shù)卿洃B(tài)失效時,業(yè)務側(cè)重定向到統(tǒng)一登錄地址。

這種模式比較適用于公司內(nèi)部的業(yè)務平臺。這種模式的缺點是靈活性低,根據(jù)具體業(yè)務做相應的UI定制化比較麻煩。

2. js-sdk

sdk的方式比較靈活,其實是把登錄的前端邏輯都封裝在一個js-sdk當中,包括UI、發(fā)起登錄請求等事件;需要接入的業(yè)務側(cè),只要引入這個sdk就可以使用。

js-sdk一個比較好的優(yōu)點是,在用戶引用它時,它可以把登錄界面以iframe的形式嵌入到業(yè)務頁面當中,可以自定義滿足一些業(yè)務登錄界面的個性化需求,比如a業(yè)務的登錄界面需要放置宣傳a業(yè)務的產(chǎn)品信息,可自定義登錄信息框的位置。

而且js-sdk還可以提供改變登錄樣式的接口,可以讓業(yè)務根據(jù)需求做些樣式調(diào)整,比如更改統(tǒng)一登錄信息框的背景圖、字體、間距等。

微信統(tǒng)一登錄也是使用的這種模式,這種模式適用于開放型平臺的第三方登錄

3. 網(wǎng)關(guān)

什么是網(wǎng)關(guān)?

大家都知道,從一個房間走到另一個房間,必然要經(jīng)過一扇門。同樣,從一個網(wǎng)絡向另一個網(wǎng)絡發(fā)送信息,也必須經(jīng)過一道“關(guān)口”,這道關(guān)口就是網(wǎng)關(guān)。

網(wǎng)關(guān)方式和上面兩種不一樣的地方是,它登錄態(tài)的注入域名是固定的,一般是多個子域名共用父域下的登錄態(tài)。

舉個例子,a.oa.com和b.oa.com2個業(yè)務平臺的域名共用父域.oa.com下的登錄態(tài)。

網(wǎng)關(guān)的方式比較適合公司內(nèi)部的公共資源平臺鑒權(quán)。

比如公司內(nèi)部的oa系統(tǒng)、資源學習平臺、用戶信息平臺,在訪問公司內(nèi)網(wǎng)平臺時會經(jīng)過公司網(wǎng)關(guān),統(tǒng)一登錄服務在網(wǎng)關(guān)這一層就做了攔截校驗;其一是校驗該業(yè)務是否接入了網(wǎng)關(guān)登錄服務,其二是校驗是否有登錄態(tài),如果沒有則在網(wǎng)關(guān)層就直接重定向到統(tǒng)一登錄地址。

這是最簡單的設計模式,業(yè)務側(cè)只需要登記接入網(wǎng)關(guān)服務信息就可以使用,不需要像其他模式一樣還要引入sdk或者做重定向;缺點是沒法滿足業(yè)務定制化需求,比如定制化的UI登錄界面,登錄成功后業(yè)務側(cè)的業(yè)務初始化操作,登錄態(tài)父域名是固定的。


前百度前端工程師,現(xiàn)騰訊前端工程師,公眾號:產(chǎn)品的技術(shù)小課。


聲明:站內(nèi)網(wǎng)友所發(fā)表的所有內(nèi)容及言論僅代表其本人,并不反映任何網(wǎng)站意見及觀點。

全部評論

暫無相關(guān)推薦