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

1 評論 12090 瀏覽 40 收藏 8 分鐘

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

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

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

一、需要具備的基本要素

注:下文的業務側指需要接入統一登錄的業務方。

一個統一登錄的登錄流程:攜帶參數發起登錄 -> 統一登錄認證 -> 重定向業務后端地址 -> 業務側注入登錄態 -> 業務側重定向到前端頁面。

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

1. 統一登錄認證

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

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

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

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

2. 認證成功后的跳轉

當認證成功后,統一服務會發起業務側url跳轉。

上面說的業務方攜帶參數發起登錄,這里的參數一般都有哪些呢?

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

重定向地址用于認證成功后的業務跳轉,一般是業務端的后臺地址,統一登錄會把用戶的信息透傳給業務側,業務側一般會做:登錄態注入相應的業務域名和做一些用戶數據初始化的操作。

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

個性化數據就是用于存放這個登錄退出前的前端頁面地址,統一登錄會透傳這個個性化數據到業務側,業務側注入登錄態成功后,會跳轉到這個前端頁面。

當然個性化數據還可以放置其他的一些業務側數據。

3. 異常處理

統一登錄的過程可能會有以下的異常,要注意做好錯誤碼和錯誤提示的返回。

  • 應用未登記指的是業務側沒有獲取統一登錄服務授權的appId和appSecret;
  • 用戶已存在指的是數據庫里已經存在同一個用戶;
  • 用戶注冊信息不合法;
  • 認證超時;

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

二、設計模式

1. 直接域名

統一登錄平臺直接提供一個統一登錄域名,當登錄態失效時,業務側重定向到統一登錄地址。

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

2. js-sdk

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

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

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

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

3. 網關

什么是網關?

大家都知道,從一個房間走到另一個房間,必然要經過一扇門。同樣,從一個網絡向另一個網絡發送信息,也必須經過一道“關口”,這道關口就是網關。

網關方式和上面兩種不一樣的地方是,它登錄態的注入域名是固定的,一般是多個子域名共用父域下的登錄態。

舉個例子,a.oa.com和b.oa.com2個業務平臺的域名共用父域.oa.com下的登錄態。

網關的方式比較適合公司內部的公共資源平臺鑒權。

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

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

 

前百度前端工程師,現騰訊前端工程師,公眾號:產品的技術小課。

本文由 @lemon 原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自?Unsplash,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 可以介紹下騰訊的項目流程和產品工作么

    來自山東 回復