成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

連環畫解析“單點登錄”原理,保證你能看懂!

開發 開發工具
單點登錄( Single Sign On ,簡稱 SSO),是目前比較流行的企業業務整合的解決方案之一,用于多個應用系統間,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。

單點登錄( Single Sign On ,簡稱 SSO),是目前比較流行的企業業務整合的解決方案之一,用于多個應用系統間,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。

[[316475]]

圖片來自 Pexels

前置介紹:

  • 同源策略,限制了從同一個源加載的文檔或腳本如何與來自另一個源的資源進行交互,要求協議,端口和主機都相同。
  • HTTP 用于分布式、協作式和超媒體信息系統的應用層協議。HTTP 是無狀態協議,所以服務器單從網絡連接上無從知道客戶身份。
  • 那要如何才能識別客戶端呢?給每個客戶端頒發一個通行證,每次訪問時都要求帶上通行證,這樣服務器就可以根據通行證識別客戶了。最常見的方案就是 Cookie。
  • Cookie 是客戶端保存用戶信息的一種機制,保存在客戶機硬盤上。可以由服務器響應報文 Set-Cookie 的首部字段信息或者客戶端 document.cookie來設置,并隨著每次請求發送到服務器。子域名可以獲取父級域名 Cookie。
  • Session 其實是一個抽象概念,用于跟蹤會話,識別多次 HTTP 請求來自同一個客戶端。
  • Cookie 只是通用性較好的一種實現方案,通常是設置一個名為 SessionID(名稱可自定義,便于描述,本文均使用此名稱)的 Cookie,每次請求時攜帶該 Cookie,后臺服務即可依賴此 SessionID 值識別客戶端。

單系統登錄

在介紹單點登錄之前,我們先來了解一下在瀏覽器中,訪問一個需要登錄的應用時主要發生的一系列流程,如下圖所示:

以下為連環畫形式,期望能讓讀者更好的理解:

[[316476]]

[[316477]]

[[316478]]

[[316479]]

[[316480]]

[[316481]]

依賴于登錄后設置的 Cookie,之后每次訪問時都會攜帶該 Cookie,從而讓后臺服務能識別當前登錄用戶。

題外話:后臺是如何通過 SessionID 知道是哪個用戶呢?

  • 數據庫存儲關聯:將 SessionID 與數據信息關聯,存儲在 Redis、MySQL 等數據庫中。
  • 數據加密直接存儲:比如 JWT 方式,用戶數據直接從 SessionID 值解密出來(此方式時 Cookie 名稱以 Token 居多)。

多系統登錄問題

同域名

當訪問同域名下的頁面時,Cookie 和單系統登錄時一樣,會正常攜帶,后臺服務即可直接獲取到對應的 SessionID 值,后臺為單服務還是多服務無差別。

不同子域名

子域名間 Cookie 是不共享的,但各子域名均可獲取到父級域名的 Cookie,即 app.demo.com與 news.demo.com均可以獲取 demo.com域名下的 Cookie。

所以可以通過將 Cookie 設置在父級域名上,可以達到子域名共享的效果,即當用戶在 app.demo.com 域名下登錄時,在demo.com域名下設置名為 SessionID 的 Cookie。

當用戶之后訪問news.demo.com時,后臺服務也可以獲取到該 SessionID,從而識別用戶。

完全不同域名

默認情況下,不同域名是無法直接共享 Cookie 的。

前端跨域帶 Cookie

如果只是期望異步請求時獲取當前用戶的登錄態,可以通過發送跨域請求到已經登錄過的域名,并配置屬性:

  1. xhrFields: { 
  2.   withCredentials: true 

這樣可在請求時攜帶目標域名的 Cookie,目標域名的服務即可識別當前用戶。

但是,這要求目標域名的接口支持 CORS 訪問(出于安全考慮,CORS 開啟 withCredentials 時,瀏覽器不支持使用通配符*,需明確設置可跨域訪問的域名名單)。

題外話:如果只是為了規避瀏覽器的限制,實現與通配*同樣的效果,到達所有域名都可以訪問的目的,可根據訪問的 Referrer 解析請求來源域名,作為可訪問名單。但是出于安全考慮,不推薦使用,請設置明確的可訪問域名。

CAS

CAS(Central Authentication Service),即中央認證服務,是 Yale 大學發起的一個開源項目,旨在為 Web 應用系統提供一種可靠的單點登錄方法。

既然不能跨域獲取,那 CAS 如何做到共享呢?它通過跳轉中間域名的方式來實現登錄。

頁面訪問流程如下圖:

以下為連環畫形式,期望能讓讀者更好的理解:

[[316483]]

[[316484]]

[[316485]]

[[316486]]

[[316487]]

[[316488]]

[[316489]]

[[316490]]

[[316491]]

[[316492]]

[[316493]]

[[316494]]

[[316495]]

[[316496]]

[[316497]]

[[316498]]

[[316499]]

[[316500]]

其中需要關注以下 2 點:

  • 所有的登錄過程都依賴于 CAS 服務,包含用戶登錄頁面、ST 生成、驗證。
  • 為了保證 ST 的安全性,一般 ST 都是隨機生成的,沒有規律性。
  • CAS 規定 ST 只能保留一定的時間,之后 CAS 服務會讓它失效,而且,CAS 協議規定 ST 只能使用一次,無論 ST 驗證是否成功,CAS 服務都會清除服務端緩存中的該 ST,從而規避同一個 ST 被使用兩次或被竊取的風險。

 

責任編輯:武曉燕 來源: 政采云前端團隊
相關推薦

2019-09-05 14:21:22

JavaNIOBIO

2020-02-15 17:16:05

Kubernetes容器

2019-05-16 09:38:04

Redis高可用數據

2018-11-16 16:13:33

5G通信技術網絡

2019-03-26 11:15:34

AI機器學習人工智能

2024-11-01 05:10:00

2013-09-22 10:34:08

碼農機器學習算法

2018-11-19 08:34:22

Hadoop架構HDFS

2017-02-22 15:04:52

2019-09-05 11:14:12

監控系統拓撲圖

2018-12-24 08:46:52

Kubernetes對象模型

2019-12-27 09:47:05

大數據TomcatWeb

2022-07-04 08:31:42

GitOpsGit基礎設施

2023-01-26 00:22:01

分布式架構大文件

2025-02-17 10:09:54

2025-02-17 13:00:00

ChatGPT大模型AI

2019-11-18 10:38:03

線程池Java框架

2019-10-08 10:10:52

中臺 IT后臺

2020-01-21 10:16:15

Kubernetes教程容器

2020-12-01 09:03:22

分庫分表MySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲午夜视频 | 2018国产大陆天天弄 | 高清av电影 | 蜜臀久久99精品久久久久久宅男 | 日日干干 | 国产免费观看久久黄av片涩av | 九九热国产视频 | 在线看亚洲| 国产91黄色 | 国产精品久久久久免费 | 久久久网 | 性做久久久久久免费观看欧美 | 久久婷婷香蕉热狠狠综合 | 懂色av一区二区三区在线播放 | 久国产| av中文在线 | 久久综合伊人 | 国产免费一区二区三区 | 午夜在线视频一区二区三区 | 日韩精品久久久久久 | 欧美一区二区精品 | 欧美日韩成人在线观看 | 日本精品久久 | 99re在线免费视频 | 久久久久久国产精品 | а√中文在线8 | 亚洲综合视频 | 天天搞天天搞 | 国产在线一区二区 | 日韩一区二区三区视频在线观看 | 成人午夜精品 | 久久久网| 国产成人综合亚洲欧美94在线 | 在线视频一区二区三区 | 男女视频在线观看免费 | 日韩综合在线 | 国产精品国产成人国产三级 | 亚洲图片一区二区三区 | 99精品电影 | 国产高清久久 | a级免费黄色片 |