單點登錄(sso)入門

單點登錄的英文名叫做Single Sign On,簡稱SSO。

在以前,一般我們就單系統,所有的功能都在同一個系統上。

后來,我們為了合理利用資源和降低耦合性,于是把單系統拆分成多個子系統。

比如阿里系的淘寶和天貓,很明顯地我們可以知道這時兩個系統,但是你在使用的時候,登陸了天貓,淘寶也會自動登陸。簡單來說,單點登陸就是在多個系統中,用戶只需要登陸一次,各個系統即能感知到該用戶已經登陸。

單系統登陸

眾所周知,HTTP是無狀態的協議,這意味著服務器無法確認用戶的信息。于是乎,W3C就提出了給每一個用戶都發出一個通行證,無論誰訪問的時候都需要攜帶通行證,這樣服務器就可以從通行證上確認用戶的信息。通行證就是Cookie。

如果說Cookie是檢查用戶身上的通行證來確認用戶的身份,那么Session就是通過檢查服務器上的客戶明細表(通行證列表)來確認用戶的身份的。Session相當于在服務器中建立了一份客戶明細表(通行證列表)。

因為HTTP協議是無狀態的,因此Session不能依據HTTP連接來判斷是否是同一個用戶。于是服務器向用戶瀏覽器發送了一個名為JessionId的Cookie,它的值是Session的id值,然后Session就可以根據Cookie來識別是否是同一個用戶。

一般的單系統實現登陸功能都是以下幾個步驟:

1.登陸后,將用戶信息保存在Session對象中。如果在Session對象中能查到,說明已經登陸;如果在Session對象中查不到,說明沒有登陸(或者已經退出登陸)。

2.注銷(退出登陸)時,從Sessoin中刪除用戶的信息。

3.記住我,請求配合Cookie的發送。只要Session還沒有失效,即使在關閉瀏覽器后,重新打開瀏覽器還能保持登陸狀態。這一步驟也就是身份校驗,通常使用攔截器來實現。

多系統登陸的問題與解決方法

Session共享問題

單系統登陸功能主要是用Session保存用戶信息來實現的,但是多個系統就可能有多個Tomcat,而Session是依賴當前系統的Tomcat,所以系統A的Seesion和系統B的Session就存在一個共享的問題。

解決系統之間Session共享問題有以下幾種方案:

1.Tomcat集群Session全局復制(集群內每個Tomcat的Session完全同步),但是這種方案會影響集群的性能,一般不建議。

2.使用反向代理服務器,將請求的IP根據Hash映射到對應的機器上,這樣的話同一個IP地址的請求會一直被轉發到同一臺服務器上。常見的解決方案就是使用Nginx作為反向代理服務器,并使用其ip_hash負載均衡策略。這種方案可能會因為服務器承受不住高并發而宕機導致丟失大部分的Session數據,因此也不建議這么做。

3.把Session放到Redis緩存中,各個服務器讀寫同一個Redis緩存實現Session的共享。Redis的性能好,吞吐量大,還提供持久化到磁盤的功能,一般推薦使用這個方案。

Cookie的跨域問題

當我們請求www.yanggb.com的時候,瀏覽器會自動把www.yanggb.com的Cookie帶過去,但是卻不會把www.renj.com的Cookie帶過去,這時因為域名不同導致的跨域問題。具體地說,這時瀏覽器的同源策略導致的問題,同源策略不允許JS訪問跨域的Cookie,當發送請求的時候需要調用JS去瀏覽器的Cookie庫中獲得Cookie,這時候因為Cookie中保存有域名的屬性作為識別標簽,JS是拿不到非本域的Cookie的。

針對Cookie的跨域問題,主要有幾種解決方案:

1.使用Token代替Session。服務端將Cookie寫到客戶端后,客戶端對Cookie進行解析,將Token解析出來存放到SessionStroage中,此后的請求就把這個Token帶上進行身份校驗。

2.多個域名共享一個Session,在寫入到客戶端的時候設置Cookie的domian。

CAS原理

說到單點登陸的話,肯定要接觸到CAS。CAS的全稱是Central Authentication Service,即中心驗證服務,說白了就是一個獨立的認證中心。

假定現在有3個服務,一個是www.yanggb.com,一個是www.renj.com,還有一個是www.sso.com,其中的www.sso.com就是認證中心。

1.當用戶想要訪問www.yanggb.com受限(需要登陸)的資源的時候,www.yanggb.com發現用戶沒有登陸,就會重定向到www.sso.com認證中心,并將自己的地址作為參數,比如:www.sso.com?service=www.yanggb.com。

2.這時www.sso.com認證服務如果發現用戶沒有登陸,就會將用戶引導至登陸頁面。用戶使用用戶名和密碼進行登陸之后,用戶與認證中心就會建立一個全局的會話(生成Token寫入到Cookie中并保存在瀏覽器上)。然后認證中心就可以重定向會到www.yanggb.com服務,并把Token攜帶過去:www.yanggb.com?token=********。

3.接著www.yanggb.com就會去www.sso.com認證中心校驗這個Token是否正確,如果正確,則www.yanggb.com服務就會和用戶建立局部的會話(創建Session)。

4.接下來,用戶想要訪問www.renj.com受限(需要登陸)的資源,www.renj.com服務發現用戶并沒有登陸,就會重定向到www.sso.com認證中心,同樣將自己的地址作為參數:www.sso.com?service=www.renj.com。因為之前的用戶與www.sso.com認證中心已經建立了全局會話,所以這次www.renj.com重定向到www.sso.com認證中心是可以帶上Cookie的。認證中心根據帶過來的Cookie發現已經與用戶建立了全局會話了,就會重定向到www.renj.com,并把Token攜帶過去給www.renj.com,重定向的地址:www.renj.com?token=********。

5.最后,www.renj.com就會去www.sso.com認證中心校驗這個Token是否正確,如果正確,則www.renj.com就和用戶建立局部會話(創建Session)。

實際上,SSO認證中心就類似于一個中轉站,這就是CAS的核心思想。

?

"世界上最殘忍的不是逃離,而是近在咫尺卻不屬于自己。"

轉載于:https://www.cnblogs.com/yanggb/p/11136528.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277085.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cocopods的升級錯誤解決

2019獨角獸企業重金招聘Python工程師標準>>> 寫在前面: 這篇筆記的由來,是因為在這個周五下班后想起了之前 GitHub 上一個關于 iOS Charts 的 demo 仍處于未完待續的狀態。便想著完成了它,遂打開了該工程,開始用 pod 更…

XML 命名空間以及它們如何影響 XPath 和 XSLT (Extreme XML)

Dare Obasanjo Microsoft Corporation 2002 年 5 月 20 日 本文是有望長期發表的系列文章的第一篇,這些文章專門闡釋由 Microsoft 支持的 W3C XML 技術的更微妙的內容。盡管 XML 的核心仍相當簡單,但是圍繞它的技術已經變得日益復雜,而且其中…

帆軟報表(finereport)點擊事件對話框打開

點擊事件對話框打開iframe var iframe $("<iframe id001 name001 width100% height100% scrollingyes frameborder0>") // iframe參數的命名及寬高等iframe.attr("src", "http://192.168.100.17:8075/WebReport/ReportServer?reportlet1.cpt&…

部署虛擬環境

創建虛擬環境 導入Virtualenv虛擬環境模塊 pip install virtualenv python -m pip install virtualenv 創建虛擬環境 cd 項目文件夾 virtualenv 虛擬環境名 激活虛擬環境 cd 虛擬環境文件夾 運行 Scripts 目錄下的 activate 腳本 Scripts\activate 退出當前虛擬環境 Scripts\d…

走馬觀花:Visual Studio Code Name Orcas Mar07CTP /體驗DLINQ

不知道什么叫“Orcas”&#xff1f;簡單說應該就是下一版本的Visual Studio 吧。現在atlas&#xff0c;LINQ&#xff0c;WF之類東西&#xff0c;對于VS2005是單獨安裝的&#xff0c;Orcas應該是全內置吧。還有很多功能的增強&#xff0c;可以參考英文說明。閑話不說&#xff0c…

各種學習資源

C&#xff1a;http://huangdingjun.blog.163.com/ 網易博客 有好多關于C的博文 http://hi.baidu.com/dudiaodaoke/home獨釣刀客 vim&#xff1a;http://easwy.com/blog/ vim linux 牛人 http://www.swaroopch.com/notes/Vim_zh-cn:%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E7%BC…

智課雅思詞匯---二十六、形容詞后綴-ble

智課雅思詞匯---二十六、形容詞后綴-ble 一、總結 一句話總結&#xff1a; assemble 英 [?semb(?)l] 美 [?s?mbl] vt. 集合&#xff0c;聚集&#xff1b;裝配&#xff1b;收集vi. 集合&#xff0c;聚集[ 過去式 assembled 過去分詞 assembled 現在分詞 assembling ] 詞根詞…

[導入]C#實現Des加密和解密

文章來源:http://blog.csdn.net/21aspnet/archive/2007/03/24/1540018.aspx 轉載于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/03/25/816385.html

帆軟報表(finereport)圖表鉆取詳細類別 當前頁對話框展示

添加參數欄&#xff0c;季度下拉框的控件命名為 jd 這里添加雷達圖做案例 編輯→特效→ 添加JavaScript 參數&#xff1a;wd 值&#xff1a;分類名 #取雷達圖所點擊的點 參數&#xff1a;jd 值&#xff1a;公式$jd #取參數下拉所選參數 JavaScript詳細: var if…

聊聊storm的PartialKeyGrouping

序 本文主要研究一下storm的PartialKeyGrouping 實例 Testpublic void testPartialKeyGrouping() throws InvalidTopologyException, AuthorizationException, AlreadyAliveException {String spoutId "wordGenerator";String counterId "counter";Strin…

ArcGIS Server安裝的幾個問題

今天安裝 了ArcGIS Server &#xff0c;本來一直不愿意裝這么“重”的東西&#xff0c;不過新事物還是要看看。安裝沒有出很大的問題&#xff0c;基本上一次成功&#xff0c;比很久前&#xff08;大概要到03年了吧&#xff09;第一次裝ArcIMS要好多了&#xff0c;那次可是重裝…

大數據之MySql筆記-0916

2019獨角獸企業重金招聘Python工程師標準>>> 復習: 1.MySQL部署 拓展題: rm -rf $MYSQL_HOME/arch/* binlog日志 恢復 主從同步 rm -rf $MYSQL_HOME/data/* 數據 $MYSQL_HOME/scripts/mysql_install_db \ --usermysqladmin \ --basedir/usr/local/mysql \ --dat…

delphi調用c#寫的webservice中文出現亂碼的問題

解決方法&#xff1a;HTTPRIO1的屬性---HttpWebNode--UseUtf8InHeader設置為true 代碼片斷&#xff1a; function TLoginManager.Get_LoginManagerSoap: ILoginManagerSoap; const defSvcLoginManager; defPrtLoginManagerSoap; var RIO: THTTPRIO; begin Result: nil…

浮浮沉沉的上海

來到上海已經快有一年&#xff0c;抱著學習的心態來的&#xff0c;卻發現忘掉了更多&#xff0c;最近一直在回顧&#xff0c;總想把冷卻的技能重新拾回來&#xff0c;卻也發現不簡單。剛剛從餐北斗辭職&#xff0c;也正如朋友所說&#xff0c;趁早走&#xff0c;再遲一點&#…

GridView的操作大全

一、GridView和DataGrid的異同 GridView 是 DataGrid的后繼控件&#xff0c;在.net framework 2 中&#xff0c;雖然還存在DataGrid&#xff0c;但是GridView已經走上了歷史的前臺&#xff0c;取代DataGrid的趨勢已是勢不可擋。GridView和DataGrid功能相似&#xff0c;都是在we…

Sql Server設置用戶只能查看并訪問特定數據庫

1.新建登錄用戶 以管理員身份登陸數據庫&#xff08;權限最高的身份如sa&#xff09;&#xff0c;點擊安全性->登錄名&#xff0c;右鍵新建登錄名&#xff0c;輸入登錄名和密碼&#xff0c;取消強制實施密碼策略。 2.將服務器角色設置為public 注意&#xff1a;很重要的一…

arcgis jsapi接口入門系列(6):樣式

2019獨角獸企業重金招聘Python工程師標準>>> symbol: function () {//線樣式//樣式詳情請看官方文檔let style {//線顏色&#xff0c;支持多種格式&#xff1a;//CSS color string&#xff1a;例如"dodgerblue";//HEX&#xff1a;例如"#33cc33"…

ORM(四)應用.腳本管理工具

ORM(四)應用.腳本管理工具數據腳本的維護,不知道各位有什么好的工具推薦沒有,由于以前一直是用手工來進行腳本的維護操作,很麻煩,而且容易出錯.大多數時候,都在原來的基礎上進行直接修改.今天有點時間就完成了一個簡陋的工具,也是對ORM組件的應用.下面是程序的運行界面http://f…

OpenCV2:應用篇 三維重建

一.簡介 VTK(Visualization Toolkit):開源三維圖形庫 ITK(Insight Segmentation and Registration Toolkit):開源醫學圖像處理庫,包含醫學算法和支持醫學圖片格式DICOM QT:用戶圖形界面 轉載于:https://www.cnblogs.com/k5bg/p/11232131.html

手把手教你搭建Mac環境微信小程序的本地測試服務器

問題的提出 Mac環境方便快捷地搭建小程序的測試服務器 小程序對于網絡請求的URL的特殊要求 不能出現端口號不能用localhost必須用https主要步驟 用json-server搭建簡單的服務器&#xff0c;搭建出來的服務器地址為localhonst:3000安裝nginx進行反向代理&#xff0c;以便隱藏端口…