最近花了較多時(shí)間學(xué)習(xí)單點(diǎn)登陸以及相關(guān)的安全技術(shù),做一個(gè)簡單的總結(jié),發(fā)表我的一些看法。拋磚引玉,希望各位朋友參與討論。

          單點(diǎn)登陸,鳥語原文為Single Sign-On,縮寫為SSO。別以為單點(diǎn)登陸是很時(shí)髦高深的技術(shù),相反單點(diǎn)登陸是很古老的技術(shù),例如1980年kerberos v4發(fā)布,一直發(fā)展至今,被Windows、Mac OS X、Linux等流行的操作系統(tǒng)所采用,是為應(yīng)用最廣泛的單點(diǎn)登陸技術(shù)。

          kerberos適用于局域網(wǎng),十分成熟。互聯(lián)網(wǎng)發(fā)展之后,多個(gè)網(wǎng)站需要統(tǒng)一認(rèn)證,業(yè)界需要適合互聯(lián)網(wǎng)的單點(diǎn)登陸技術(shù),也就是WEB SSO。2002年,微軟提出了passport服務(wù),由微軟統(tǒng)一提供帳號(hào)和認(rèn)證服務(wù),理所當(dāng)然,大家都不愿意受制于微軟,但是很認(rèn)同微軟提出WEB SSO理念,于是產(chǎn)生了Liberty Alliance,另外指定一套標(biāo)準(zhǔn),這套標(biāo)準(zhǔn)發(fā)展起來就是SAML,目前SAML的版本是SAML V2,屬于OASIS的標(biāo)準(zhǔn)。

          --------------
          SAML

          SAML,鳥語全名為Security Assertion Markup Language,彌漫著學(xué)院派的腐尸味道,縮寫十分怪異,令人望而生畏。計(jì)算機(jī)行業(yè),向來崇尚時(shí)髦,SAML這一名稱使得其較少受到大眾程序員的關(guān)注。

          SAML的標(biāo)準(zhǔn)制定者,來自SUN、BEA、IBM、RSA、AOL、Boeing等大公司,制定技術(shù)規(guī)范相當(dāng)專業(yè)有水準(zhǔn),系統(tǒng)分層合理,抽象了幾個(gè)概念把整個(gè)系統(tǒng)描述得很清楚,使用流行技術(shù)XML Schema來描述協(xié)議,使用到了XML-Sign和XML Encrypt等較為前緣XML安全技術(shù)。

          SAML的基本部分包括Protocol、Bingding、Profile、Metadata、AuthenticationContext。其中Protocol是交互消息的格式,例如AuthnRuequest/Response(認(rèn)證請(qǐng)求/響應(yīng))的消息對(duì)。Bingding是指協(xié)議所采用的傳輸方式,例如使用HTTP Redirect或HTTP POST或SOAP的方式傳輸Protocol中所定義的消息。Profile是系統(tǒng)角色間交互消息的各種場景,例如Web Single Sign-ON是一種Profile、Single Sign-Out也是一種Profile、身份聯(lián)邦也是一種Profile。各個(gè)參與方所提供的服務(wù)的描述信息為metadata。系統(tǒng)的認(rèn)證方法通常是千差萬別的,AuthenticationContext是SAML中定義的認(rèn)證擴(kuò)展點(diǎn),可以是最普通的User Password認(rèn)證,也可以是kerberos認(rèn)證,也可以是電信常用的RADIUS,或者是動(dòng)態(tài)密碼卡。

          SAML在Java企業(yè)應(yīng)用中,得到廣泛支持,IBM、BEA、ORACLE、SUN的Java應(yīng)用服務(wù)器都提供了SAML的支持,曾經(jīng)有人說,SAML就是如同JDBC一樣,將會(huì)是使系統(tǒng)集成的準(zhǔn)入證。SAML有很多開源實(shí)現(xiàn),包括SUN公司的Open SSO,不幸的是,這些開源實(shí)現(xiàn)都不夠好,或者相當(dāng)糟糕,如果我們需要支持SAML協(xié)議,可能需要在開源的版本上裁剪或者另行開發(fā)。

          SAML考慮了Web SSO,也考慮了傳統(tǒng)的SSO集成,包括Kerberos和LDAP的集成,其中Attributed擴(kuò)展機(jī)制以及相關(guān)規(guī)范,使得SAML擁有良好的擴(kuò)展性,很好集成傳統(tǒng)協(xié)議和支持新協(xié)議。

          SAML是一個(gè)定義良好的規(guī)范,概念清晰,分層合理,擴(kuò)展性良好,一切都很棒,但是有一點(diǎn)不好,就是曲高和寡!

          -------------
          OpenID
          有一些互聯(lián)網(wǎng)公司,擁有眾多很多帳號(hào),很牛B,例如GOOGLE、YAHOO、Facebook,希望別人的系統(tǒng)使用它們的帳號(hào)登陸。他們希望一種足夠簡單的WEB SSO規(guī)范,于是選擇一種草根網(wǎng)絡(luò)協(xié)議OpenID。OpenID,名字取得好,顧名思義,一看就知道它是干嘛的。國內(nèi)也有它的Fans,例如豆瓣網(wǎng)。openID的確足夠簡單,但是協(xié)議本身是不完善,可能需要一些補(bǔ)充協(xié)議才能夠滿足業(yè)務(wù)需求。例如GOOGLE采用OpenID + OAuth。目前支持OpenID有Yahoo、Google、Windows Live,還有號(hào)稱要支持OpenID的Facebook。目前Yahoo和Google宣稱對(duì)OpenID的支持,但是其實(shí)是有限制的,Yahoo的OpenID只有少數(shù)合作伙伴才能獲得其屬性,Google也只有在其Google Apps中才能獲得賬號(hào)的Attribute。用戶賬號(hào)畢竟是一個(gè)互聯(lián)網(wǎng)公司的最寶貴資源,希望他們完全分享賬號(hào)是不可能的。

          Open ID和SAML兩種規(guī)范,都將會(huì)減少系統(tǒng)間交互的成本,我們提供Open API時(shí),應(yīng)該支持其中一種或者或兩種規(guī)范。

          --------------
          OAuth

          oAuth涉及到3大塊的交互和通信。1. 用戶,2. 擁有用戶資料/資源的服務(wù)器A,3. 求資源的服務(wù)器B,。

          oAuth的典型應(yīng)用場景(senario)
          以前,用戶在 擁有資源 的的網(wǎng)站A有一大堆東西;現(xiàn)在用戶發(fā)現(xiàn)了一個(gè)新的網(wǎng)站B,比較好玩,但是這個(gè)新的網(wǎng)站B想調(diào)用 擁有資源的網(wǎng)站A的數(shù)據(jù)。

          用戶在 求資源的網(wǎng)站B 上,點(diǎn)擊一個(gè)URL,跳轉(zhuǎn)到 擁有 資源的網(wǎng)站A。
          擁有資源的網(wǎng)站A提示:你需要把資源分享給B網(wǎng)站嗎?Yes/No。
          用戶點(diǎn)擊 Yes,擁有資源的網(wǎng)站A 給 求資源的網(wǎng)站B 臨時(shí)/永久 開一個(gè)通道,然后 求資源的網(wǎng)站 就可以來 擁有資源的網(wǎng)站 抓取所需的信息了。
          (參考資料:http://initiative.yo2.cn/archives/633801)
          (摘抄)
          --------------

          內(nèi)部系統(tǒng)間集成使用LDAP、Kerberos,外部系統(tǒng)集成使用SAML或者OpenID + OAuth,這是一種建議的模式。

          ------------
          PAM

          人們尋找一種方案:一方面,將鑒別功能從應(yīng)用中獨(dú)立出來,單獨(dú)進(jìn)行模塊化設(shè)計(jì),實(shí)現(xiàn)和維護(hù);另一方面,為這些鑒別模塊建立標(biāo)準(zhǔn) API,以便各應(yīng)用程序能方便的使用它們提供的各種功能;同時(shí),鑒別機(jī)制對(duì)其上層用戶(包括應(yīng)用程序和最終用戶)是透明的。直到 1995 年,SUN 的研究人員提出了一種滿足以上需求的方案--插件式鑒別模塊(PAM)機(jī)制并首次在其操作系統(tǒng) Solaris 2.3 上部分實(shí)現(xiàn)。插件式鑒別模塊(PAM)機(jī)制采用模塊化設(shè)計(jì)和插件功能,使得我們可以輕易地在應(yīng)用程序中插入新的鑒別模塊或替換原先的組件,而不必對(duì)應(yīng)用程序做任何修改,從而使軟件的定制、維持和升級(jí)更加輕松--因?yàn)殍b別機(jī)制與應(yīng)用程序之間相對(duì)獨(dú)立。應(yīng)用程序可以通過 PAM API 方便的使用 PAM 提供的各種鑒別功能,而不必了解太多的底層細(xì)節(jié)。此外,PAM的易用性也較強(qiáng),主要表現(xiàn)在它對(duì)上層屏蔽了鑒別的具體細(xì)節(jié),所以用戶不必被迫學(xué)習(xí)各種各樣的鑒別方式,也不必記住多個(gè)口令;又由于它實(shí)現(xiàn)了多鑒別機(jī)制的集成問題,所以單個(gè)程序可以輕易集成多種鑒別機(jī)制如 Kerberos 鑒別機(jī)制和 Diffie - Hellman 鑒別機(jī)制等,但用戶仍可以用同一個(gè)口令登錄而感覺不到采取了各種不同鑒別方法。PAM 后來被標(biāo)準(zhǔn)化為 X/Open UNIX® 標(biāo)準(zhǔn)化流程(在 X/Open 單點(diǎn)登錄服務(wù)(XSSO)架構(gòu)中)的一部分。(摘抄)

          如果我們?cè)O(shè)計(jì)一個(gè)認(rèn)證系統(tǒng),PAM是應(yīng)該參考借鑒的。

          -------------
          JAAS
          Java Authentication Authorization Service(JAAS,Java驗(yàn)證和授權(quán)API)提供了靈活和可伸縮的機(jī)制來保證客戶端或服務(wù)器端的Java程序。Java早期的安全框架強(qiáng)調(diào)的是通過驗(yàn)證代碼的來源和作者,保護(hù)用戶避免受到下載下來的代碼的攻擊。JAAS強(qiáng)調(diào)的是通過驗(yàn)證誰在運(yùn)行代碼以及他/她的權(quán)限來保護(hù)系統(tǒng)面受用戶的攻擊。它讓你能夠?qū)⒁恍?biāo)準(zhǔn)的安全機(jī)制,例如Solaris NIS(網(wǎng)絡(luò)信息服務(wù))、Windows NT、LDAP(輕量目錄存取協(xié)議),Kerberos等通過一種通用的,可配置的方式集成到系統(tǒng)中。在客戶端使用JAAS很簡單。在服務(wù)器端使用JAAS時(shí)情況要復(fù)雜一些。(摘抄)

          -------------
          Spring Security,Spring框架大名鼎鼎,Spring Security屬于SpringFramework旗下的一個(gè)子項(xiàng)目,源自acegi 1.x發(fā)展起來。很多人項(xiàng)目應(yīng)用了spring security,但我個(gè)人看來,spring security絕對(duì)不算是一個(gè)設(shè)計(jì)良好的安全框架。其設(shè)計(jì)感覺就是一個(gè)小項(xiàng)目的安全認(rèn)證實(shí)踐罷了。

          -------------
          CAS
          應(yīng)用最廣的開源單點(diǎn)登陸實(shí)現(xiàn)了,其實(shí)現(xiàn)模仿Kerberos的一些概念,例如KDC、TGS等等,都是來自于Kerberos。CAS對(duì)SAML和OpenID協(xié)議支持得不夠好。個(gè)人感覺類似Kerberos的機(jī)制在互聯(lián)網(wǎng)中可能過于復(fù)雜了。我感覺單純的ticket機(jī)制,過于局限于基于加密解密的安全了,感覺上SAML的Assertion概念更好,Assertion可以包括認(rèn)證、授權(quán)以及屬性信息。

          -------------


          --------------------------
          09博客園紀(jì)念T恤
          新聞:Wordpress發(fā)布實(shí)時(shí)RSS技術(shù) 推動(dòng)實(shí)時(shí)網(wǎng)絡(luò)發(fā)展
          網(wǎng)站導(dǎo)航: 博客園首頁  個(gè)人主頁  新聞  社區(qū)  博問  閃存  找找看
          posted on 2009-09-09 01:17 溫少的日志 閱讀(677) 評(píng)論(1)  編輯  收藏
          Comments

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 平原县| 新泰市| 建德市| 平舆县| 托克逊县| 长子县| 乃东县| 霍州市| 开阳县| 温泉县| 长春市| 北碚区| 涞水县| 青冈县| 泉州市| 长海县| 庆元县| 萝北县| 奉新县| 锡林浩特市| 桓台县| 南江县| 西平县| 寿阳县| 洛南县| 韶山市| 十堰市| 山西省| 醴陵市| 新河县| 江油市| 太仆寺旗| 神池县| 清镇市| 玛纳斯县| 平度市| 民乐县| 惠安县| 桂平市| 通江县| 称多县|