天天看點

oauth2 單點登入_了解使用者認證鑒權4-sso 單點登入

chromedev:了解使用者認證鑒權1-cookie session​zhuanlan.zhihu.com

oauth2 單點登入_了解使用者認證鑒權4-sso 單點登入

chromedev:了解使用者認證鑒權2-JWT,Token認證​zhuanlan.zhihu.com

oauth2 單點登入_了解使用者認證鑒權4-sso 單點登入

chromedev:了解使用者認證鑒權3-oauth2 認證(附 github 登入 demo)​zhuanlan.zhihu.com

oauth2 單點登入_了解使用者認證鑒權4-sso 單點登入

sso 單點登入

單點登入是我這講的這些認證方式裡面最複雜的,實作方式也很多,我們前端要知道 什麼是單點登入,它适用的場景是什麼,不用去扣代碼實作

公司發展越來越大,每個内部系統使用起來都要登入一遍是不是很煩,比方我司系統都是企業微信掃碼登入的,每個系統都要掃一次 是件很煩的事,能不能在一個地方登入了,其他系統進入的時候就知道了已經登入了,相當各個個系統 共享 session,那這種場景就适合單點登入了

單點登入 英文全稱是 Single Sign On,簡稱就是 SSO,解釋就是說:在多個應用系統中,隻需要登入一次,就可以通路其他互相信任的應用系統

注意哈,這個和 Oauth2 的差别哈,Oauth2 是解決 第三方授權登入,SSO是為了解決 内部系統 一次登入 到處使用,共享 session 的問題,

有的人會講,小編在 cookie, session 那一節 不是說 存儲sesson,有狀态不好碼,注意了,SSO 主要在内部系統,内部系統的人撐破天 50 萬,這個是沒問題

session 是不适合 日活上百萬的,所有說不同的技術有不同使用場景,脫離了業務場景,說哪個技術厲害就是耍流氓,就像網上的噴子天天讨論

Vue,React,Angular

哪個厲害,無聊,沒有業務場景,就沒有讨論價值

我們先講講下 SSO 通過 cookie 最簡單的實作方式

比方我們現在有 http://app1.a.com 營銷管理平台,http://app2.a.com 投訴管理平台,http://app3.a.com 企業oa管理平台, 大家還記得我們在 cookie 那篇講過, cookie 有個 domain 屬性,如果我把 domain 設定成

a.com

, 這樣的話,這個 cookie 就能同時被上面 3 個域名同時擷取到,那不就解決了三個系統之間傳遞資訊了,把使用者登入狀态放在 這個 cookie 就好了,那現在需要解決的是 上面3個系統怎麼來标記 通過這個cookie來擷取到對應的使用者資訊,使用者的seeesion 問題了

那要是我們有個 專門儲存 session 的系統不就可以了麼,每個系統拿着 同一個cookie 去這個 session 伺服器擷取資訊不就好了 上面這種就是最簡單版的 SSO 了,大部分公司就是用的這套,貼個圖

oauth2 單點登入_了解使用者認證鑒權4-sso 單點登入

看這幅圖就基本明白了,Common Session 服務起負責存儲 session,每個系統去它拿就好了,在浏覽器端顯示的就是 你在 http://app1.a.com 登入的時候,會跳轉到 session 那台伺服器,登入後,設定一個 cookie ,domain 設定成 a.com,然後跳轉回去 app1.a.com, app1的後端通過cookie 去 common session 擷取 使用者資訊,使用者狀态

那要是2個系統在不同的一級域名下怎麼辦呀?

不同域名下的 SSO

oauth2 裡擷取 accesstoken(還記得吧,這個地方派上用場了) app1 可以通過 oauth2的方式 去獲得這個 cookie,存到a的域名下,同樣拿着這個 cookie 去 common session 伺服器擷取使用者資訊,這裡不清楚 oauth2 要去看看之前那篇 寫 oauth2 的

當然我這裡是把整個流程梳理了,這裡面其實還有很多細節點,比如 cookie 檢驗的問題,session 過去的問題,不通過頁面,後端直接跳轉的問題,權限問題,這些是細節,我這裡就不講,這些後端涉及更多,我們要了解的是這整個流程

總結

  • SSO 是解決 隻需要登入一次,就可以通路其他互相信任的應用系統
  • SSO 适合公司内部多系統

下篇我們講講 LDAP認證,掃碼認證

如果你喜歡也可以關注我的 公衆号 「chromedev」

oauth2 單點登入_了解使用者認證鑒權4-sso 單點登入