WebLogic Server的Identity Assertion時間:2011-02-06 00:07來源:dev2dev 作者:Sudhir Upadhyay 點擊:182次本文詳細(xì)介紹了BEA WebLogic Server 如何提供一種機(jī)制來通過Identity Assertion執(zhí)行周邊身份驗證。當(dāng)前端訪問管理器執(zhí)行身份驗證,,而多個后端服務(wù)器相信來自前端的請求是經(jīng)過認(rèn)證的,,并且不需要額外身份驗證時,這種 方法就非常有用,。 應(yīng)用服務(wù)器根據(jù)Web應(yīng)用程序部署描述文件中定義的安 全約束來授權(quán)用戶,。然而,在已配置安全約束用于提供身份驗證之前,,Web容器需要確定用戶經(jīng)過了身份驗證才能開始工作,。也就是說,前端訪問管理器需要提供 一些信息給后端Web容器,,以保證Web容器不會試圖重新認(rèn)證經(jīng)過身份驗證的用戶,。要實現(xiàn)這一點,前端訪問管理器可能需要把用戶憑證(用戶名/密碼)交給 后端服務(wù)器,。然而,,這會由于下面兩個原因受挫: 在典型部署中,前端身份管理軟件和后端應(yīng)用服務(wù)器之間的連接不通過安全套接字層(SSL),,這意味著用戶證書將以非加密的純文本形式傳遞,。 簡介 從高級觀點出發(fā),Identity Assertion是通過從前端訪問管理器向后端應(yīng)用服務(wù)器傳遞令牌來實現(xiàn)的,。從根本上來說,,斷言是關(guān)于主體(比如用戶)的一些事實(陳述)的聲明。令牌 是從一個系統(tǒng)傳到另一系統(tǒng)的一條信息,,它可被用于確認(rèn)某個特定用戶的身份,。令牌和斷言相結(jié)合,即構(gòu)成了Identity Assertion的基礎(chǔ),。本質(zhì)上,,Identity Assertion提供程序是一種特殊的身份驗證形式,它讓用戶或系統(tǒng)流程能使用令牌進(jìn)行身份斷言,。 Web應(yīng)用程序安全 在介紹Identity Assertion的實現(xiàn)細(xì)節(jié)前,,讓我們簡要說明Web應(yīng)用程序安全模式的原理。servlet規(guī) 范提供了通過servlet容器實現(xiàn)Web應(yīng)用程序安全的指導(dǎo)方針,。規(guī)范指定的兩種安全形式是聲明性的和程序性的,。當(dāng)Web應(yīng)用程序安全為聲明性時,安全 性通過部署符(web.xml)在應(yīng)用程序之外進(jìn)行配置,。身份驗證方法,,或者說提示用戶登錄的方法,將通過Web描述符文件web.xml中 的<login-config>元素來指定,。如果登錄配置出現(xiàn)并且包含一個不為零的值,,在訪問任何<security- constraint>約束的資源之前,用戶必須進(jìn)行身份驗證,。 當(dāng)用戶試圖訪問受保護(hù)的Web資源時,,Web容器就會激活身份驗證機(jī)制,該身份驗證機(jī)制已經(jīng)為部署描述文件(web.xml)中的資源進(jìn)行了配置,,它位于<login-config>元素內(nèi)部的<auth-method>標(biāo)簽之間,,就像這樣: <login-config><auth-method>BASIC</auth-method></login-config> 以下是實現(xiàn)Web應(yīng)用程序安全的有效身份驗證方法: NONE:不提示用戶進(jìn)行身份驗證。 Web應(yīng)用程序部署 圖1代表Web應(yīng) 用程序常用的部署模型,。如圖所示,當(dāng)用戶試圖訪問受保護(hù)的Web應(yīng)用程序時,,前端訪問管理器將對這些用戶進(jìn)行身份驗證,,并把認(rèn)證過的用戶路由到后端應(yīng)用服 務(wù)器。如果Web應(yīng)用程序在部署描述文件中定義了安全約束而且角色/屬性存儲在目錄服務(wù)器上,,servlet容器調(diào)用安全API從底層目錄獲得用戶/組的 信息,。 讓我們大概了解一下有效用戶訪問受保護(hù)資源必須經(jīng)過的步驟,如部署模型中所示,。 用戶請求受保護(hù)的Web資源,。 令牌概述 令牌主要是兩方之間傳遞的秘密代碼,。本質(zhì)上,,令牌是關(guān)于主體的斷言或聲明,該主體被斷言方看作是聲明性的(可信任的),。當(dāng)接收方收到令牌,,它會進(jìn)行一組 操作驗證傳入的令牌。如果令牌被驗證過,,就假定請求來自可信任的資源,,接收方就不會進(jìn)行額外的身份驗證。在典型的Web環(huán)境中,,令牌是通過HTTP頭部或 cookie傳遞的,。 在當(dāng)前實現(xiàn)中,WebLogic Server 的默認(rèn)Identity Assertion 提供程序支持下列令牌:X.509,、CSI.PrincipalName,、CSI.ITTAnonymous 和CSI.X509CertChain CSI.DistinguishedName?!爸С帧绷钆祁愋捅举|(zhì)上意味著Identity Assertion 提供程序的運行時類(也就是IdentityAsserter SSPI實現(xiàn))能用assertIdentity方法來驗證令牌類型,。 由于上述令牌可能無法滿足所有應(yīng)用程序的需求,您可以為自己的環(huán)境輕松地建立新的自定義令牌,。建立自定義令牌需要編寫自定義Identity Assertion 提供程序,,該程序能實現(xiàn)IdentityAsserter Security Service Provider Interface (SSPI)。WebLogic Server 的SSPI 提供了開發(fā)自定義安全提供程序的途徑。自定義令牌類型可以像一段字符串那樣簡單,。例如,,在Custom Identity Assertion Provider Implementation中定義下列代碼片段,也就定義了一種新的令牌類型,。 public final static String MY_TOKEN_TYPE = "MyCustomIAToken"; 定義了新的令牌類型后,,可以按BEA產(chǎn)品文檔中描述的WebLogic Console 一樣,對其進(jìn)行配置,。一旦配置完成并進(jìn)行了激活,這些令牌就可被WebLogic Security 架構(gòu)用于斷言傳入請求的身份,。 序列圖 圖2給出了執(zhí)行Identity Assertion 期間的步驟順序: Web應(yīng)用程序部署過程中,,Web容器首先確定Web應(yīng)用程序的身份驗證方法被配置為CLIENT-CERT。 有一點很重要,Identity Assertion不受到JAAS 的保護(hù),也就是說JAAS對實現(xiàn)Identity Assertion不提供任何特定的指導(dǎo),。Assertion和JAAS唯一的關(guān)聯(lián)是Identity Assertion 的實現(xiàn)返回一個javax.security.auth.callback.CallbackHandler(http://java./j2se/1.4.2/docs/api/javax/security/ auth/callback/CallbackHandler.html),。 您可能會想起,當(dāng) JAAS LoginModule 需要與用戶通信時(例如,,要求用戶輸入用戶名和密碼),,它是通過調(diào)用CallBackHandler 實現(xiàn)的。然后CallBackHandler()方法生成適當(dāng)?shù)?CallBack 來獲得請求的信息,。在Identity Assertion的情況下,,自定義安全提供程序驗證請求中傳遞的令牌是有效的,隨后生成唯一的NameCallBack,。 多重身份驗證機(jī)制 在本文前面,,我們回顧了Web應(yīng)用程序安全模型。在登錄配置中關(guān)于指定身份驗證方法的問題之 一是,,在某個指定時間,,一個Web應(yīng)用程序只能配置一個身份驗證方法。然而在某些情況下,,需要從多個源為用戶提供服務(wù),,也就是說,來自包含已定義令牌的可 信任來源(前端訪問管理器)的用戶和那些不是來自可信任來源的用戶,??赡馨▉碜詢?nèi)部網(wǎng)絡(luò)的用戶,他們可以直接訪問應(yīng)用服務(wù)器,。換句話說,,依賴于請求的來 源,servlet 安全實現(xiàn)可能需要生成兩種不同的CallBackHandlers,。然而,,servlet 規(guī)范中沒有規(guī)定允許多重身份驗證方法。這需要調(diào)用特定于Web容器提供程序的編程式解決方案,。正如我前面指出的,,WebLogic 為Web應(yīng)用程序內(nèi)部的程序式身份驗證提供weblogic.servlet.security.ServletAuthentication。 ServletAuthentication 方法為身份驗證提供了兩種重要的方法: weak():從請求中獲取用戶名和密碼后,,為AUTHENTICATED或FAILED_AUTHENTICATION返回一個int值,,對該用戶進(jìn)行認(rèn)證,并將其設(shè)置到會話中,。 替代解決方案 Identity Assertion不是這個問題唯一可行的解決方案。其他解決方案包括在兩方之間傳遞共享秘鑰(或令牌),。在這種情況下,發(fā)送方和接收方要事先都同意共享 的秘鑰,。如果帶有正確共享秘鑰值的請求到達(dá)時,,接收方就能相信請求是來自可信任來源并允許訪問底層資源。 其他解決方案諸如基于IP的信任也可以在此使用,。在這種情況下,,在請求被授權(quán)進(jìn)行訪問之前,應(yīng)用程序會檢查請求是否來自預(yù)配置的,、可信任的IP地址,。通常是DMZ中Web服務(wù)器的IP。 結(jié)束語 本文詳細(xì)介紹了BEA WebLogic Server 如何提供一種機(jī)制來通過Identity Assertion執(zhí)行周邊身份驗證,。當(dāng)前端訪問管理器執(zhí)行身份驗證,,而多個后端服務(wù)器相信來自前端的請求是經(jīng)過認(rèn)證的,并且不需要額外身份驗證時,,這種 方法就非常有用,。 |
|