




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 基于.Net的單點(diǎn)登錄(SSO)解決方案畢業(yè)設(shè)計(jì)論文 前些天一位朋友要我?guī)兔ψ鲆粏吸c(diǎn)登錄,其實(shí)這個(gè)概念早已耳熟能詳,但實(shí)際應(yīng)用很少,難得最近輕閑,于是決定通過(guò)本文來(lái)詳細(xì)描述一個(gè)SSO解決方案,希望對(duì)大家有所幫助。SSO的解決方案很多,但搜索結(jié)果令人大失所望,大部分是相互,并且描述的也是走馬觀花。 閑話少敘,進(jìn)入正題,我的想法是使用集中驗(yàn)證方式,多個(gè)站點(diǎn)集中Passport驗(yàn)證。 如下圖所示: 為方便清晰描
2、述,先定義幾個(gè)名詞,本文中出現(xiàn)之處均為如下含義。 主站:Passport集中驗(yàn)證服務(wù)器 .passport./ 。 分站:.a./、.b./、.c./ 憑證:用戶登錄后產(chǎn)生的數(shù)據(jù)標(biāo)識(shí),用于識(shí)別授權(quán)用戶,可為多種方式,DEMO中主站我使用的是Cache,分站使用Session。 令牌:由P
3、assport頒發(fā)可在各分站中流通的唯一標(biāo)識(shí)。 OK,現(xiàn)在描述一下單點(diǎn)登錄的過(guò)程: 情形一、匿名用戶:匿名用戶訪問(wèn)分站a上的一個(gè)授權(quán)頁(yè)面,首先跳轉(zhuǎn)到主站讓用戶輸入、密碼進(jìn)行登錄,驗(yàn)證通過(guò)后產(chǎn)生主站憑證,同時(shí)產(chǎn)生令牌,跳轉(zhuǎn)回分站a,此時(shí)分站a檢測(cè)到用戶已持有令牌,于是用令牌再次去主站獲取用戶憑證,獲取成功后允許用戶訪問(wèn)該授權(quán)頁(yè)面。同時(shí)產(chǎn)生分站a的本地憑證,當(dāng)該用戶需要再次驗(yàn)證時(shí)將先檢查本地憑證,以減少網(wǎng)絡(luò)交互。 情形二
4、、在分站a登錄的用戶訪問(wèn)分站b:因?yàn)橛脩粼诜终綼登錄過(guò),已持有令牌,所以分站b會(huì)用令牌去主站獲取用戶憑證,獲取成功后允許用戶訪問(wèn)授權(quán)頁(yè)面。同時(shí)產(chǎn)生分站b的本地憑證。 設(shè)計(jì)完成后,接下來(lái)是方案實(shí)現(xiàn)的一些關(guān)鍵點(diǎn): 令牌:令牌由主站頒發(fā),主站頒發(fā)令牌同時(shí)生成用戶憑證,并記錄令牌與用戶憑證之間的對(duì)應(yīng)關(guān)系,以根據(jù)用戶提供的令牌響應(yīng)對(duì)應(yīng)的憑證;令牌要在各跨域分站中進(jìn)行流通,所以DEMO中令牌我使用主站的Cookie,并指定Cookie.Domain="passport.&quo
5、t;。各分站如何共享主站的Cookie?從分站Redirect到主站頁(yè)面,然后該頁(yè)面讀取Cookie并以URL參數(shù)方式回傳即可,可在DEMO代碼中查看詳細(xì)實(shí)現(xiàn),當(dāng)然如果哪位有更好的令牌實(shí)現(xiàn)方式也拿出來(lái)分享。/產(chǎn)生令牌string tokenValue = Guid.NewGuid().ToString().ToUpper(); Cookie tokenCookie = new Cookie("Token");tokenCookie.Values.Add("Value", t
6、okenValue);tokenCookie.Domain = "passport."Response.AppendCookie(tokenCookie); 主站憑證:主站憑證是一個(gè)關(guān)系表,包含了三個(gè)字段:令牌、憑證數(shù)據(jù)、過(guò)期時(shí)間。有多種實(shí)現(xiàn)方式可供選擇,要求可靠的話用數(shù)據(jù)庫(kù),要求性能的話用Cache,DEMO中我使用的是Cache中的DataTable。如下代碼所示:/ <summary>/ 初始化數(shù)據(jù)結(jié)構(gòu)/ </summary>
7、;/ <remarks>/ -/ | token(令牌) | info(用戶憑證) | timeout(過(guò)期時(shí)間) |/ |-|/ </remarks>private static void cacheInit() if ( Context.Current.Cache"CERT" = null)
8、0; DataTable dt = new DataTable(); dt.Columns.Add("token", Type.GetType("System.String"); dt.Columns"token&qu
9、ot;.Unique = true; dt.Columns.Add("info", Type.GetType("System.Object"); dt.Columns"info".DefaultValue = null;
10、; dt.Columns.Add("timeout", Type.GetType("System.DateTime"); dt.Columns"timeout".DefaultValue = DateTime.Now.AddMinutes(double.Parse(System.Configuration.ConfigurationManager.AppSettings"timeout&quo
11、t;); DataColumn keys = new DataColumn1; keys0 = dt.Columns"token" dt.PrimaryKey = keys;
12、0; /Cache的過(guò)期時(shí)間為 令牌過(guò)期時(shí)間*2 Context.Current.Cache.Insert("CERT", dt, null, DateTime.MaxValue, TimeSpan.FromMinutes(double.Parse(System.Configuration.ConfigurationManager.AppSettings"timeout&qu
13、ot;) * 2); 分站憑證:分站憑證主要用于減少重復(fù)驗(yàn)證時(shí)網(wǎng)絡(luò)的交互,比如用戶已在分站a上登錄過(guò),當(dāng)他再次訪問(wèn)分站a時(shí),就不必使用令牌去主站驗(yàn)證了,因?yàn)榉终綼已有該用戶的憑證。分站憑證相對(duì)比較簡(jiǎn)單,使用Session、Cookie均可。 分站SSO頁(yè)面基類:分站使用SSO的頁(yè)面會(huì)做一系列的邏輯判斷處理,如文章開頭的流程圖。如果有多個(gè)頁(yè)面的話不可能為每個(gè)頁(yè)寫一個(gè)這樣的邏輯,OK,那么把這套邏輯封
14、裝成一個(gè)基類,凡是要使用SSO的頁(yè)面繼承該基類即可。如下代碼所示:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlCont
15、rols;using System.Text.RegularExpressions;namespace SSO.SiteA.Class / <summary> / 授權(quán)頁(yè)面基類 / </summary> public class AuthBase : System.Web.UI.Page &
16、#160; protected override void OnLoad(EventArgs e) if (Session"Token" != null)
17、 /分站憑證存在 Response.Write("恭喜,分站憑證存
18、在,您被授權(quán)訪問(wèn)該頁(yè)面!"); else
19、 /令牌驗(yàn)證結(jié)果 if (Request.QueryString"Token" != null) &
20、#160; if (Request.QueryString"Token" != "$Token$")
21、 /持有令牌 &
22、#160; string tokenValue = Request.QueryString"Token" /調(diào)用WebService獲取主站憑證 &
23、#160; SSO.SiteA.RefPassport.TokenService tokenService = new SSO.SiteA.RefPassport.TokenService();
24、0; object o = tokenService.TokenGetCredence(tokenValue); if (o != null)
25、60; /令牌
26、正確 Session"Token" = o; &
27、#160; Response.Write("恭喜,令牌存在,您被授權(quán)訪問(wèn)該頁(yè)面!");
28、160; else
29、0; /令牌錯(cuò)誤
30、;Response.Redirect(this.replaceToken();
31、60; else
32、; /未持有令牌 Response.Redirect(this.replaceToken();
33、60; /未進(jìn)行令牌驗(yàn)證,
34、去主站驗(yàn)證 else
35、60; Response.Redirect(this.getTokenURL(); ba
36、se.OnLoad(e); / <summary> / 獲取帶令牌請(qǐng)求的URL / 在當(dāng)前URL中附加上令牌請(qǐng)求參數(shù)
37、160; / </summary> / <returns></returns> private string getTokenURL()
38、; string url = Request.Url.AbsoluteUri; Regex reg = new Regex(".*?.+=.+$"); if
39、(reg.IsMatch(url) url += "&Token=$Token$" else
40、0; url += "?Token=$Token$" return ".passport./gettoken.aspx?BackURL=" + Server.UrlEncode(url); &
41、#160; / <summary> / 去掉URL中的令牌 / 在當(dāng)前URL中去掉令牌參數(shù) / </summary>
42、0; / <returns></returns> private string replaceToken() string url = Request.Url.Absolut
43、eUri; url = Regex.Replace(url, "(?|&)Token=.*", "", RegexOptions.IgnoreCase); return ".passport./us
44、erlogin.aspx?BackURL=" + Server.UrlEncode(url); /end class 用戶退出:用戶退出時(shí)分別清空主站憑證與當(dāng)前分站憑證。如果要求A站點(diǎn)退出,B、C站點(diǎn)也退出,可自行擴(kuò)展接口清空每個(gè)分站憑證。 主站過(guò)期憑證/令牌清除:定時(shí)清除(DataT
45、able)Cache“CERT”中timeout字段超過(guò)當(dāng)前時(shí)間的記錄。單點(diǎn)登錄(Single Sign On),簡(jiǎn)稱為 SSO,是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。通常情況下運(yùn)維控審計(jì)系統(tǒng)、4A系統(tǒng)或者都包含此項(xiàng)功能,目的是簡(jiǎn)化賬號(hào)登陸過(guò)程并保護(hù)賬號(hào)和密碼安全,對(duì)賬號(hào)進(jìn)行統(tǒng)一管理。企業(yè)應(yīng)用集成(EAI, Enterprise Application Integration)。企業(yè)應(yīng)用集成可以在不同層面上進(jìn)行:例如在數(shù)據(jù)存儲(chǔ)層面上的“數(shù)據(jù)大集中”,在傳輸層面上的“通用數(shù)據(jù)交換平臺(tái)”,在應(yīng)用層面上的“業(yè)務(wù)
46、流程整合”,和用戶界面上的“通用企業(yè)門戶”等等。事實(shí)上,還有一個(gè)層面上的集成變得越來(lái)越重要,那就是“身份認(rèn)證”的整合,也就是“單點(diǎn)登錄”。在信息安全管理中,訪問(wèn)控制(Access Controls)環(huán)繞四個(gè)過(guò)程:Identification;Authentication;Authorization;Accountability。單點(diǎn)登錄(Single Sign On)屬于Authorization授權(quán)系統(tǒng),除單點(diǎn)登錄外還包括:Lightweight Directory Access Protocol 和 Authorization ticket。(Michael E. Whitman (201
47、1) Management Of InformationSecurity KennesawUniversity)編輯本段技術(shù)實(shí)現(xiàn)機(jī)制當(dāng)用戶第一次訪問(wèn)應(yīng)用系統(tǒng)1的時(shí)候,因?yàn)檫€沒(méi)有登錄,會(huì)被引導(dǎo)到認(rèn)證系統(tǒng)中進(jìn)行登錄;根據(jù)用戶提供的登錄信息,認(rèn)證系統(tǒng)進(jìn)行身份效驗(yàn),如果通過(guò)效驗(yàn),應(yīng)該返回給用戶一個(gè)認(rèn)證的憑據(jù)ticket;用戶再訪問(wèn)別的應(yīng)用的時(shí)候,就會(huì)將這個(gè)ticket帶上,作為自己認(rèn)證的憑據(jù),應(yīng)用系統(tǒng)接受到請(qǐng)求之后會(huì)把ticket送到認(rèn)證系統(tǒng)進(jìn)行效驗(yàn),檢查ticket的合法性。如果通過(guò)校驗(yàn),用戶就可以在不用再次登錄的情況下訪問(wèn)應(yīng)用系統(tǒng)2和應(yīng)用系統(tǒng)3了。編輯本段技術(shù)實(shí)現(xiàn)與應(yīng)用優(yōu)勢(shì)技術(shù)
48、實(shí)現(xiàn)以金萬(wàn)維單點(diǎn)登錄為例: 如圖所示:統(tǒng)一的身份認(rèn)證系統(tǒng)主要功能是將用戶的登錄信息和用戶信息庫(kù)相比較,對(duì)用戶進(jìn)行登錄認(rèn)證;認(rèn)證成功后,認(rèn)證系統(tǒng)應(yīng)該生成統(tǒng)一的認(rèn)證標(biāo)志(ticket),返還給用戶。另外,認(rèn)證系統(tǒng)還應(yīng)該對(duì)ticket進(jìn)行效驗(yàn),判斷其有效性。整個(gè)系統(tǒng)可以存在兩個(gè)以上的認(rèn)證服務(wù)器,這些服務(wù)器甚至可以是不同的產(chǎn)品。認(rèn)證服務(wù)器之間要通過(guò)標(biāo)準(zhǔn)的通訊協(xié)議,互相交換認(rèn)證信息,就能完成更高級(jí)別的單點(diǎn)登錄。應(yīng)用優(yōu)勢(shì)單點(diǎn)登錄:用戶只需登錄一次,即可通過(guò)單點(diǎn)登錄系統(tǒng)(eTrueSSO)訪問(wèn)后臺(tái)的多個(gè) 應(yīng)用系統(tǒng),二次登陸時(shí)無(wú)需重新輸入用戶名和密碼C/S單點(diǎn)登錄解決方案:無(wú)需修改任何現(xiàn)
49、有的應(yīng)用系統(tǒng)服務(wù)端和客戶端即可實(shí)現(xiàn)C/S單點(diǎn)登錄系統(tǒng)即裝即用:通過(guò)簡(jiǎn)單的配置,無(wú)須用戶修改任何現(xiàn)有B/S、C/S應(yīng)用系統(tǒng)即可使用應(yīng)用靈活性:嵌金萬(wàn)維動(dòng)態(tài)域名解析系統(tǒng)(gnHost),可獨(dú)立實(shí)施,也可結(jié)合金萬(wàn)維異速聯(lián)/天聯(lián)產(chǎn)品使用基于角色訪問(wèn)控制:根據(jù)用戶的角色和URL實(shí)現(xiàn)訪問(wèn)控制功能全面的日志審計(jì):精確地記錄用戶的日志,可按日期、地址、用戶、資源等信息對(duì)日志進(jìn)行查詢、統(tǒng)計(jì)和分析集群:通過(guò)集群功能,實(shí)現(xiàn)多臺(tái)服務(wù)器之間的動(dòng)態(tài)負(fù)載均衡傳輸加密:支持多種對(duì)稱和非對(duì)稱加密算法,保證用戶信息在傳輸過(guò)程中不被竊取和篡改可擴(kuò)展性:對(duì)后續(xù)的業(yè)務(wù)系統(tǒng)擴(kuò)充和擴(kuò)展有良好的兼容性存在的問(wèn)題與需求奇正藏藥集團(tuán)公司坐落于,
50、在、等地?fù)碛卸鄠€(gè)分子公司,并在全國(guó)各大城市設(shè)有辦事處,隨著業(yè)務(wù)的快速發(fā)展與壯大,集團(tuán)公司已經(jīng)意識(shí)到信息化是實(shí)現(xiàn)企業(yè)終極目標(biāo)的重要手段,自2000年開始,公司先后實(shí)施了ERP、BPM、HR、EIP、企業(yè)郵局、騰訊通平臺(tái)、OA、財(cái)務(wù)等多套管理系統(tǒng),實(shí)現(xiàn)公司各項(xiàng)業(yè)務(wù)流程與管理流程的信息化、自動(dòng)化。然而,隨著業(yè)務(wù)數(shù)量的不斷增加,各系統(tǒng)之間互不兼容造成的信息共享性差、需要記憶多套密碼、客戶端維護(hù)成本高等問(wèn)題日益凸顯,一些花巨資購(gòu)買并實(shí)施數(shù)月的系統(tǒng)運(yùn)用效果遠(yuǎn)不如預(yù)期理想。為了確保業(yè)務(wù)的高效運(yùn)行與管理的高效執(zhí)行,企業(yè)急需優(yōu)化信息化方案:第一, 如何實(shí)現(xiàn)公司各種業(yè)務(wù)流程與信息資源的全面整合?第二, 如何簡(jiǎn)化各
51、種信息系統(tǒng)的使用方式,降低使用成本?第三, 如何降低信息系統(tǒng)維護(hù)與管理成本?解決方案實(shí)現(xiàn)資源整合:為了解決第一個(gè)問(wèn)題,即實(shí)現(xiàn)各信息系統(tǒng)之間的全面整合,集團(tuán)公司引進(jìn)了企業(yè)信息門戶(EIP),即將各種應(yīng)用系統(tǒng)(諸如ERP、BPM、HR、OA、企業(yè)郵局等)、數(shù)據(jù)資源和互聯(lián)網(wǎng)資源統(tǒng)一集到企業(yè)信息門戶之下,根據(jù)每個(gè)用戶使用特點(diǎn)和角色的不同,形成個(gè)性化的應(yīng)用界面,并通過(guò)對(duì)事件和消息的處理、傳輸把用戶有機(jī)地聯(lián)系在一起。簡(jiǎn)化系統(tǒng)應(yīng)用:在實(shí)施EIP的過(guò)程中,集團(tuán)公司使用金萬(wàn)維單點(diǎn)登錄eTureSSO解決用戶需要記錄多個(gè)系統(tǒng)賬號(hào)的問(wèn)題,用戶只需要在第一次訪問(wèn)信息系統(tǒng)時(shí),輸入用戶名與密碼,以后再訪問(wèn)同一個(gè)系統(tǒng)資源時(shí)
52、,無(wú)需再次輸入,由單點(diǎn)登錄系統(tǒng)自動(dòng)登錄。降低信息維護(hù)成本:金萬(wàn)維異速聯(lián)(E-SoonLink)實(shí)現(xiàn)C/S分布式軟件的集中式部署,將管理系統(tǒng)服務(wù)器端與客戶端統(tǒng)一部署在客戶服務(wù)器中心,任何授權(quán)客戶機(jī)都能夠以WEB形式訪問(wèn),并更新數(shù)據(jù),輕松實(shí)現(xiàn)了系統(tǒng)在廣域網(wǎng)中的局域網(wǎng)應(yīng)用。奇正藏藥集團(tuán)在實(shí)施異速聯(lián)系統(tǒng)之后,無(wú)需在每個(gè)用戶客戶機(jī)安裝每套信息系統(tǒng)的客戶端軟件,因此對(duì)客戶機(jī)硬件配置要求降低,另外,無(wú)需對(duì)每個(gè)客戶機(jī)進(jìn)行安裝配置和維護(hù),大大減少了安裝維護(hù)的工作量,降低了用戶數(shù)量日益增長(zhǎng)所產(chǎn)生的信息化成本。淺析用戶權(quán)限管理系統(tǒng)中的單點(diǎn)登錄概述:用戶權(quán)限管理系統(tǒng)中的單點(diǎn)登錄是一種常用于企業(yè)部網(wǎng)絡(luò)的訪問(wèn)網(wǎng)絡(luò)技術(shù),可
53、以將企業(yè)中所有域的用戶登錄和用戶賬號(hào)管理進(jìn)行集中。 用戶權(quán)限管理系統(tǒng)中的單點(diǎn)登錄是一種常用于企業(yè)部網(wǎng)絡(luò)的訪問(wèn)網(wǎng)絡(luò)技術(shù),可以將企業(yè)中所有域的用戶登錄和用戶賬號(hào)管理進(jìn)行集中。 如果在權(quán)限管理系統(tǒng)中不引入單點(diǎn)登錄,在企業(yè)中承擔(dān)審批權(quán)限的人員對(duì)于企業(yè)中的各種應(yīng)用系統(tǒng)如CRM、OA、HR等,將需要記住多個(gè)系統(tǒng)的用戶登錄信息,此外還需要多次的進(jìn)行登錄操作,極大的影響了信息化管理的快捷性和高效性。 另一方面多個(gè)應(yīng)用系統(tǒng)需要多個(gè)用戶管理,在一方面也為系統(tǒng)管理員維護(hù)系統(tǒng)增加了工作量。如果在一個(gè)企
54、業(yè)中有6個(gè)應(yīng)用系統(tǒng),一次若是變更10個(gè)人員,系統(tǒng)管理員也需要維護(hù)60個(gè)人的信息,然而想這樣的企業(yè)調(diào)整的人員信息肯定不止10人,這中原始的信息管理方法極大的阻礙的信息管理的高效性。 通過(guò)單點(diǎn)登錄功能,每個(gè)用戶只需要記錄一個(gè)用戶名和密碼,登錄一個(gè)系統(tǒng)之后,即可實(shí)現(xiàn)多個(gè)系統(tǒng)的透明跳轉(zhuǎn)。還可進(jìn)行實(shí)行統(tǒng)一的用戶管理系統(tǒng),系統(tǒng)管理員也值需要維護(hù)一套人員信息,改變信息時(shí)通過(guò)平臺(tái)接口同步更新至各個(gè)應(yīng)用系統(tǒng),實(shí)現(xiàn)人員系統(tǒng)單次維護(hù)全公司同步變更,大大提高了工作效率。 慧都UPMS通用用戶權(quán)限系統(tǒng)現(xiàn)全面升級(jí),針對(duì)不同應(yīng)用系統(tǒng)提供了用戶
55、權(quán)限模塊的基礎(chǔ)框架和通用模型,還計(jì)入了包括單點(diǎn)登錄在的一些新功能,幫助開發(fā)者快速實(shí)施和開發(fā)出符合不同需求的用戶權(quán)限管理模塊。 通過(guò)慧都的UPMS通用用戶權(quán)限系統(tǒng),用戶只需要對(duì)接入的應(yīng)用系統(tǒng)設(shè)置勾選開啟單點(diǎn)登錄,便可只輸入一次用戶名密碼,即可訪問(wèn)權(quán)限允許的所有接入系統(tǒng),如下圖: 在這次的UPMS通用用戶權(quán)限系統(tǒng)升級(jí)中加入了單點(diǎn)登錄功能,用戶可在UPMS中,可對(duì)接入系統(tǒng)進(jìn)行進(jìn)行勾選設(shè)置,來(lái)確認(rèn)是否開啟單點(diǎn)登錄功能,如下圖:通過(guò)UPMS通用用戶權(quán)限系統(tǒng)中的單點(diǎn)登錄可實(shí)現(xiàn)多種價(jià)值:· 節(jié)省用戶在不同系統(tǒng)中登錄所用時(shí)
56、83; 減少用戶登錄出錯(cuò)的幾率· 強(qiáng)化了安全性· 減少系統(tǒng)管理員增、刪、改用戶權(quán)限時(shí)間· 不用處理或是保存多個(gè)系統(tǒng)用戶的認(rèn)證信息· 簡(jiǎn)單操作實(shí)現(xiàn)用戶登錄和賬號(hào)的集中管理采用CAS原理構(gòu)建單點(diǎn)登錄單 點(diǎn)登錄(Single Sign On , 簡(jiǎn)稱 SSO )是目前比較流行的服務(wù)于企業(yè)業(yè)務(wù)整合的解決方案之一, SSO 使得在多個(gè)應(yīng)用系統(tǒng)中,用戶 只需要登錄一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。IBM對(duì)SSO有一個(gè)形象的解釋“單點(diǎn)登錄、全網(wǎng)漫游”。 1.CAS
57、 介紹 CAS 是 Yale 大學(xué)發(fā)起的一個(gè)開源項(xiàng)目,旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄方法,CAS 在 2004 年 12 月正式成為 JA-SIG 的一個(gè)項(xiàng)目。CAS 具有以下特點(diǎn):· 開源的企業(yè)級(jí)單點(diǎn)登錄解決方案。 · CAS Server 為需要獨(dú)立部署的 Web 應(yīng)用。 · CAS Client 支持非常多的客戶端(
58、這里指單點(diǎn)登錄系統(tǒng)中的各個(gè) Web 應(yīng)用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。 2.CAS 原理和協(xié)議 從 結(jié)構(gòu)上看,CAS 包含兩個(gè)部分: CAS Server 和 CAS Client。CAS Server 需要獨(dú)立部署,主要負(fù)責(zé)對(duì)用戶的認(rèn)證工 作;CAS Client 負(fù)責(zé)處理對(duì)客戶端受保護(hù)資源的
59、訪問(wèn)請(qǐng)求,需要登錄時(shí),重定向到 CAS Server。圖1 是 CAS 最基本的協(xié)議過(guò)程:圖 1. CAS 基礎(chǔ)協(xié)議CAS Client 與 受保護(hù)的客戶端應(yīng)用部署在一起,以 Filter 方式保護(hù)受保護(hù)的資源。(1)對(duì)于訪問(wèn)受保護(hù)資源的每個(gè) Web 請(qǐng)求,CAS Client 會(huì)分析該請(qǐng)求 的 請(qǐng)求中是否包含 Service Ticket,如果沒(méi)有,則說(shuō)明當(dāng)前用戶尚未登錄。(2)于是將請(qǐng)求重
60、定向到指定好 的 CAS Server 登錄地址,并傳遞 Service (也就是要訪問(wèn)的目的資源地址),以便登錄成功過(guò)后轉(zhuǎn)回該地址。(3)用戶輸入認(rèn) 證信息,如果登錄成功,CAS Server 隨機(jī)產(chǎn)生一個(gè)相當(dāng)長(zhǎng)度、唯一、不可偽造的 Service Ticket,并緩存以待將來(lái)驗(yàn)證。(4)系統(tǒng)自 動(dòng)重定向到 Service (也就是要訪問(wèn)的目的資源地址)地址,并為客戶端瀏覽器設(shè)置一個(gè) Ticket Granted Cookie(TGC)。(5,6)CAS
61、 Client 在拿 到 Service 和新產(chǎn)生的 Ticket 過(guò)后,與 CAS Server 進(jìn)行身份核實(shí),以確 保 Service Ticket 的合法性。在該協(xié)議中,所有與 CAS 的交互均采用 SSL 協(xié)議,確保,ST 和 TGC 的安全性。協(xié)議工作過(guò)程中會(huì)有 2 次重定向的過(guò)程,但是 CAS Client 與 CAS Server
62、160;之間進(jìn)行 Ticket 驗(yàn)證的過(guò)程對(duì)于用戶是透明的。另外,CAS 協(xié)議中還提供了 Proxy (代理)模式,以適應(yīng)更加高級(jí)、復(fù)雜的應(yīng)用場(chǎng)景,具體介紹可以參考 CAS 官方上的相關(guān)文檔。 · 用戶在單點(diǎn)登錄服務(wù)器的登錄頁(yè)面中,輸入用戶名和密碼。· 然后單點(diǎn)登錄服務(wù)器會(huì)對(duì)用戶名和密碼進(jìn)行認(rèn)證。 認(rèn)證本身并不是單點(diǎn)登錄服務(wù)器的功能,因此,通常會(huì)引入某種認(rèn)證機(jī)制。認(rèn)證機(jī)制可以有很多種,例如自己寫一個(gè)認(rèn)證程序,或者使用一些標(biāo)準(zhǔn)的認(rèn)證方法,例如 LDAP或者數(shù)據(jù)庫(kù)
63、等等。在大多數(shù)情況下,會(huì)使用LDAP進(jìn)行認(rèn)證。這是因?yàn)長(zhǎng)DAP在處理用戶登錄方面,有很多獨(dú)特的優(yōu)勢(shì),這在本文的后面還會(huì)比較詳細(xì) 地進(jìn)行介紹。· 認(rèn)證通過(guò)之后,單點(diǎn)登錄服務(wù)器會(huì)和應(yīng)用程序進(jìn)行一個(gè)比較復(fù)雜的交互,這通常是某種授權(quán)機(jī)制。CAS使用的是所謂的Ticket。具體這點(diǎn)后面還會(huì)介紹。· 授權(quán)完成后,CAS把頁(yè)面重定向,回到Web應(yīng)用。Web應(yīng)用此時(shí)就完成了成功的登錄(當(dāng)然這也是單點(diǎn)登錄的客戶端,根據(jù)返回的Ticket信息進(jìn)行判斷成功的)。· 然后單點(diǎn)登錄服務(wù)器會(huì)在客戶端創(chuàng)建一個(gè)Cookie。注意,是在用戶的客戶端,而不是服務(wù)端創(chuàng)建一個(gè)Cookie。這個(gè)Cooki
64、e是一個(gè)加密的Cookie,其中保存了用戶登錄的信息。· 如 果用戶此時(shí)希望進(jìn)入其他Web應(yīng)用程序,則安裝在這些應(yīng)用程序中的單點(diǎn)登錄客戶端,首先仍然會(huì)重定向到CAS服務(wù)器。不過(guò)此時(shí)CAS服務(wù)器不再要求用戶輸 入用戶名和密碼,而是首先自動(dòng)尋找Cookie,根據(jù)Cookie中保存的信息,進(jìn)行登錄。登錄之后,CAS重定向回到用戶的應(yīng)用程序。這樣,就不再需要用戶繼續(xù)輸入用戶名和密碼,從而實(shí)現(xiàn)了單點(diǎn)登錄。注意,這種單點(diǎn)登錄體系中,并沒(méi)有通過(guò) 進(jìn)行密碼的傳遞(但是有用戶名的傳遞),因此是十分安全的。CAS 被設(shè)計(jì)為一個(gè)獨(dú)立的Web應(yīng)用,目前是通過(guò)若干個(gè)Java servlets來(lái)實(shí)現(xiàn)的。CAS必
65、須運(yùn)行在支持SSL的web服務(wù)器至上。應(yīng)用程序可以通過(guò)三個(gè)URL路徑來(lái)使用CAS,分別是登錄URL(login URL),校驗(yàn)URL(validation URL)和登出URL(logout URL)。 · 應(yīng)用程序一開始,通常跳過(guò)原來(lái)的登陸界面,而直接轉(zhuǎn)向CAS自帶的登錄界面。當(dāng)然也可以在應(yīng)用程序的主界面上增加一個(gè)登錄之類的按鈕,來(lái)完成跳轉(zhuǎn)工作。· 如果用戶喜歡的話,也可以手工直接進(jìn)入CAS的登錄界面,先進(jìn)行登錄,在啟動(dòng)其他的應(yīng)用程序。不過(guò)這種模式主要用于測(cè)試環(huán)境。· CAS的登錄
66、界面處理所謂的“主體認(rèn)證”。它要求用戶輸入用戶名和密碼,就像普通的登錄界面一樣。· 主體認(rèn)證時(shí),CAS獲取用戶名和密碼,然后通過(guò)某種認(rèn)證機(jī)制進(jìn)行認(rèn)證。通常認(rèn)證機(jī)制是LDAP。· 為了進(jìn)行以后的單點(diǎn)登錄,CAS向?yàn)g覽器送回一個(gè)所謂的“存cookie”。這種cookie并不是真的保存在存中,而只是瀏覽器一關(guān)閉,cookie就自動(dòng)過(guò)期。這個(gè)cookie稱為“ticket-granting cookie”,用來(lái)表明用戶已經(jīng)成功地登錄。· 認(rèn)證成功后,CAS服務(wù)器創(chuàng)建一個(gè)很長(zhǎng)的、隨機(jī)生成的字符串,稱為“Ticket”。隨后,CAS將這個(gè)ticket和成功登錄的用戶,以與服務(wù)
67、聯(lián)系在一起。這個(gè)ticket是一次性使用的一種憑證,它只對(duì)登錄成功的用戶與其服務(wù)使用一次。使用過(guò)以后立刻失效。· 主體認(rèn)證完成后,CAS將用戶的瀏覽器重定向,回到原來(lái)的應(yīng)用。CAS客戶端,在從應(yīng)用轉(zhuǎn)向CAS的時(shí)候,同時(shí)也會(huì)記錄原始的URL,因此CAS知道誰(shuí)在調(diào)用自己。CAS重定向的時(shí)候,將ticket作為一個(gè)參數(shù)傳遞回去。· 例 如原始應(yīng)用的網(wǎng)址是 itil./,在這個(gè)網(wǎng)址上,一開始有如下語(yǔ)句,轉(zhuǎn)向CAS服務(wù)器的單點(diǎn)登錄頁(yè)面 s: /secure.oa./cas/login?service=.itil./auth.aspx。· CAS完成主體認(rèn)證后,會(huì)使用下面UR
68、L進(jìn)行重定向 itil./authenticate.aspx?ticket= ST-2-7FahVdQ0rYdQxHFBIkKgfYCrcoSHRTsFZ2w-20。· 收到ticket之后,應(yīng)用程序需要驗(yàn)證ticket。這是通過(guò)將ticket 傳遞給一個(gè)校驗(yàn)URL來(lái)實(shí)現(xiàn)的。校驗(yàn)URL也是CAS服務(wù)器提供的。· CAS通過(guò)校驗(yàn)路徑獲得了ticket之后,通過(guò)部的數(shù)據(jù)庫(kù)對(duì)其進(jìn)行判斷。如果判斷是有效性,則返回一個(gè)NetID給應(yīng)用程序。· 隨后CAS將ticket作廢,并且在客戶端留下一個(gè)cookie。· 以后其他應(yīng)用程序就使用這個(gè)cookie進(jìn)行認(rèn)證(當(dāng)然通
69、過(guò)CAS的客戶端),而不再需要輸入用戶名和密碼。單點(diǎn)登錄(SSO)的技術(shù)被越來(lái)越廣泛地運(yùn)用到各個(gè)領(lǐng)域的軟件系統(tǒng)當(dāng)中。本文從業(yè)務(wù)的角度分析了單點(diǎn)登錄的需求和應(yīng)用領(lǐng)域;從技術(shù)本身的角度分析了單點(diǎn)登錄技術(shù)的部機(jī)制和實(shí)現(xiàn)手段,并且給出Web-SSO和桌面SSO的實(shí)現(xiàn)、源代碼和詳細(xì)講解;還從安全和性能的角度對(duì)現(xiàn)有的實(shí)現(xiàn)技術(shù)進(jìn)行進(jìn)一步分析,指出相應(yīng)的風(fēng)險(xiǎn)和需要改進(jìn)的方面。本文除了從多個(gè)方面和角度給出了對(duì)單點(diǎn)登錄(SSO)的全面分析,還并且討論了如何將現(xiàn)有的應(yīng)用和SSO服務(wù)結(jié)合起來(lái),能夠幫助應(yīng)用架構(gòu)師和系統(tǒng)分析人員從本質(zhì)上認(rèn)識(shí)單點(diǎn)登錄,從而更好地設(shè)計(jì)出符合需要的安全架構(gòu)。 關(guān)鍵字:SSO, Jav
70、a, J2EE, JAAS 1 什么是單點(diǎn)登陸 單點(diǎn)登錄(Single Sign On),簡(jiǎn)稱為 SSO,是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。 較大的企業(yè)部,一般都有很多的業(yè)務(wù)支持系統(tǒng)為其提供相應(yīng)的管理和IT服 務(wù)。例如財(cái)務(wù)系統(tǒng)為財(cái)務(wù)人員提供財(cái)務(wù)的管理、計(jì)算和報(bào)表服務(wù);人事系統(tǒng)為人事部門提供全公司人員的維護(hù)服務(wù);各種業(yè)務(wù)系統(tǒng)為公司部不同的業(yè)務(wù)提供不同的 服務(wù)等等。這些系統(tǒng)的目的都是讓計(jì)算機(jī)來(lái)進(jìn)行復(fù)雜繁瑣的計(jì)算工作,來(lái)替代人力的手工勞動(dòng),提高工作效率和質(zhì)量。這些不同的系統(tǒng)往往
71、是在不同的時(shí)期建設(shè)起來(lái) 的,運(yùn)行在不同的平臺(tái)上;也許是由不同廠商開發(fā),使用了各種不同的技術(shù)和標(biāo)準(zhǔn)。如果舉例說(shuō)國(guó)一著名的IT公司(名字隱去),部共有60多個(gè)業(yè)務(wù)系統(tǒng),這些系統(tǒng)包括兩個(gè)不同版本的SAP的ERP系統(tǒng),12個(gè)不同類型和版本的數(shù)據(jù)庫(kù)系統(tǒng),8個(gè)不同類型和版本的操作系統(tǒng),以與使用了3種不同的防火墻技術(shù),還有數(shù)十種互相不能兼容的協(xié)議和標(biāo)準(zhǔn),你相信嗎?不要懷疑,這種情況其實(shí)非常普遍。每一個(gè)應(yīng)用系統(tǒng)在運(yùn)行了數(shù)年以后,都會(huì)成為不可替換的企業(yè)IT架構(gòu)的一部分,如下圖所示。 隨 著企業(yè)的發(fā)展,業(yè)務(wù)系統(tǒng)的數(shù)量在不斷的增加,老的系統(tǒng)卻不能輕易的替換,這會(huì)帶來(lái)很多的開銷。其一是管理上的開銷,需要維護(hù)
72、的系統(tǒng)越來(lái)越多。很多系統(tǒng)的數(shù) 據(jù)是相互冗余和重復(fù)的,數(shù)據(jù)的不一致性會(huì)給管理工作帶來(lái)很大的壓力。業(yè)務(wù)和業(yè)務(wù)之間的相關(guān)性也越來(lái)越大,例如公司的計(jì)費(fèi)系統(tǒng)和財(cái)務(wù)系統(tǒng),財(cái)務(wù)系統(tǒng)和人事系 統(tǒng)之間都不可避免的有著密切的關(guān)系。 為了降低管理的消耗,最大限度的重用已有投資的系統(tǒng),很多企業(yè)都在進(jìn)行著企業(yè)應(yīng)用集成(EAI)。 企業(yè)應(yīng)用集成可以在不同層面上進(jìn)行:例如在數(shù)據(jù)存儲(chǔ)層面上的“數(shù)據(jù)大集中”,在傳輸層面上的“通用數(shù)據(jù)交換平臺(tái)”,在應(yīng)用層面上的“業(yè)務(wù)流程整合”,和用 戶界面上的“通用企業(yè)門戶”等等。事實(shí)上,還用一個(gè)層面上的集成變得越來(lái)越重要,那就是“身份認(rèn)證”的整合,也就是“單點(diǎn)登錄”。 通常
73、來(lái)說(shuō),每個(gè)單獨(dú)的系統(tǒng)都會(huì)有自己的安全體系和身份認(rèn)證系統(tǒng)。整合以前,進(jìn)入每個(gè)系統(tǒng)都需要進(jìn)行登錄,這樣的局面不僅給管理上帶來(lái)了很大的困難,在安全方面也埋下了重大的隱患。下面是一些著名的調(diào)查公司顯示的統(tǒng)計(jì)數(shù)據(jù): 用戶每天平均 16 分鐘花在身份驗(yàn)證任務(wù)上 - 資料來(lái)源: IDS 頻繁的 IT 用戶平均有 21 個(gè)密碼 - 資料來(lái)源: NTA Monitor Password Survey 49% 的人寫下了其密碼,而 67% 的人很少改變它們 每 79 秒出現(xiàn)一起身份被竊事件 - 資料來(lái)源:National Small Business Travel Asso
74、c 全球欺騙損失每年約 12B - 資料來(lái)源:Comm Fraud Control Assoc 到 2007 年,身份管理市場(chǎng)將成倍增長(zhǎng)至 $4.5B - 資料來(lái)源:IDS 使用“單點(diǎn)登錄”整合后,只需要登錄一次就可以進(jìn)入多個(gè)系統(tǒng),而不需要重新登錄,這不僅僅帶來(lái)了更好的用戶體驗(yàn),更重要的是降低了安全的風(fēng)險(xiǎn)和管理的消耗。請(qǐng)看下面的統(tǒng)計(jì)數(shù)據(jù): 提高 IT 效率:對(duì)于每 1000 個(gè)受管用戶,每用戶可節(jié)省$70K 幫助臺(tái)呼叫減少至少1/3,對(duì)于 10K 員工的公司,每年可以節(jié)省每用戶 $75,或者合計(jì) $648K 生產(chǎn)力提高:每個(gè)新員工可節(jié)
75、省 $1K,每個(gè)老員工可節(jié)省 $350 資料來(lái)源:Giga ROI 回報(bào):7.5 到 13 個(gè)月 資料來(lái)源:Gartner 另外,使用“單點(diǎn)登錄”還是SOA時(shí)代的需求之一。在面向服務(wù)的架構(gòu)中,服務(wù)和服務(wù)之間,程序和程序之間的通訊大量存在,服務(wù)之間的安全認(rèn)證是SOA應(yīng)用的難點(diǎn)之一,應(yīng)此建立“單點(diǎn)登錄”的系統(tǒng)體系能夠大大簡(jiǎn)化SOA的安全問(wèn)題,提高服務(wù)之間的合作效率。 2 單點(diǎn)登陸的技術(shù)實(shí)現(xiàn)機(jī)制 隨著SSO技術(shù)的流行,SSO的產(chǎn)品也是滿天飛揚(yáng)。所有著名的軟件廠商都提供了相應(yīng)的解決方案。在這里我并不想介紹自己公司(Sun Microsystems)的產(chǎn)品,而是對(duì)
76、SSO技術(shù)本身進(jìn)行解析,并且提供自己開發(fā)這一類產(chǎn)品的方法和簡(jiǎn)單演示。有關(guān)我寫這篇文章的目的,請(qǐng)參考我的博客(yuwang881.blog.sohu./3184816.html)。 單 點(diǎn)登錄的機(jī)制其實(shí)是比較簡(jiǎn)單的,用一個(gè)現(xiàn)實(shí)中的例子做比較。頤和園是著名的旅游景點(diǎn),也是我常去的地方。在頤和園部有許多獨(dú)立的景點(diǎn),例如“ 街”、“佛香閣”和“德和園”,都可以在各個(gè)景點(diǎn)門口單獨(dú)買票。很多游客需要游玩所有德景點(diǎn),這種買票方式很不方便,需要在每個(gè)景點(diǎn)門口排隊(duì)買票,錢包拿 進(jìn)拿出的,容易丟失,很不安全。于是絕大多數(shù)游客選擇在大門口買一通票(也叫套票),就可以玩遍所有的景點(diǎn)而不需要重新再買票。他們只
77、需要在每個(gè)景點(diǎn)門 口出示一下剛才買的套票就能夠被允許進(jìn)入每個(gè)獨(dú)立的景點(diǎn)。 單點(diǎn)登錄的機(jī)制也一樣,如下圖所示,當(dāng)用戶第一次訪問(wèn)應(yīng)用系統(tǒng)1的時(shí)候,因?yàn)檫€沒(méi)有登錄,會(huì)被引導(dǎo)到認(rèn)證系統(tǒng)中進(jìn)行登錄(1);根據(jù)用戶提供的登錄信息,認(rèn)證系統(tǒng)進(jìn)行身份效驗(yàn),如果通過(guò)效驗(yàn),應(yīng)該返回給用戶一個(gè)認(rèn)證的憑據(jù)ticket(2);用戶再訪問(wèn)別的應(yīng)用的時(shí)候(3,5)就會(huì)將這個(gè)ticket帶上,作為自己認(rèn)證的憑據(jù),應(yīng)用系統(tǒng)接受到請(qǐng)求之后會(huì)把ticket送到認(rèn)證系統(tǒng)進(jìn)行效驗(yàn),檢查ticket的合法性(4,6)。如果通過(guò)效驗(yàn),用戶就可以在不用再次登錄的情況下訪問(wèn)應(yīng)用系統(tǒng)2和應(yīng)用系統(tǒng)3了。 從上面的視圖可以看出,
78、要實(shí)現(xiàn)SSO,需要以下主要的功能: 所有應(yīng)用系統(tǒng)共享一個(gè)身份認(rèn)證系統(tǒng)。 統(tǒng)一的認(rèn)證系統(tǒng)是SSO的前提之一。認(rèn)證系統(tǒng)的主要功能是將用戶的登錄信息和用戶信息庫(kù)相比較,對(duì)用戶進(jìn)行登錄認(rèn)證;認(rèn)證成功后,認(rèn)證系統(tǒng)應(yīng)該生成統(tǒng)一的認(rèn)證標(biāo)志(ticket),返還給用戶。另外,認(rèn)證系統(tǒng)還應(yīng)該對(duì)ticket進(jìn)行效驗(yàn),判斷其有效性。 所有應(yīng)用系統(tǒng)能夠識(shí)別和提取ticket信息 要實(shí)現(xiàn)SSO的功能,讓用戶只登錄一次,就必須讓應(yīng)用系統(tǒng)能夠識(shí)別已經(jīng)登錄過(guò)的用戶。應(yīng)用系統(tǒng)應(yīng)該能對(duì)ticket進(jìn)行識(shí)別和提取,通過(guò)與認(rèn)證系統(tǒng)的通訊,能自動(dòng)判斷當(dāng)前用戶是否登錄過(guò),從而完成單點(diǎn)登錄的功能。&
79、#160;上面的功能只是一個(gè)非常簡(jiǎn)單的SSO架構(gòu),在現(xiàn)實(shí)情況下的SSO有著更加復(fù)雜的結(jié)構(gòu)。有兩點(diǎn)需要指出的是: 單一的用戶信息數(shù)據(jù)庫(kù)并不是必須的,有許多系統(tǒng)不能將所有的用戶信息都集中存儲(chǔ),應(yīng)該允許用戶信息放置在不同的存儲(chǔ)中,如下圖所示。事實(shí)上,只要統(tǒng)一認(rèn)證系統(tǒng),統(tǒng)一ticket的產(chǎn)生和效驗(yàn),無(wú)論用戶信息存儲(chǔ)在什么地方,都能實(shí)現(xiàn)單點(diǎn)登錄。 統(tǒng)一的認(rèn)證系統(tǒng)并不是說(shuō)只有單個(gè)的認(rèn)證服務(wù)器,如下圖所示,整個(gè)系統(tǒng)可以存在兩個(gè)以上的認(rèn)證服務(wù)器,這些服務(wù)器甚至可以是不同的產(chǎn)品。認(rèn)證服務(wù)器之間要通過(guò)標(biāo)準(zhǔn)的通訊協(xié)議,互相交換認(rèn)證信息,就能完成更高級(jí)別的單點(diǎn)登錄。如下圖,當(dāng)用戶在訪問(wèn)應(yīng)用系統(tǒng)1時(shí)
80、,由第一個(gè)認(rèn)證服務(wù)器進(jìn)行認(rèn)證后,得到由此服務(wù)器產(chǎn)生的ticket。當(dāng)他訪問(wèn)應(yīng)用系統(tǒng)4的時(shí)候,認(rèn)證服務(wù)器2能夠識(shí)別此ticket是由第一個(gè)服務(wù)器產(chǎn)生的,通過(guò)認(rèn)證服務(wù)器之間標(biāo)準(zhǔn)的通訊協(xié)議(例如SAML)來(lái)交換認(rèn)證信息,仍然能夠完成SSO的功能。 3 WEB-SSO的實(shí)現(xiàn) 隨著互聯(lián)網(wǎng)的高速發(fā)展,WEB應(yīng)用幾乎統(tǒng)治了絕大部分的軟件應(yīng)用系統(tǒng),因此WEB-SSO是SSO應(yīng)用當(dāng)中最為流行。WEB-SSO有其自身的特點(diǎn)和優(yōu)勢(shì),實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單易用。很多商業(yè)軟件和開源軟件都有對(duì)WEB-SSO的實(shí)現(xiàn)。其中值得一提的是OpenSSO ( s:/),為用Java實(shí)現(xiàn)WEB-SSO提供架構(gòu)指南和服務(wù)
81、指南,為用戶自己來(lái)實(shí)現(xiàn)WEB-SSO提供了理論的依據(jù)和實(shí)現(xiàn)的方法。 為什么說(shuō)WEB-SSO比較容易實(shí)現(xiàn)呢?這是有WEB應(yīng)用自身的特點(diǎn)決定的。 眾所周知,Web協(xié)議(也就是 )是一個(gè)無(wú)狀態(tài)的協(xié)議。一個(gè)Web應(yīng)用由很多個(gè)Web頁(yè)面組成,每個(gè)頁(yè)面都有唯一的URL來(lái)定義。用戶在瀏覽器的地址欄輸入頁(yè)面的URL,瀏覽器就會(huì)向Web Server去發(fā)送請(qǐng)求。如下圖,瀏覽器向Web服務(wù)器發(fā)送了兩個(gè)請(qǐng)求,申請(qǐng)了兩個(gè)頁(yè)面。這兩個(gè)頁(yè)面的請(qǐng)分別使用了兩個(gè)單獨(dú)的 連接。所謂無(wú)狀態(tài)的協(xié)議也就是表現(xiàn)在這里,瀏覽器和Web服務(wù)器會(huì)在第一個(gè)請(qǐng)求完成以后關(guān)閉連接通道,在第二個(gè)請(qǐng)求的時(shí)候重新建立連接。Web服務(wù)
82、器并不區(qū)分哪個(gè)請(qǐng)求來(lái)自哪個(gè)客戶端,對(duì)所有的請(qǐng)求都一視,都是單獨(dú)的連接。這樣的方式大大區(qū)別于傳統(tǒng)的(Client/Server)C/S結(jié)構(gòu),在那樣的應(yīng)用中,客戶端和服務(wù)器端會(huì)建立一個(gè)長(zhǎng)時(shí)間的專用的連接通道。正是因?yàn)橛辛藷o(wú)狀態(tài)的特性,每個(gè)連接資源能夠很快被其他客戶端所重用,一臺(tái)Web服務(wù)器才能夠同時(shí)服務(wù)于成千上萬(wàn)的客戶端。 但是我們通常的應(yīng)用是有狀態(tài)的。先不用提不同應(yīng)用之間的SSO,在同一個(gè)應(yīng)用中也需要保存用戶的登錄身份信息。例如用戶在訪問(wèn)頁(yè)面1的時(shí)候進(jìn)行了登錄,但是剛才也提到,客戶端的每個(gè)請(qǐng)求都是單獨(dú)的連接,當(dāng)客戶再次訪問(wèn)頁(yè)面2的時(shí)候,如何才能告訴Web服務(wù)器,客戶剛才已經(jīng)登錄過(guò)了呢?
83、瀏覽器和服務(wù)器之間有約定:通過(guò)使用cookie技術(shù)來(lái)維護(hù)應(yīng)用的狀態(tài)。Cookie是可以被Web服務(wù)器設(shè)置的字符串,并且可以保存在瀏覽器中。如下圖所示,當(dāng)瀏覽器訪問(wèn)了頁(yè)面1時(shí),web服務(wù)器設(shè)置了一個(gè)cookie,并將這個(gè)cookie和頁(yè)面1一起返回給瀏覽器,瀏覽器接到cookie之后,就會(huì)保存起來(lái),在它訪問(wèn)頁(yè)面2的時(shí)候會(huì)把這個(gè)cookie也帶上,Web服務(wù)器接到請(qǐng)求時(shí)也能讀出cookie的值,根據(jù)cookie值的容就可以判斷和恢復(fù)一些用戶的信息狀態(tài)。 Web-SSO完全可以利用Cookie結(jié)束來(lái)完成用戶登錄信息的保存,將瀏覽器中的Cookie和上文中的Ticket結(jié)合起來(lái),完成SSO的
84、功能。 為了完成一個(gè)簡(jiǎn)單的SSO的功能,需要兩個(gè)部分的合作: 統(tǒng)一的身份認(rèn)證服務(wù)。 修改Web應(yīng)用,使得每個(gè)應(yīng)用都通過(guò)這個(gè)統(tǒng)一的認(rèn)證服務(wù)來(lái)進(jìn)行身份效驗(yàn)。 3.1 Web SSO 的樣例 根據(jù)上面的原理,我用J2EE的技術(shù)(JSP和Servlet)完成了一個(gè)具有Web-SSO的簡(jiǎn)單樣例。樣例包含一個(gè)身份認(rèn)證的服務(wù)器和兩個(gè)簡(jiǎn)單的Web應(yīng)用,使得這兩個(gè) Web應(yīng)用通過(guò)統(tǒng)一的身份認(rèn)證服務(wù)來(lái)完成Web-SSO的功能。此樣例所有的源代碼和二進(jìn)制代碼都可以從地址 下載。 樣例下載、安裝部署和運(yùn)行指南: Web-SSO的樣例是由三個(gè)標(biāo)準(zhǔn)Web應(yīng)用組成,壓縮成三個(gè)zip文件,從 Application Server 8, oss 4等)。另外,身份認(rèn)證服務(wù)需要JDK1.5的運(yùn)行環(huán)境。之所以要用JDK1.5是因?yàn)楣P者使用了一個(gè)線程安全的高性能的Java集合類“ConcurrentMap”,只有在JDK1.5中才有。 這三個(gè)Web應(yīng)用完全可以單獨(dú)部署,它們可以分別部署在不同的機(jī)器,不同的操作系統(tǒng)和不同的J2EE的產(chǎn)品上,它們完全是標(biāo)準(zhǔn)的和平臺(tái)無(wú)關(guān)的應(yīng)用。但是有一個(gè)限制,那兩臺(tái)部署應(yīng)用(demo1、demo2)的機(jī)器的域名需要一樣,這在后面的章節(jié)中會(huì)解釋到cookie
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣密條施工方案
- 尿素脫硝施工方案
- 陜西財(cái)稅知識(shí)培訓(xùn)課件
- 第2單元第2節(jié)《人機(jī)的互動(dòng)》教學(xué)設(shè)計(jì) 2023-2024學(xué)年粵教清華版初中信息技術(shù)七年級(jí)下冊(cè)
- 光伏材料合同范例
- 合同范本運(yùn)用方法
- 年度創(chuàng)新思維與實(shí)踐分享計(jì)劃
- 產(chǎn)品定價(jià)和利潤(rùn)計(jì)劃
- 精細(xì)化管理在急診科的應(yīng)用計(jì)劃
- 安徽省合肥市長(zhǎng)豐縣七年級(jí)生物上冊(cè) 1.1.1 生物的特征教學(xué)實(shí)錄2 (新版)新人教版
- 設(shè)計(jì)變更工作流程(附設(shè)計(jì)變更申請(qǐng)表)
- 婦女保健知識(shí)講座
- 執(zhí)行申請(qǐng)書范本電子版
- 小學(xué)高年級(jí)《紅樓春趣》劇本(寧波實(shí)驗(yàn)學(xué)校)
- 安徽省縣域?qū)W前教育普及普惠督導(dǎo)評(píng)估指標(biāo)體系
- 第二章-英國(guó)學(xué)前教育
- 國(guó)家職業(yè)技能鑒定考試-高級(jí)機(jī)修鉗工題庫(kù)
- 315國(guó)際消費(fèi)者權(quán)益保護(hù)日知識(shí)講座課件
- 2023年二手房買賣合同正式版
- 2例不良事件根因分析
- YS/T 269-2008丁基鈉(鉀)黃藥
評(píng)論
0/150
提交評(píng)論