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

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

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


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

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

01/

需要具備的基本要素

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. 異常處理

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

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

02/

設(shè)計模式

1. 直接域名

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

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

2. js-sdk

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

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

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

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

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

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

大家都知道,從一個房間走到另一個房間,必然要經(jīng)過一扇門。同樣,從一個網(wǎng)絡(luò)向另一個網(wǎng)絡(luò)發(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è)務(wù)平臺的域名共用父域.oa.com下的登錄態(tài)。

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

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

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


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


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

全部評論

暫無相關(guān)推薦