首先是為啥要用單點登入的問題,單點登入也就是sso
sso是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。
1)、任何系統都必須去登陸伺服器進行登入
2)、伺服器就記住了登入狀態
3)、其他系統訪問受保護資源,需要再次登入,跳轉到sso_server登入的時候,伺服器告訴客戶端,已經登入過,無須登入。登入過得資訊
我這裡用的框架是xxl-sso
單點登入的核心:
瀏覽器向伺服器傳送請求的過程:
首先瀏覽器向伺服器傳送請求,伺服器判斷是否登入,如果沒有登入,則會把該請求重定向到sso-server去進行登入,認證中心判斷是否登入過,如果沒有登入,則會返回乙個登入頁,假如在登入頁輸入賬號密碼登入後,會提交賬號密碼到sso-server認證中心,然後sso-server回去資料庫查詢該使用者的狀態,但是由於分布式系統下session用不了,所以這裡選擇了儲存在redis中。登入成功後會給瀏覽器響應頭。響應頭里有location(代表瀏覽器跳轉到指定位置),還有set-cookie(讓瀏覽器儲存乙個cookie),也就是命令瀏覽器做上面的兩件事,即跳轉到指定位置,並且儲存乙個cookie。cookie儲存在sso-server網域名稱下。跳轉的指定位置就是最初想要訪問的那個url。並且當前網頁也儲存著這個cookie,也就是上面說的給自己也存乙份。這個cookie沒有儲存在sso-server網域名稱下,而是直接儲存在當前網域名稱下。這樣的話以後瀏覽器訪問當前url都會帶上這個cookie,然後直接在client1去redis中通過這個cookie去查詢使用者資訊。
第一次登入的關鍵:
1)認證中心拿到賬戶密碼,查到使用者,把使用者儲存到redis中,通過key儲存
2)認證中心把這個key也儲存在自己的網域名稱對應的cookie中
3)把這個key傳送給原來本來要去的那個網頁,儲存在它的網域名稱下,也就是自己也儲存乙份
最終結果是client網域名稱和sso-server網域名稱下都會有乙個同名同值的網域名稱。
總的來說就是下面這張圖:
那麼單點登入就是想做到一次登入,其他地方就不用再重複登入了,它是怎麼做到的呢?也就是第二次登入是怎麼做到不用再去登入中心登入的?
這就是單點登入的核心:
具體是**實現:
我這裡新建立了乙個模組,client1.
首先是配置檔案:
也就是第一次登入,假如發現沒有攜帶cookie的話,就會自動重定向到註冊中心,也就是ssoserver.com:8082
這是**:
判斷的邏輯是這樣的,首先會判斷ssouserparm是否為空, 如果不先判斷這個的話,後面可能會陷入無限重定向,也就是說就是你第一次登入重定向到了登入中心,登入中心確認了你的登入,並且把生成的cookie放在了登入中心的網域名稱的瀏覽器下,並且給目標頁的url放了這個cookie,但是你沒有取出來用的話,那麼登入中心重定向回來,當前頁發現你依然沒帶cookie,又會讓你重定向到登入中心。所以,為了避免這個問題,首先要判斷ssouserparm的是否有了,而這個在你通過登入中心的驗證後就會傳遞給你:
token就是ssouser
這裡又把sso_user的資料放進了ssouserparm中。
假如沒有登入的話,就正式進入到登入中心的重定向:
當這些步驟做完後,目標url也儲存了乙個cookie,所以以後就不用去登入中心了
那麼如果把瀏覽器的cookie禁用了怎麼辦?
所以這個專案並沒有用到單點登入,而是直接通過token驗證的,當登入成功時會建立乙個token,並把token儲存在redis中,然後將token返回給使用者,以後使用者要訪問頁面,只要帶上這個token就行了(就jwt實現 token)
登入方案 使用者單點登入
在微服務專案中,由於使用者往往需要通過閘道器訪問多個微服務,如登入需要訪問使用者微服務,商品瀏覽需要訪問商品微服務,下單需要訪問訂單微服務,支付需要訪問支付微服務。但如何防止使用者操作其他使用者的資料,這就需要在各個微服務中增加授權認證。每個服務都要認證使用者的身份,身份認證成功後,需要識別使用者的...
單點登入 域使用者 常規登入 AD域
我是把csdn部落格當筆記使的,以前總結過不知道放在 了,好鬱悶。1 單點登入 1 啥是單點登入?使用者只需要登入一次就可以訪問所有相互信任的應用系統。single sign on,簡稱為 sso 2 解決啥問題?各個server拿到同乙個id,都能有辦法檢驗出id的有效性 並且能得到id對應的使用...
單點登入 VS 多點登入
2018 12 01 14 58 22 單點登入 single sign on 簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。概述 很早期的公司,一家公司可能只有乙個server,慢慢的server開...