單點登錄是如何實現?
SSO單點登錄的實現原理是怎樣的
關鍵字: 單點登錄 SSO Session
單點登錄在現在的系統架構中廣泛存在,他將多個子系統的認證體系打通,實現了一個入口多處使用,而在架構單點登錄時,也會遇到一些小問題,在不同的應用環境中可以採用不同的單點登錄實現方案來滿足需求。我將以我所遇到的應用環境以及在其中所經歷的各個階段與大家分享,若有不足,希望各位不吝賜教。
一、共享Session
共享Session可謂是實現單點登錄最直接、最簡單的方式。將用戶認證信息保存於Session中,即以Session內存儲的值為用戶憑證,這在單個站點內使用是很正常也很容易實現的,而在用戶驗證、用戶信息管理與業務應用分離的場景下即會遇到單點登錄的問題,在應用體系簡單,子系統很少的情況下,可以考慮採用Session共享的方法來處理這個問題。
這個架構我使用了基於Redis的Session共享方案。將Session存儲於Redis上,然後將整個系統的全局Cookie Domain設置於頂級域名上,這樣SessionID就能在各個子系統間共享。
這個方案存在著嚴重的擴展性問題,首先,ASP.NET的Session存儲必須為SessionStateItemCollection對象,而存儲的結構是經過序列化後經過加密存儲的。並且當用戶訪問應用時,他首先做的就是將存儲容器裡的所有內容全部取出,並且反序列化為SessionStateItemCollection對象。這就決定了他具有以下約束:
1、 Session中所涉及的類型必須是子系統中共同擁有的(即程序集、類型都需要一致),這導致Session的使用受到諸多限制;
2、 跨頂級域名的情況完全無法處理;
二、基於OpenId的單點登錄
這種單點登錄將用戶的身份標識信息簡化為OpenId存放於客戶端,當用戶登錄某個子系統時,將OpenId傳送到服務端,服務端根據OpenId構造用戶驗證信息,多用於C/S與B/S相結合的系統,流程如下
由上圖可以看到,這套單點登錄依賴於OpenId的傳遞,其驗證的基礎在於OpenId的存儲以及發送。
1、當用戶第一次登錄時,將用戶名密碼發送給驗證服務;
2、驗證服務將用戶標識OpenId返回到客戶端;
3、客戶端進行存儲;
4、訪問子系統時,將OpenId發送到子系統;
5、子系統將OpenId轉發到驗證服務;
6、驗證服務將用戶認證信息返回給子系統;
7、子系統構建用戶驗證信息後將授權後的內容返回給客戶端。
這套單點登錄驗證機制的主要問題在於他基於C/S架構下將用戶的OpenId存儲於客戶端,在子系統之間發送OpenId,而B/S模式下要做到這一點就顯得較為困難。為了處理這個問題我們將引出下一種方式,這種方式將解決B/S模式下的OpenId的存儲、傳遞問題。
三、基於Cookie的OpenId存儲方案
我們知道,Cookie的作用在於充當一個信息載體在Server端和Browser端進行信息傳遞,而Cookie一般是以域名為分割的,例如a.xxx.com與b.xxx.com的Cookie是不能互相訪問的,但是子域名是可以訪問上級域名的Cookie的。即a.xxx.com和b.xxx.com是可以訪問xxx.com下的Cookie的,於是就能將頂級域名的Cookie作為OpenId的載體。
驗證步驟和上第二個方法非常相似:
1、 在提供驗證服務的站點裡登錄;
2、 將OpenId寫入頂級域名Cookie裡;
3、 訪......
1. 什麼是單點登錄?有哪些實現方式?
在不同的場景下,單點登錄採用不同的實現方式。應用系統是同一域名下的不同站點時,通常採用驗證cookie的方式;應用系統在同一域名下但是數據不同子域時,採用cookie與sessionID相結合的方式;應用系統分屬不同域時,採用站點間傳遞cookie和重定向的方式。北京CA針對不同場景,單點登錄方式也不同。
門戶中如何實現單點登錄和統一身份認證?
用戶身份信息保存在 一臺服務器數據庫上即可
用java來實現單點登錄大概有哪些種方法
1 什麼是單點登陸
單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
較大的企業內部,一般都有很多的業務支持系統為其提供相應的管理和IT服 務。例如財務系統為財務人員提供財務的管理、計算和報表服務;人事系統為人事部門提供全公司人員的維護服務;各種業務系統為公司內部不同的業務提供不同的 服務等等。這些系統的目的都是讓計算機來進行復雜繁瑣的計算工作,來替代人力的手工勞動,提高工作效率和質量。這些不同的系統往往是在不同的時期建設起來 的,運行在不同的平臺上;也許是由不同廠商開發,使用了各種不同的技術和標準。如果舉例說國內一著名的IT公司(名字隱去),內部共有60多個業務系統,這些系統包括兩個不同版本的SAP的ERP系統,12個不同類型和版本的數據庫系統,8個不同類型和版本的操作系統,以及使用了3種不同的防火牆技術,還有數十種互相不能兼容的協議和標準,你相信嗎?不要懷疑,這種情況其實非常普遍。每一個應用系統在運行了數年以後,都會成為不可替換的企業IT架構的一部分,如下圖所示。
隨 著企業的發展,業務系統的數量在不斷的增加,老的系統卻不能輕易的替換,這會帶來很多的開銷。其一是管理上的開銷,需要維護的系統越來越多。很多系統的數 據是相互冗餘和重複的,數據的不一致性會給管理工作帶來很大的壓力。業務和業務之間的相關性也越來越大,例如公司的計費系統和財務系統,財務系統和人事系 統之間都不可避免的有著密切的關係。
為了降低管理的消耗,最大限度的重用已有投資的系統,很多企業都在進行著企業應用集成(EAI)。 企業應用集成可以在不同層面上進行:例如在數據存儲層面上的“數據大集中”,在傳輸層面上的“通用數據交換平臺”,在應用層面上的“業務流程整合”,和用 戶界面上的“通用企業門戶”等等。事實上,還用一個層面上的集成變得越來越重要,那就是“身份認證”的整合,也就是“單點登錄”。
通常來說,每個單獨的系統都會有自己的安全體系和身份認證系統。整合以前,進入每個系統都需要進行登錄,這樣的局面不僅給管理上帶來了很大的困難,在安全方面也埋下了重大的隱患。下面是一些著名的調查公司顯示的統計數據:
用戶每天平均 16 分鐘花在身份驗證任務上 - 資料來源: IDS
頻繁的 IT 用戶平均有 21 個密碼 - 資料來源: NTA Monitor Password Survey
49% 的人寫下了其密碼,而 67% 的人很少改變它們
每 79 秒出現一起身份被竊事件 - 資料來源:National Small Business Travel Assoc
全球欺騙損失每年約 12B - 資料來源:Comm Fraud Control Assoc
到 2007 年,身份管理市場將成倍增長至 $4.5B - 資料來源:IDS
使用“單點登錄”整合後,只需要登錄一次就可以進入多個系統,而不需要重新登錄,這不僅僅帶來了更好的用戶體驗,更重要的是降低了安全的風險和管理的消耗。請看下面的統計數據:
提高 IT 效率:對於每 1000 個受管用戶,每用戶可節省$70K
幫助臺呼叫減少至少1/3,對於 10K 員工的公司,每年可以節省每用戶 $75,或者合計 $648K
生產力提高:每個新員工可節省 $1K,每個老員工可節省 $350 �資料來源:Giga
ROI 回報:7.5 到 13 個月 �資料來源:Gartner
另外,......
誰都能看懂的單點登錄實現方式
轉載 SSO英文全稱Single Sign On(單點登錄)。SSO是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登錄映射到其他應用中用於同一個用戶的登錄的機制。它是目前比較流行的企業業務整合的解決方案之一。(本段內容來自百度百科)
二級域名的單點登錄
什麼是二級域名呢?例如:
site1.domain.com
site2.domain.com
對於二級域名的單點登錄,我們可以非常方便的通過共享cookie來實現,簡單的說,就是在設置Form票據的時候,將cookie的domain設置為頂級域名即可,例如:
HttpCookie cookie = new HttpCookie(FormsAuthCookieName, encryptedTicket);
cookie.Expires = rememberMe ? expirationDate : DateTime.MinValue;
cookie.HttpOnly = true;
cookie.Path = "/";
cookie.Domain = "domain.com";
context.Response.Cookies.Set(cookie);
這種方式不涉及跨域,當cookie的domain屬性設置為頂級域名之後,所有的二級域名都可以訪問到身份驗證的cookie,在服務器端只要驗證了這個cookie就可以實現身份的驗證。
但是,當跨域的時候,例如:
site1.com
site2.com
這個時候就不能共享cookie了,所以上面的解決方案就會失效。那麼,要實現跨域的單點登錄該如何做呢?請繼續往下看。
跨域的單點登錄
關於跨域的SSO的設計思路,我畫了一個簡單的流程圖:
單點登錄,java實現
看你怎麼做了,有開源框架可以幫助你,!
一般用spring 的security比較不錯
單點登錄有哪些實現方式?
在不同的場景下,單點登錄採用不同的實現方式。應用系統是同一域名下的不同站點時,通常採用驗證cookie的方式;應用系統在同一域名下但是數據不同子域時,採用cookie與sessionID相結合的方式;應用系統分屬不同域時,採用站點間傳遞cookie和重定向的方式。北京CA針對不同場景,單點登錄方式也不同。
.net 怎樣實現單點登錄
用Cache可以實現。每次新的用戶登錄成功,就給用戶賬號(系統唯一)綁定一個guid,然後保存到cache中(用戶賬號作為key,guid作為value),並且將該鍵值對保存到cookie中。然後每次服務器接收到請求時,都判斷cookie中的賬號的guid值與服務器cache中保存的該賬號的guid值是否一致。只有一致才接受請求。注意在往cache中保存值的時候,要指定更新,而不是每次都新插入。cache設置過期時間長一點。然後最好在用戶退出系統的時候,清理掉該賬號的cache。
oauth2.0怎麼實現單點登錄
本案涉及三個概念及功能模塊,即門戶、單點登錄和統一身份認證。 單點登錄(Single Sign-On,縮寫為SSO),它是目前業務整合時使用較多的一種解決方案,通過SSO,用戶只需要在某個應用系統入口登錄一次,就可以訪問所有與該應用系統相互信任的其它
單點登錄中授權管理是怎麼實現的
這個問題比較好,目前單點登錄對第三方系統的授權是一個比較難解決的問題,一般來說,有三種層次的實現機制,不能詳細描述,只能探討一下大概方向:
1、由sso系統為第三方系統提供授權接口,修改第三方系統的權限體系,採用sso的統一接口進行權限管理、認證等,對第三方系統改動非常大。
2、由第三方系統想sso提供接口,根據業務邏輯在sso中進行相應的配置,sso授權時調用對應系統提供的接口進行,至於數據庫級配置還是xml還是json那就是你的選擇,也需要改動第三方系統的代碼。
3、數據庫層次的管理,由第三方系統整理出授權數據庫邏輯,並形成授權語句,交由sso進行配置、管理,sso進行用戶授權時調用相應的業務邏輯進行處理。