?

基于SAML的單點登錄技術在校園網中的應用研究及實現*

2013-09-13 04:08楊艷明
楚雄師范學院學報 2013年9期
關鍵詞:斷言權威消息

楊艷明

(楚雄師范學院計算機信息管理中心,云南 楚雄 675000)

1.引言

隨著計算機技術和通信技術的發展,單點登錄 (SSO)技術也得到了越來越廣泛的使用,在各種應用系統中提高安全性和方便性,通過相互之間交換安全信息,單點登錄可以實現同一用戶對不同系統的訪問,而不需要對用戶進行多次認證,這不僅提高了應用程序的安全性,也方便了用戶,提高了工作效率。針對我校校園網的實際情況,本文提出了一種.NET平臺下基于SAML的單點登錄系統,并實現其主要部分,以期在校園網中得到應用。

2.系統結構

2.1 主要組成部分

根據SAML規范進行設計,可以將基于SAML的單點登錄系統劃分為SAML權威、應用系統和用戶代理三個部分:SAML權威是安全信息的提供方,也稱為認證服務器,是單點登錄系統的核心,是服務的提供者;應用系統向用戶提供某種資源或服務,它由兩個部分組成:負責提供服務的應用程序和用來實現單點登錄功能的單點登錄客戶端程序;用戶代理一般是指瀏覽器,在本系統中可以使用各種常見的瀏覽器,但要求瀏覽器支持TLS1.0或者SSL3.0,可以保證信息傳輸過程中的安全。根據設計,本系統共使用了SAML規范中的SAML認證請求協議、HTTP POST、HTTP重定向 (即Redirect)和HTTP輔件綁定等技術。

2.2 處理流程

在該系統中,用戶可以首先訪問SAML權威來認證自己的身份,也可以不認證就直接訪問Web應用程序。Web應用程序會對接受到的所有訪問請求進行檢查,對于尚未通過認證的用戶,就把請求重新定向給SAML權威,要求它對該用戶進行認證。詳細處理流程如下:

(1)用戶代理向應用系統發送HTTP請求消息,請求訪問相關資源;

(2)為了對請求進行響應,收到請求的應用系統會返回一個含有輔件或者<AuthnRequest>消息的HTTP應答消息,而用戶代理則會將該消息轉發到SAML權威處。該消息或應答會被用戶代理轉發給SAML權威;

(3)按照SAML規范所定義的規則,SAML權威應處理所收到的<AuthnRequest>消息;

(4)SAML權威可以使用某種特定方法來識別用戶的身份。為了正確識別用戶,SAML權威還需要建立用戶的身份標識,如果建立失敗則需要返回錯誤信息給發送請求的應用程序;

(5)認證完成后,SAML權威會給用戶代理發回一個<Response>消息,用戶代理再將該消息轉發到應用程序處。在此過程中,消息的傳輸可以使用HTTP POST或者HTTP輔件綁定來實現。不管<AuthnRequest>消息處理結果是成功還是失敗,SAML權威都應該生成含有輔件或者<Response>消息的HTTP應答消息并將其發回給用戶代理,而該消息最終會被轉發到需要對用戶身份進行識別的應用系統處;

(6)最后,應用系統將會對所收到的來自SAML權威的應答消息進行處理,檢查<Response>中所包含的各個斷言元素,并根據其包含的信息來判定是否應該同意或拒絕用戶對系統中資源的訪問請求。

2.3 SAML斷言及認證請求

在SAML規范中,斷言是一個重要的內容,它封裝了描述用戶的安全信息,除了作為其主要成分的聲明 (分為認證聲明和屬性聲明兩種)外,斷言還包含有相關約束條件和其他內容。斷言包含有ID、IssueInstant和Version三個屬性:ID是斷言的標識符,可以在引用某個斷言的時候使用它,屬于XML模型中定義的ID類型;IssueInstant是SAML斷言發布的時間,采用CCYY-MM-DDThh:mm:ss的格式,字符T是日期和時間之間的分隔符;屬性Version則指明該斷言所遵循的SAML規范的版本。

在本系統中還使用了SAML規范定義的認證請求協議。作為請求者和依賴方,需要對用戶進行認證的應用系統首先向SAML權威發送請求認證消息<AuthnRequest>;而作為應答者和斷言方,SAML權威在收到請求認證消息后對用戶身份進行認證,并在認證結束后根據結果返回<Response>消息。

(1)請求認證消息<AuthnRequest>

在請求認證消息<AuthnRequest>中,應用系統可以根據需要加入SAML規范中允許的任何信息。在SAML權威對其中所包含的信息進行處理過程中,必須遵循SAML規范的規則。若SAML權威未能正確回復請求認證消息,則必須返回一個包含合適狀態信息的<Response>消息。另外,<AuthnRequest>消息還可能包含數字簽名,如果雙方使用HTTP輔件綁定的方式,則可以自由選擇是否進行認證,如果要認證也可以使用HTTP輔件綁定所允許的任何一種方法。

(2)認證應答消息<Response>

若<AuthnRequest>消息請求成功,則SAML權威必須返回一個應答消息<Response>,該消息至少要包含一個斷言元素<Assertion>和一個認證聲明元素<AuthnStatement>,而且在斷言中的<Issuer>部分必須包含能唯一標識發布斷言的SAML權威的信息。如果SAML權威的目的只是返回一個錯誤信息,則不能將任何斷言放在<Response>消息中。

3.SAML權威

SAML權威是本系統的核心部分,它主要完成兩個功能:一是采用合適的方法確認用戶的身份,并向用戶提供訪問各個Web應用系統的入口;二是向各個Web應用系統提供所需的SAML斷言,使得這些Web應用系統能夠對用戶的訪問進行有效地控制。

3.1 認證用戶身份

本模塊的主要功能是認證用戶身份,根據需要還可能會使用到其他模塊提供的服務。在本系統中,使用了用戶名和密碼的方式來認證用戶,為了進一步提高認證功能的安全性,還要求瀏覽器和認證服務程序都支持SSL3.0或者TLS1.0,這樣就可以減少用戶安全信息在傳輸過程中泄露的可能性,降低了系統遭受惡意攻擊的概率。同時,為了在以后的擴展中使用其他的強認證機制來提高系統的安全性,如PKI、Kerberos等,系統也留下了相關的編程接口。為了對用戶的身份進行驗證,系統還需要使用數據庫來保存各個用戶的安全信息和具有的屬性。另一方面,各個Web應用系統則在收到SAML斷言后,會根據用戶所具有的屬性來決定是否允許其對站內服務和資源的訪問。

3.2 生成SAML斷言

本模塊的主要功能是根據請求生成相應的SAML斷言。為了生成正確的斷言,需要同時使用數據庫中保存的用戶信息和系統相關信息。在斷言生成操作中,首先要按照用戶的標識符從數據庫中獲取用戶信息,并結合用戶信息和系統級信息生成合適的能夠描述用戶屬性的斷言,然后就要使用SAML斷言管理模塊提供的程序將新生成的斷言注冊到系統中,接下來就由該模塊對斷言進行管理了。

3.3 管理SAML斷言

本模塊的主要功能是管理SAML斷言及和它一起配合使用的輔件數據,具體包括注冊斷言和輔件數據、查詢或者刪除它們。SAML斷言是具有有效期的,在有效期內斷言可以被Web應用系統使用任意次,但超出有效期就不能使用了。在本系統中,使用了數據庫來存儲斷言和輔件數據artifact,這樣可以獲得更好的效率。

3.4 處理SAML協議消息

在SAML規范中,對于如何在SAML權威和Web應用系統之間交換SAML斷言提供了詳細的協議,而且還定義了協議的消息結構和完備的處理規則。這些斷言交換協議都是采用請求-應答的方式,客戶端先發送一條請求消息,服務器端收到請求消息后,會按照預先定義的規則來處理請求,并根據處理結果返回相應的SAML斷言 (處理成功)或者錯誤信息 (處理失敗)。為了共享描述用戶的安全信息,作為服務器端的SAML權威和作為客戶端的Web應用系統需要使用這些協議。本系統中,SAML權威和Web應用系統使用了SAML規范中定義的兩個協議:輔件artifact處理協議和斷言獲取協議。

該模塊通過消息傳輸模塊接收客戶端發送來的ArtifactResolve消息和AssertionIDRequest消息,進行合適的處理后,生成相應的ArtifactResponse消息或者Response消息返回給客戶端。收到請求消息后,如果是加密過的則要進行解密操作,然后對其有效性進行驗證,如驗證簽名、驗證有效期和執行SAML規范中定義的其他需要的驗證工作。成功通過驗證的請求消息才能進入下一個處理環節,否則就會被當作無效消息而丟棄掉。完成請求消息的驗證工作后,本模塊會使用請求消息中的參數到SAML斷言管理模塊處獲取客戶端需要的SAML斷言。如果獲取成功,正確的斷言就會被作為ArtifactResponse或者Response消息的一部分經由消息傳輸模塊返回給客戶端。

SAML協議消息是按照XML格式編寫的,但在消息傳輸模塊處就被轉換成了具體編程語言能夠操作的數據結構,這樣就減輕了消息處理模塊的工作負擔。反之,消息處理模塊生成的應答消息也會被消息傳輸模塊轉換成XML格式。

3.5 通過SOAP進行消息傳輸

消息傳輸模塊負責與具體的傳輸協議如SOAP、HTTP等的綁定操作,并通過建立好的綁定傳輸以XML格式組織的SAML協議消息。消息傳輸模塊從SAML協議消息處理模塊處得到以編程語言可處理的數據結構封裝的SAML協議消息,進行相應處理轉換成XML格式后,通過所綁定的傳輸協議發送出去。同時,消息傳輸模塊通過綁定的傳輸協議接收客戶端發送來的信息,然后解析轉換成編程語言可處理的數據結構,并把它交給SAML協議消息處理模塊。

在本系統中,通過SOAP over HTTP的綁定方式,使用Web Service的模式來實現SAML協議消息的交換。Web應用系統向SAML權威提出請求,使用其提供的服務,并根據請求處理結果得到不同的信息。

4.SSO客戶端

SSO客戶端程序包含在需要使用單點登錄服務的每一個Web應用系統中,它代表Web應用系統向SAML權威提出服務請求,并將封裝在返回消息中的SAML斷言取出來交Web應用系統。SSO客戶端包含三個組成部分:SAML斷言處理模塊、SAML協議消息處理模塊和消息傳輸模塊,三個模塊之間分工協作,共同完成連接SAML權威和Web應用系統、實現用戶在多個系統之間只登錄一次就可以隨意訪問的目的。

SSO客戶端所實現的主要功能是向SAML權威請求SAML斷言,并進行初步處理后將其交給Web應用系統。為了實現這一目的,SSO客戶端需要和SAML權威進行通信,它首先向服務器發送包含ArtifactResolve或AssertionIDRequest消息的訪問請求,該請求中的參數指明了所需的SAML斷言;收到客戶端的請求消息后,服務器進行相應的處理,并將處理結果發回給客戶端。SSO客戶端會對收到的信息進行解析處理,并將其中包含的斷言信息傳遞給Web應用系統。

4.1 通過SOAP進行消息傳輸

客戶端消息傳輸模塊的功能和實現機制與服務器端消息傳輸模塊一致,此處不再贅述,相關內容請查閱本文3.5節。

4.2 處理SAML協議消息

本模塊的主要功能包括以下兩個方面:1)按照提供的輔件信息生成對應的ArtifactResolve或AssertionIDRequest消息,并將其交給消息傳輸模塊;2)接收消息傳輸模塊轉交來的ArtifactResponse或Response消息,解析出封裝在其中的SAML斷言并將其交給后面的SAML斷言處理模塊。如果收到的消息是加密過的,則先進行解密操作,然后執行簽名驗證、有效期驗證及其他SAML規范支持的驗證操作。成功通過驗證操作的消息才會被交個斷言處理模塊,沒有通過驗證的則視為無效信息被丟棄。

4.3 處理SAML斷言

SAML斷言處理模塊的功能是從接收到的斷言信息中解析出封裝的用戶安全信息,并將其傳遞給需要對用戶進行驗證的Web應用系統。有些斷言可能具有數字簽名或有效性限制條件,還可能是經過加密的,本模塊需要根據不同的情況執行合適的操作:帶有數字簽名的,需要對數字簽名的有效性進行驗證,確定簽名者的可信任度;帶有有效性限制的,需要根據SAML規范執行驗證操作,只有處理結果為有效的斷言才能被Web應用系統使用;對于加過密的斷言,需要根據加密技術進行解密。處理完成后,本模塊還需要將斷言轉換成Web應用系統可以直接使用的格式。

5.SAML權威的實現

SAML權威有多個組成部分,分別完成不同的任務,通過協作來實現系統的總體功能,根據各個模塊任務的特點應該使用不同的技術來實現。

(1)用戶認證模塊的任務是確認用戶的真實身份,是整個應用程序邏輯的入口,可以使用ASP.NET WEB應用程序來實現;

(2)生成、管理及處理SAML斷言和處理SAML協議消息這幾個模塊會被其他模塊調用,所以可以實現為動態連接庫,并在部署應用程序時將其包含在內。這幾個模塊可以將其實現為類庫,打包部署在.NET框架中;

(3)由于WEB服務中使用了SOAP技術,可以在相互之間傳遞XML格式的斷言信息。因此,消息傳輸模塊也可以實現為ASP.NET WEB服務的形式;

(4)所有數據均存儲在數據庫中,方便執行保存、查詢、更新和刪除操作,同時也能提高管理效率和方便性。在本系統中,有用戶基本信息、用戶屬性信息和SAML斷言需要保存。

5.1 用戶認證模塊的實現

本模塊是整個系統的入口,需要和用戶進行交互以獲取用戶的身份信息并進行驗證。根據前面的分析,本模塊將使用ASP.NET Web技術來實現,包含系統流程控制、登錄驗證和Web應用程序入口三個部分。

(1)系統流程控制

本組件首先接收來自用戶的訪問請求,并根據請求中攜帶的信息和用戶會話判斷請求所屬的類別。在這里,我們把用戶的請求分為五類:1)用戶已經輸入名稱和密碼,請求登錄,可以直接將請求轉發給登錄驗證組件;2)用戶已經成功登錄,請求訪問某個Web應用系統,可以直接將請求轉發給Web應用程序入口組件;3)用戶已經成功登錄,請求注銷登錄狀態,需要結束用戶會話并將關聯的日志信息保存到數據庫中,然后將用戶重定向到登錄頁面;4)用戶是首次訪問,請求中也沒有攜帶其他任何數據,則直接將用戶定向到登錄頁面;5)用戶是首次訪問,但訪問請求是由Web應用系統轉發來的,其中包含了轉發者的標識信息 (URI),可以先將Web應用系統的標識信息存儲在會話中,然后再將用戶定向到登錄頁面。

(2)登錄驗證

本組件負責對用戶的身份進行確認,驗證過程中使用的是用戶名和密碼信息。如果數據庫中不存在該用戶名或者用戶存在但密碼不對,則驗證失敗,需要向用戶返回錯誤頁面;反之則登錄成功。用戶登錄成功后,系統就會生成描述用戶安全信息的SAML斷言及輔助信息,然后將用戶請求傳遞給Web應用程序入口。

(3)Web應用程序入口

本組件向成功登錄的用戶顯示所有集成到系統中的Web應用程序列表,提供訪問入口。如果用戶請求是由登錄組件發送過來的,則需要將數據庫中存儲的用戶可以訪問的所有Web應用程序信息查詢出來,和用戶請求一起顯示給用戶。如果用戶請求是由某個Web應用程序轉發過來的,則需要調用SAML斷言管理模塊來生成本次請求的輔件,并將其隨訪問請求一起發送給Web應用程序。

5.2 生成和管理SAML斷言

(1)生成斷言

為了描述SAML斷言及其各種組成部分,系統中設計了一系列的類,如Assertion類、AuthnStatement類、AttributeStatement類、Conditions類、Issuer類、Subject類、AuthnContext類、Attribute類、AudienceRestriction類、ProxyRestriction類和NameID類等。各類的關系見下圖:

所有的類都有各自的方法和屬性,包含了對應XML元素的子元素和屬性等信息,而其方法則提供了一種訪問屬性的手段。在每個類中,都提供了一個名為toXML()的方法,它可以將類中包含的信息轉換成對應的XML文檔。另外,還有一個名為AssertionFactory的類,專門負責生成所需的SAML斷言。

(2)管理斷言

為了對斷言進行管理,需要提供插入新斷言、刪除斷言和查找斷言等功能。另外,客戶登錄過程中用來獲取斷言的輔件,也需要在本模塊中生成。

AssertionManager類負責對斷言進行管理,它提供了相應的方法來完成各種操作:openConnection()方法可以連接數據庫、closeConnect()方法可以斷開已經連接的數據庫、saveAssertion()方法可以把斷言保存到數據庫中、GetArtifact()方法可以生成并保存輔件。另外,該類還有一些方法可以對用戶事件是否有效、斷言是否超出有效期等方面進行驗證。其中,斷言管理工作的重點是查詢,SAML協議消息處理模塊會經常調用此功能來獲取所需的斷言。

5.3 處理SAML協議消息

本模塊的任務是接收由傳輸模塊轉發來的SAML協議消息,并根據需要從數據庫中取出斷言,然后生成對應的應答消息交給傳輸模塊。

本模塊的功能主要由MessageParser類來實現,它負責將XML格式的協議消息轉換成對應的C#類對象。轉換工作的結果是一個ArtifactResolve類對象,里面包含了請求信息。然后,由MessageFactory類對轉換后的協議消息進行有效性驗證,驗證通過則繼續進行處理,否則直接向傳輸模塊發送不包含任何斷言信息的ArtifactResponse消息。

5.4 傳輸模塊

SAML協議信息的傳輸由AssertionService類完成,是一個Web服務程序。該類屬于Sbsso.Protocol名稱空間,超類是System.Web.Service名稱空間下的WebService類。由于其繼承關系,此Web服務可以使用任何地方定義的ASP.NET標準對象。

6.SSO客戶端的實現

6.1 數據傳輸

Web應用程序中的SSO客戶端程序負責接收來自協議消息處理模塊的SAML協議數據,將其封裝在SOAP協議數據單元中,然后調用對應的Web服務進行傳輸,并接收對方返回的應答消息,轉交給協議數據處理模塊。

6.2 SAML協議消息處理

SAML協議消息處理模塊完成兩個方面的工作:生成請求消息和解析應答消息。為了向SAML權威請求描述用戶安全信息的SAML斷言,SSO客戶端會先生成一個SAML協議消息。反之,收到SAML權威返回的應答消息后,也需要進行相應的解析處理,取出封裝在里面的協議消息。

SSO客戶端給SAML權威發送的信息封裝在AssertionIDRequest類和類ArtifactResolve對象中,指明了所請求斷言的輔件信息或者斷言ID引用。與此對應,SAML權威返回的Response或者ArtifactResponse應答消息會由ResponseParser類的方法將其轉換成相應的C#類對象。

6.3 處理SAML斷言

需要對斷言進行兩個方面的處理:1)對于加了密或者使用了數字簽名的斷言,可以按照XML加密規范和XML簽名規則進行對應的處理;2)如果SAML斷言封裝在C#類對象中,則要進行有效性嚴整,驗證通過則返回其中包含的信息,驗證失敗則返回空的斷言。有效性驗證的內容包括三個方面:1)驗證斷言的有效期;2)作為斷言接收方的SSO客戶端是否位于有效的接收者名單中;3)斷言的使用次數是一次還是多次,有沒有超出次數限制。

AssertionValidate類負責對斷言進行有效性驗證,它提供了對應的方法來執行這些操作。

7.系統部署

根據上以的設計及實現方法,結合我校實際,可做如下部署:

(1)SAML權威的部署

作為聯合身份認證的關鍵部分,SAML權威應部署于校園網內獨立服務器中,并最大限度地保證服務器的安全。用戶信息和斷言的存儲采用數據庫技術,可選用適合的數據庫產品進行存儲,如SQL Server等。由于本系統采用C#作為開發語言,因此,SAML權威服務器上應安裝.NET Framework平臺和IIS軟件,并部署相應ASP.NET Web應用程序和ASP.NET Web服務。

(2)單點登錄客戶端的部署

單點登錄客戶端應分別安裝于各個Web應用系統中。由于目前只實現了.NET版本,所以只支持ASP.NET應用程序的單點登錄。如果要支持其他技術實現的應用系統,則必須先開發單點登錄客戶端的相應語言版本。

[1]Scott Cantor,John Kemp,Rob Philpott,Eve Maler.Assertions and Protocols for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://doc.oasis-open.org/security/saml/V2.0/saml-core-2.0-os.pdf.

[2]Scott Cantor,Frederick Hirsch,John Kemp,Rob Philpot.Env Maler,Bindings for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://doc.oasis-open.org/security/saml/V2.0/saml-bindings-2.0-os.pdf.

[3]John Hughes,Scott Cantor,Jeff Hodges,Frederick Hirsch,Prateek Mishra,Rob Philpott,Eve Maler.Profiles for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://doc.oasis-open.org/seeurity/saml/V2.0/saml-profiles-2.0-os.pdf.

[4]John Kemp,Prateek Mishra,Rob Philpott,Eve Maler.Authentication Context for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis- open.org/committees/documents.php?wg_abbrev=security.

[5]Frederick Hirsch,Rob Philpott,Eve Maler.Security and Privacy Considerations for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis-open.org/committees/documents.php?wg_abbrev=security.

[6]Prateek Mishra,Rob Philpott,Eve Maler.Conformance Requirements for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis-open.org/committees/documents.php?wg_abbrev=security.

[7]Jeff Hodges,Rob Philpott,Eve Maler.Glossary for the OASIS Security Assertion Markup Language(SAML)V2.0[EB/OL].http://www.oasis-open.org/commi ttees/documents.php?wg_abbrev=security.

猜你喜歡
斷言權威消息
von Neumann 代數上保持混合三重η-*-積的非線性映射
C3-和C4-臨界連通圖的結構
各大權威媒體聚焦流翔高鈣
一張圖看5G消息
Top Republic of Korea's animal rights group slammed for destroying dogs
跟蹤督察:工作干得實 權威立得起
權威發布
路、圈的Mycielskian圖的反魔術標號
權威的影子
消息
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合