前端需要了解的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 驗證使用者是否登入中心伺服器。
相關文章
- 前端需要了解的http知識前端HTTP
- 前端需要了解的色彩知識前端
- 前端需要了解的計算機網路知識前端計算機網路
- Android開發需要了解的 IM 知識Android
- 直播中需要了解的AAC基礎知識
- Python爬蟲需要了解的代理IP知識Python爬蟲
- 需要了解的Data Guard理論知識(一)
- 需要了解的Data Guard理論知識(二)
- 需要了解的Data Guard理論知識(三)
- 關於強化學習需要了解的知識強化學習
- 關於機器學習需要了解的知識機器學習
- 後端工程師需要了解的跨域知識後端工程師跨域
- 前端開發需要了解的瀏覽器通識前端瀏覽器
- 爬蟲之前需要先了解哪些專業知識?爬蟲
- 移動開發需要了解的UI設計知識移動開發UI
- 程式設計師需要了解的硬核知識之CPU程式設計師
- 程式設計師需要了解的硬核知識之磁碟程式設計師
- 新手學習Java需要了解的幾個知識點!Java
- web前端需要掌握什麼知識?Web前端
- 2021年你需要掌握的前端小知識前端
- 開發微信小程式需要了解哪些知識?微信小程式
- 學習UI設計都需要了解哪些知識?UI
- 入門Java你需要了解的幾個知識要點!Java
- 前端也需要了解的 JSONP 安全前端JSON
- 關於響應式佈局,你需要了解的知識點
- 程式設計師需要了解的硬核知識之控制硬體程式設計師
- 程式設計師需要了解的硬核知識之記憶體程式設計師記憶體
- 前端開發中需要搞懂的字元編碼知識前端字元
- 程式設計師需要了解的硬核知識之二進位制程式設計師
- 網站開發製作需要了解哪些基礎知識網站
- 程式設計師需要了解的硬核知識之壓縮演算法程式設計師演算法
- [面試專題]前端需要知道的web安全知識面試前端Web
- 前端程式設計師需要了解的MySQL前端程式設計師MySql
- 需要攻破的知識點
- 程式設計師需要了解的硬核知識之作業系統和應用程式設計師作業系統
- CAS單點登入(SSO)實戰(一)
- CAS SSO單點登入框架學習框架
- 關於深度學習,這些知識點你需要了解一下深度學習
- 新媒體運營都需要了解哪些知識?新媒體學習