單點登錄

總結:

單點登錄 主要是使用 http的重定向技術 每次登錄時 會將此次的請求 轉發到 登錄中心,登錄中心 根據攜帶的cookie或者其他參數 獲取用戶信息 如果沒有 就驗證用戶信息, 然後生成token或者cookie 同時 返回轉發的狀態碼 讓其攜帶對應的參數轉發到之前登錄的 服務器 對應的服務器 根據其攜帶的token 去登錄服務進行用戶信息驗證 並獲取用戶信息 將用戶信息存儲到 當前線程 並將這個token寫入到 該服務的cookie中 不用每次請求登錄服務器 就這麼個原理 畫圖展示下

如圖 某個用戶通過瀏覽器 登錄www.zy.com 經理的步驟如下:

1. 用戶在登錄頁面 將用戶名 密碼提交給www.zy.com 進行登錄 比如最後的請求類似 www.zy.com?userName=zy&password=749645654

 

2. 應用端返回狀態碼 304 並返回對應的鏈接

www.zylogin.com?userName=zy&password=749645654&url= www.zy.com

 

3. 瀏覽器 根據根據2的響應 去訪問登錄中心 並攜帶對應的用戶名密碼(這裏應該會經過處理 不會是原文 明文)

 

4. 登錄中心驗證用戶的合法性 驗證合法後(不合法也應該有一套規則 這裏先不管) 生成對應的 token或者 cookie回傳給瀏覽器(這個是爲了給其他應用重定向用的) 同時返回狀態碼 304 以及對應跳轉 url 比如這個 www.zy.com?token=Aadaderfsdg44RTEEW

 

5. 瀏覽器再次去請求應用服務 根據返回的 www.zy.com?token=Aadaderfsdg44RTEEW

 

6. 瀏覽器根據攜帶的token去請求登錄中心 請求用戶信息(這裏可能過期什麼的)

 

7. 登錄中心驗證token合法後 返回給應用用戶信息

 

8. 瀏覽器將自己cookie 或者token返回給瀏覽器(可以直接返回之前那個token 或者做個處理 和這個token 對應起來 然後把用戶信息 緩存一些 不要每次走 登錄中心) ,進入主頁。

 

以上就是基本的登錄流程了 這裏還有很多細節需要商榷

比如 用戶信息錯誤,過期時間,應用緩存的用戶信息是否一直可用等等,具體到應用上還會有別的問題 這個就要具體分析了 不過流程是上面那樣的 其中上面的第4步 是實現單點登錄的核心

 

下面再看一張圖:

這圖的前提假設是 www.zy2.com 和上面的 www.zy.com 屬於同一個單點登錄系統 同時公用一個登錄中心 另外還有一個前提是

在同一個瀏覽器 用戶已經登錄了 www.zy.com 接下來 通過在地址欄輸入網址 要進入 www.zy2.com(以前我一直搞不懂 這裏怎麼就獲取到 用戶信息了)以下是每一步的解析

1. 用戶在瀏覽器輸入地址 www.zy2.com 然後點擊enter

 

2. 同樣地 web服務返回304 同時返回跳轉地址www.zylogin.com?url= www.zy.com

不過這一次沒有用戶信息

 

3. 瀏覽器去訪問登錄中心 這個時候就要注意了 在上一步中 我們訪問過登錄中心 同時返回了 www.zylogin.com的cookie(或者token) (瀏覽器對cookie管理有自己的一套機制 在服務端主要涉計domain 和path屬性的設置,這個先不細說) ,這個時候在跳轉的時候 會攜帶上這個cookie (這裏可以說是 單點登錄最核心的東西了 利用了瀏覽器自己的機制)

 

// 下面步驟 就幾乎個面的一致了

4. 登錄中心驗證cookie 如果是合法 或者信息沒有過期什麼的 然後返回給瀏覽器

304 以及對應的 跳轉url 比如 www.zy2.comuserName=zy&password=749645654

 

5. 瀏覽器再次攜帶cookie 去訪問 web應用

 

6. web應用根據cookie去登錄中心 訪問 獲取用戶信息

 

7. 登錄中心 返回給web應用用戶的信息

 

8. 響應瀏覽器 應用主頁

 

 

大致流程應該是這樣了 說到底 其實就用了一個304和 cookie 畢竟客戶端只有瀏覽器 需要利用他的一些機制上的特性 這個我上面的這個版本 應該是目前使用的 之前也有其他的版本 但是有這樣或者那樣的安全隱患 這個應該是比較安全的

 

同時這裏也有很多 需要定製化的細節 說幾個我想到的

1. 登錄中心的 白名單限制 不是什麼服務都可以網這裏跳的 不然炸了

2. 登錄的時候 跳轉時攜帶的 用戶名密碼 以及 最後返回的 token 加密處理的問題

是使用單一的加密 還是 不同的web應用不同的規則

3. web應用的cookie使用 在一次登錄完成之後 web應用應該將cookie回傳給瀏覽器

這個cookie是使用原生的登錄中心的token 還是自己加密處理 同時本地緩存的用戶信息 如何與登錄中心 保持一致 什麼時候刷新

4. 登出處理 用戶登錄了兩個系統 退出其中一個 另一個怎麼辦 在登錄中心需要對飲的處理,以及登出後 再次登錄 是否需要賬號密碼。。

 

5. 對與登錄中心 針對每一個應用 cookie或者token 過期刷新處理問題

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章