單點登入方案實戰

2021-09-11 03:29:24 字數 2550 閱讀 4102

頂級網域名稱不一樣的**怎麼辦?

這時候就需要cas登場了

1、oauth2,不同的企業之間的登陸,例如:qq登入csdn,應用之間的信任度較低

2、單點登陸,是同一企業的產品系列(不同伺服器上)間的登陸,相互信任度較高

先上個原理圖:

1、session-cookie機制出現的根源, http連線是無狀態的連線

-------- 同一瀏覽器向服務端傳送多次請求,伺服器無法識別,哪些請求是同乙個瀏覽器發出的

2、為了標識哪些請求是屬於同乙個人 ---------- 需要在請求裡加乙個標識引數

方法1-----------直接在url裡加乙個標識引數(對前端開發有侵入性),如: token

方法2-----------http請求時,自動攜帶瀏覽器的cookie(對前端開發無知覺),如:jsessionid=dfdfdfdfdf

3、瀏覽器標識在網路上的傳輸,是明文的,不安全的

-----------安全措施:改https來保障

4、cookie的使用限制—依賴網域名稱

先介紹下各級網域名稱:

一級網域名稱:又叫頂級網域名稱,一串字串中間乙個點隔開,例如baidu.com

二級網域名稱:實際上就是乙個一級網域名稱以下的主機名,一串字串中間兩個「.」隔開,例如pan.baidu.com("pan"就是主機名)。

**網域名稱:二級網域名稱的子網域名稱,特徵是包含三個「.」。

-------------- 頂級網域名稱下cookie,會被二級以下的網域名稱請求,自動攜帶

-------------- 二級網域名稱的cookie,不能攜帶被其它網域名稱下的請求攜帶

5、在伺服器後台,通過解讀標識資訊(token或jsessionid),來對應會話是哪個session

--------------- 乙個tomcat,被1000個使用者登陸,tomcat裡一定有1000個session -------》儲存格式map《sessionid,session物件》

--------------- 通過前端傳遞的jsessionid,來對應取的session ------ 動作發生時機request.getsession

多個應用共用同乙個頂級網域名稱,sessionid被種在頂級網域名稱的cookie裡

使用者登陸,登出了tomcat1,不要重複去操作tomcat2

1、後台session通過redis實現共享,即每個tomcat都在請求開始時,到redis查詢session;在請求返回時,將自身session物件存入redis

2、後台判斷請求是否已登陸,主要校驗session物件中,是否存在登陸使用者資訊

3、可以自己實現,也可以用成熟的框架sping-session

tomcat1,與tomcat2,tomcat3三颱伺服器,必須是同網域名稱或者同頂級網域名稱,才能拿到對應的cookie值

例如圖中情況所示:

1、a請求a.com登陸成功,cookiea存在a.com網域名稱下

2、b請求b.com服務時,無法攜帶存在a.com網域名稱下cookiea

3、b服務發現無cookie,必然強制要求,去登陸,問題無解

(1)b.com開啟時,發現自己未登陸 ------ > 於是跳轉到cas.com去登陸

(2)cas.com登陸頁面被開啟,使用者輸入帳戶/密碼登陸成功

(3)cas.com登陸成功,種cookie到cas.com網域名稱下------ > 把sessionid放入後台redis—頁面攜帶ticket跳回b.com

(4)b.com重新被開啟,發現仍然是未登陸,但是有了乙個ticket值

(5)b.com用ticket值,到redis里查到sessionid,並做session同步------ > 種cookie給自己,頁面原地重跳

(6)b.com開啟自己頁面,此時有了cookie,後台校驗登陸狀態,成功

整個過程互動,列圖如下:

(7)cas.com的登陸頁面被開啟時,如果此時cas.com本來就是登陸狀態的,則自動返回生成ticket給業務系統

整個單點登陸的關鍵部位,是利用cas.com的cookie保持cas.com是登陸狀態,此後任何第三個系統跳入,都將自動完成登陸過程

為提高安全性,ticket應該使用過即作廢(本例中使用有效期機制)

登入方案 使用者單點登入

在微服務專案中,由於使用者往往需要通過閘道器訪問多個微服務,如登入需要訪問使用者微服務,商品瀏覽需要訪問商品微服務,下單需要訪問訂單微服務,支付需要訪問支付微服務。但如何防止使用者操作其他使用者的資料,這就需要在各個微服務中增加授權認證。每個服務都要認證使用者的身份,身份認證成功後,需要識別使用者的...

單點登入方案筆記

oauth2 不同的企業之間的登入方式 例如 登入csdn用qq登入 單點登入 企業內部的登入方式 一 同頂級網域名稱下單點登入使用session共享的方式 2 攜帶cookie http請求時,攜帶上瀏覽器的cookie cokie裡標識值 jsessionid x 不安全 3 https措施 h...

單點登入 方案2

1 為什麼要做sso?2 如何實現sso?sso有以下幾種方式實現 3 sso實現機制 以下是我們當前sso的時序圖 sso系統生成ticket並跳轉 子系統換票 4 如何實現統一退出 當子系統換票拿ticket去sso獲取使用者資訊的時候,會獲取到2個引數 ptoken ptlogout。那麼這2...