前端需要了解的SSO與CAS知識
不管是什麼公司,只要產品數量大於一個,那麼單點登入勢必是繞不過去的一個問題。作為前端程式設計師,我們對其雖然接觸不多,但適當的瞭解還是必要的。本文就來談談單點登入相關的問題。
前置知識
瞭解 SSO,最好具備以下知識。當然,如果不是特別熟,也不影響閱讀。
cookie及session
瀏覽器同源策略及跨域
瞭解登入系統的構成
什麼是 SSO 與 CAS?
SSO
SSO 是英文 Single Sign On 的縮寫,翻譯過來就是單點登入。顧名思義,它把兩個及以上個產品中的使用者登入邏輯抽離出來,達到只輸入一次使用者名稱密碼,就能同時登入多個產品的效果。
使用 SSO 的優點很明顯:
提升使用者體驗。就以我廠為例。我廠有兩個產品,丁香人才網和丁香園論壇,假如你是我廠使用者,肯定無法忍受登入丁香園論壇的時候輸入一次使用者名稱密碼,登入人才網又要輸入一次使用者名稱密碼吧?
避免重複開發。假如你是我廠後端,每天任務都飽和的不行,肯定無法忍受到人才網開發一套登入邏輯,到論壇又開發一套登入邏輯吧?
提升安全係數
假如你是我廠運維,發現了一個安全隱患需要緊急修復。你肯定無法忍受給茫茫多的產品後端都發一封郵件,責令修復吧?萬一漏了一個呢?
如果你想學習前端,可以來這個Q群,首先是291,中間是851,最後是189,裡面可以學習和交流,也有資料可以下載。
CAS
SSO 僅僅是一種架構,一種設計,而 CAS 則是實現 SSO 的一種手段。兩者是抽象與具體的關係。當然,除了 CAS 之外,實現 SSO 還有其他手段,比如簡單的 cookie。CAS (Central Authentication Service)中心授權服務,本身是一個開源協議,分為 1.0 版本和 2.0 版本。1.0 稱為基礎模式,2.0稱為代理模式,適用於存在非 Web 應用之間的單點登入。
同域 SSO如圖,同域 SSO 是最簡單的一種情況。此時,兩個產品都是在一個域名下,單點登入是很自然的選擇。我們來捋一捋步驟,搞清楚這裡的步驟是理解後文的基礎,千萬不要跳過。
使用者訪問產品 a,向 後臺伺服器傳送登入請求。
登入認證成功,伺服器把使用者的登入資訊寫入 session。
伺服器為該使用者生成一個 cookie,並加入到 response header 中,隨著請求返回而寫入瀏覽器。
該 cookie 的域設定為 dxy.cn。
下一次,當使用者訪問同域名的產品 b 時,由於 a 和 b 在同一域名下,也是 dxy.cn,瀏覽器會自動帶上之前的 cookie。此時後臺伺服器就可以通過該 cookie 來驗證登入狀態了。
實際上,這種場景就是最簡單最傳統的登入操作。雖然我們把產品 a 和 b 人為分開了,但由於它們在同域上,就算看成是同一產品的不同類目也未嘗不可。我們沒有設定獨立的 SSO 伺服器,因為業務後臺伺服器本身就足以承擔 SSO 的職能。
同父域 SSO
同父域 SSO 是同域 SSO 的簡單升級,唯一的不同在於,伺服器在返回 cookie 的時候,要把cookie 的 domain 設定為其父域。比如兩個產品的地址分別為 a.dxy.cn 和 b.dxy.cn,那麼 cookie 的域設定為 dxy.cn 即可。在訪問 a 和 b 時,這個 cookie 都能傳送到伺服器,本質上和同域 SSO 沒有區別。
.跨域 SSO
可以看到,在上面兩種情況下,我們都沒有專門設定 SSO 伺服器。但是當兩個產品不同域時,cookie 無法共享,所以我們必須設定獨立的 SSO 伺服器了。這個時候,我們就是通過標準的 CAS 方案來實現 SSO 的。
詳解CAS
CAS 1.0 協議定義了一組術語,一組票據,一組介面。
術語:
Client:使用者。
Server:中心伺服器,也是 SSO 中負責單點登入的伺服器。
Service:需要使用單點登入的各個服務,相當於上文中的產品 a/b。
/login:登入介面,用於登入到中心伺服器。
/logout:登出介面,用於從中心伺服器登出。
/validate:用於驗證使用者是否登入中心伺服器。
/serviceValidate:用於讓各個 service 驗證使用者是否登入中心伺服器。
相關文章
- 前端需要了解的 SSO 與 CAS 知識前端
- 前端需要了解的http知識前端HTTP
- 前端需要了解的色彩知識前端
- 前端需要了解的計算機網路知識前端計算機網路
- 設計師也需要了解的一些前端知識前端
- 關於機器學習需要了解的知識機器學習
- 大前端開發者需要了解的基礎編譯原理和語言知識前端編譯原理
- 需要了解的Data Guard理論知識(一)
- 需要了解的Data Guard理論知識(二)
- 需要了解的Data Guard理論知識(三)
- Android開發需要了解的 IM 知識Android
- 直播中需要了解的AAC基礎知識
- 關於強化學習需要了解的知識強化學習
- Python爬蟲需要了解的代理IP知識Python爬蟲
- 前端開發需要了解的瀏覽器通識前端瀏覽器
- 爬蟲之前需要先了解哪些專業知識?爬蟲
- 開發微信小程式需要了解哪些知識?微信小程式
- 程式設計師需要了解的硬核知識之磁碟程式設計師
- 程式設計師需要了解的硬核知識之CPU程式設計師
- 後端工程師需要了解的跨域知識後端工程師跨域
- 新手學習Java需要了解的幾個知識點!Java
- 移動開發需要了解的UI設計知識移動開發UI
- web前端需要掌握什麼知識?Web前端
- 學習UI設計都需要了解哪些知識?UI
- 入門Java你需要了解的幾個知識要點!Java
- 前端開發到底需要掌握哪些知識前端
- 程式設計師需要了解的硬核知識之控制硬體程式設計師
- 程式設計師需要了解的硬核知識之記憶體程式設計師記憶體
- 關於響應式佈局,你需要了解的知識點
- 基於CAS 實現與容器(Tomcat 或者 JBoss)的SSOTomcat
- 前端也需要了解的 JSONP 安全前端JSON
- 網站開發製作需要了解哪些基礎知識網站
- 程式設計師需要了解的硬核知識之二進位制程式設計師
- 關於 bind 你可能需要了解的知識點以及使用場景
- [面試專題]前端需要知道的web安全知識面試前端Web
- 前端開發中需要搞懂的字元編碼知識前端字元
- 2021年你需要掌握的前端小知識前端
- 前端程式設計師需要了解的MySQL前端程式設計師MySql