摘 要: 結合跨域統一身份認證的基礎技術平臺Shibboleth和跨域統一身份認證的技術標準SAML,設計出跨校統一身份認證系統。該系統可實現用戶“異地訪問—本地認證”功能,避免了異地認證的繁瑣,簡化了業務流程;身份聯盟各子系統交互采用SAML標準,有效地保證了系統通信的安全,保障了用戶的隱私,滿足了應用管理的需求。
關鍵詞: 身份認證;單點登錄;統一身份認證;身份聯盟
隨著技術的發展,越來越多的大學、公司以及政府機構都通過網絡對外提供資源、服務,并且彼此協作日益緊密、信息共享日益頻繁。例如,大學之間的“跨校選課”、“共享圖書資源”等。因此簡化這些業務中身份認證的流程,同時做到安全高效成為迫切需要解決的問題。
1 Shibboleth簡介
Shibboleth是Internet2/MACE項目之一,得到了IBM的技術和資金支持。Shibboleth是一個使用標準語言描述的體系結構和策略框架,支持安全Web資源和服務共享[1]。
Shibboleth主要針對分布式資源如何有效訪問的問題。與其他系統的區別在于Shibboleth將認證模塊放在客戶端,資源提供者只需進行少量的驗證工作,極大地減輕了資源提供者的負擔,簡化了訪問程序、提高了訪問資源的效率、安全性得到了保證。在系統擴展方面,Shibboleth采用了SAML規范,同時也在SAML上作了改進,保證了系統的可擴展性。
Shibboleth主要由3個部分組成:
(1)Origin
對應Identity Provider(IdP),身份提供端。主要作用是向資源提供者提供用戶的屬性,以便使資源服務器根據其屬性對操作進行判決響應。
(2)Target
對應Resource/Service Provider,資源/服務提供端。主要作用是響應用戶的資源請求,并向該用戶所在的Origin查詢用戶的屬性,然后根據屬性做出允許或拒絕訪問資源的決策。
(3)WAYF
WAYF是Where Are You From的首字母簡稱。SHIRE使用WAYF來進行大部分初始化工作。WAYF組件知道每一個Origin端句柄服務器的名稱和位置。其主要功能是將Origin端站點名稱映射到HS信息上。WAYF的另一個作用是為用戶查詢HS并將句柄發送給SHIRE。WAYF通過與用戶打交道,詢問“你從哪來”,用戶輸入組織名稱,WAYF便在用戶組織的名稱與HS的URL之間進行映射。
2 SAML簡介
安全斷言標記語言SAML(Security Assertion Markup Language)提供了一個健壯的、可擴展的數據格式集,在各種環境下交換數據和身份識別信息。SAML將所有與檢索、傳輸和共享安全信息相關的功能標準轉化為以下形式[2]:
(1)為用戶提供XML安全信息格式,請求、傳輸信息的格式。
(2)定義這些消息與SOAP(Simple Object Access Protocol)等協議協作的方式。
(3)為像Web SSO(Single Sign-On)類似的常見用例定義精確的消息交換。
(4)支持多種隱私保護機制,包括在不披露用戶身份的情況下確定用戶屬性的功能。
(5)詳述在Unix、Microsoft Windows、X509、LDAP、DCE和XCML技術所提供的格式中處理身份信息的方法。
(6)提供系統的元數據機制,使得所有參與的系統能就所支持的SAML選項進行通信。
SAML的設計特別關注了靈活性,當遇到標準尚未涵蓋的需求時,可以擴展。其所描述的環境包括3個角色,如圖1所示,即信任方(Service Provider)、斷言方(Identity Provider)和主題(與身份信息相關的用戶)。
IdP與SP通過SAML消息傳送用戶的身份認證和屬性等信息。SAML消息定義了2種重要的語句:(1)身份驗證語句,關于該主題在何時何地、使用何種身份進行過驗證的報告。SAML提供了超過20種不同身份驗證方法的詳細定義。身份驗證語句支持SSO,其中IdP代表SP進行登錄。(2)屬性語句,包含了與主題有關的屬性。屬性語句中典型的屬性是組和角色。
SAML定義了一組XML格式的請求和應答消息,SP可使用這些消息直接獲取斷言[3]。請求會指定SP需要的信息,例如“所有張曉明的屬性”,應答消息返回1個或多個匹配請求的斷言。為使不同的產品能夠交互操作,SAML的SOAP綁定詳細說明了怎樣在SOAP消息體中傳送信息。SAML還為支持聯盟身份環境提供了其他許多有用的機制:(1)協議允許SP確定通過將來自幾個可能IdP的特定用戶請求指示到何處;(2)協議允許2個IdP將他們各自擁有的同一個用戶賬戶關聯在一起(需用戶許可)。另外,SAML還支持加密全部斷言(也可選擇加密其敏感部分)、指定一個斷言的目標用戶等功能。
3 Shibboleth在本系統中的作用
(1)系統將基于Shibboleth的框架進行開發,但不完全使用Shibboleth,需要根據用戶的實際需求對其進行改造。
(2)Shibboleth構成跨域統一身份認證系統的核心部分,包括IdP、SP和WAYF組成的整個跨域統一身份認證系統的架構。
(3)通過將Shibboleth的IdP組件與各個學校的統一身份認證系統集成,將身份數據的管理和身份憑據的認證交給各個學校自身的統一身份認證系統。跨域認證中心只是作為跨域認證的索引,并不維護任何身份數據。
4 跨校統一身份認證系統的實現
4.1 跨校統一身份認證系統設計
該身份認證系統可分為3個子系統,身份提供方IdP(Identity Provider)、服務提供方SP(Service Provider)和身份聯盟中心FC(Federation Centre)。這3個子系統在實現聯盟認證時,工作原理與Shibboleth基本相同。下面從實現用戶身份聯盟認證的角度介紹這3個子系統的結構、工作機制以及交互方式。
4.1.1 身份提供方(IdP)
IdP是負責認證用戶身份和提供用戶認證、屬性信息的實體,它需要維護3個模塊,即單點登錄認證系統、數據庫系統和Shibboleth的IdP組件。
4.1.1.1 單點登錄認證系統
單點登錄認證系統(Single Sign-On Authentication System)是源組織的SSO認證系統,負責響應用戶的身份認證請求并生成SSO Token[4]。加入身份聯盟的先決條件就是源組織已經可以實現統一身份認證,在此基礎上,源組織無須對SSO認證系統做出變動。目前使用較多SSO系統有SUN、Oracle、IBM、Microsoft等廠商推出的統一身份認證系統,身份聯盟系統都將提供很好的兼容。
4.1.1.2 認證數據庫和用戶屬性數據庫
認證數據庫(Authentication DB)是源組織SSO認證系統的一部分,為SSO提供認證數據并直接服務于單點登錄認證系統。
用戶屬性數據庫(User DB)主要為Shibboleth的IdP組件服務,它存儲了身份聯盟系統所需要的用戶屬性信息。
4.1.1.3 Shibboleth的IdP組件
Shibooleth的IdP組件主要工作單元分為句柄服務器HS(Handle Server)和屬性中心AA(Attribute Authority)2個部分。
(1)句柄服務器(HS)
用戶通過源組織的SSO認證后,HS根據用戶瀏覽器中cookie值頒發身份聯盟的認證句柄作為用戶在聯盟中的身份憑據。獲得認證句柄的過程既可以通過用戶瀏覽器的Browser/POST和Browser/Artifact方式來實現,也可以通過SAML中的身份驗證斷言(Authentication Assertion)來實現。SAML定義了<samlp:AuthenticationQuery或<samlp:AssertionIDReference>字段的<samlp:Request>消息,通過它可以得到用戶身份認證的斷言(Assertion),從中獲取句柄信息。用戶獲得句柄后就獲得了訪問聯盟中服務提供方的合法身份。
(2)屬性中心(AA)
AA為服務提供方(SP)提供用戶相關的屬性信息,這些信息又可分類為用戶固有屬性信息和用戶訪問策略信息。用戶固有屬性信息存儲在用戶屬性數據庫(User DB)的數據中;用戶訪問策略信息則是由屬性中心的屬性釋放策略ARP(Attribute Release Policy)提供的XML配置文件,包含了指定用戶是否可以訪問指定資源的決策信息。ARP文件定義了一系列的默認策略,同時也支持用戶配置策略,用戶配置策略的制定工作將統一交由身份聯盟中心(FC)負責。
AA與SP通信也是基于SAML系統。服務提供方的屬性請求器(Attribute Requester)可以利用SAML中定義的包含<samlp:AttributeQuery>字段的<samlp:Request>消息來發送屬性請求,屬性中心通過<saml:SubjectConfirmation>來確認屬性請求器的身份是否合法(該步驟可選),如果屬性請求器是可信的,屬性中心將發送包含<samlp:AttributeStatement>字段的<samlp:Response>斷言作為應答。屬性請求器解析<samlp:Response>斷言就可以得到SP所需要的用戶固有屬性或訪問策略定義。
4.1.2 服務提供方(SP)
SP是提供基于Web的服務、應用或資源的實體,通過安全的途徑實現資源的授權訪問和個性化服務。主要包含2個模塊:mod_shib模塊和SHAR模塊。
4.1.2.1 mod_shib模塊
mod_shib是Shibboleth用于集成到SP Apache服務器的一個擴展模塊,負責根據IdP提供的用戶訪問策略和本地訪問控制策略對資源進行訪問控制。
4.1.2.2 SHAR模塊
SHAR(Shibboleth Attribute Requester)是運行在服務提供方服務器上的一個后臺程序,負責向IdP請求用戶屬性相關的信息并處理響應消息。實際上SHAR是與IdP的屬性中心AA配合工作的,當SP需要用戶屬性信息時,SHAR將以通過認證后獲得的句柄(Handle)為憑據,向AA發送屬性請求的SAML消息,AA返回屬性查詢結果,交由SHAR解析作為mod_shib模塊實現訪問控制的依據。
4.1.3 身份聯盟中心(FC)
FC的主要功能是用于用戶的源組織選擇,即當用戶訪問非源組織資源需要認證時,將由FC提供源組織定位服務。該功能主要基于Shibboleth的Service Discovery組件,也可稱為WAYF服務。另外,本項目中的FC還根據需求提出了資源注冊、計費、審計等輔助功能。
WAYF服務在Shibboleth結構中是一個可選組件,采用集中的方式讓用戶選擇自己所在的源組織。
WAYF服務必須支持Shibboleth的認證請求方式,即瀏覽器Browser/POST和Browser/Artifact認證請求方式或者SAML認證請求方式,目的是為了協調源組織的SSO服務和身份聯盟系統中的SSO服務。WAYF實際上充當了各源組織SSO服務的中介,使各源組織的SSO在整個身份聯盟系統中都具有有效性。
4.2 跨校統一身份認證系統框架
4.2.1 全局架構設計
(1)每個高校都具有雙重身份:既是服務提供者(SP),又是身份提供者(IdP)。
(2)存在一個Discovery服務(即WAYF服務),當用戶沒有經過認證而訪問SP時,由Discovery確定用戶應該到哪個IdP去進行身份驗證。
整體邏輯架構[5]說明如圖2所示。
4.2.2 單一高校內部的系統架構設計
為了更清楚地說明整個邏輯架構,圖3所示為各個高校的內部邏輯架構圖。
高校內部邏輯架構[6]說明:
(1)高校中的IdP基于原有的身份認證系統,在原有系統基礎上加入2個IdP組件:認證憑據和屬性憑據。
(2)高校的SP提供并保護高校的受控資源,在受控資源之上增加3個SP組件:斷言接受器、屬性請求器和訪問控制器。1個SP可以保護多個受控資源。
4.2.3 聯盟認證過程
4.2.3.1 用戶未登錄時訪問高校A的資源(系統視角)
場景:用戶第一次訪問高校A的受控資源如圖4、圖5、圖6所示。
用戶訪問某一高校受控資源步驟如下:
(1)用戶向高校A提出訪問請求。
(2)高校A的斷言接受器發現該用戶未認證,將請求重定向給聯盟認證中心的WAYF服務器。
(3)WAYF服務器將學校選擇界面發送給用戶,讓用戶選擇所能認證的IdP。
用戶訪問某一高交的Jdp步驟如下:
(1)用戶選擇高校A后,提交給WAYF。
(2)WAYF重定向到高校A的認證服務。
(3)高校A的認證服務發現用戶尚未登錄,將請求定向到SSO服務。
(4)SSO服務向用戶發出高校A的認證登錄界面。
用戶進行身份認證的過程步驟如下:
(1)用戶輸入用戶名口令,向高校A的IdP認證登錄。
(2)高校A的SSO服務對用戶認證,通過后生成Ticket(用戶A通過認證后的證明),交給瀏覽器。
(3)請求重定向到高校A的認證服務,該認證服務到SSO服務上去驗證之前生成的Ticket。
(4)SSO服務驗證Ticket,通過后將用戶的userId交給認證服務。
(5)認證服務將userId交給認證憑據。
(6)認證憑據為該用戶產生一個nameId,這是整個聯盟認證過程中用戶的唯一標識,并將該nameId返回給認證服務。
(7)認證服務將nameId發還給瀏覽器,瀏覽器再次訪問高校A的SP。
(8)高校A的斷言接受器接受認證后用戶的請求,傳給屬性請求器。
(9)屬性請求器根據來訪用戶的nameId,向認證該用戶的IdP的屬性憑據請求用戶的屬性。
(10)高校A的屬性憑據根據該nameId從認證憑據處獲得用戶真實的userId。
(11)屬性憑據根據獲得的userId從用戶數據庫中獲得用戶身份信息的屬性值,將屬性值返回給高校A的屬性請求器。
(12)高校A的屬性請求器將屬性值發送給訪問控制器。
(13)訪問控制器根據用戶的屬性決定用戶可訪問的受控資源,并將結果返回給用戶。
4.2.3.2 用戶未登錄時訪問高校A資源(用戶視角)
用戶可視認證過程如圖7所示。
訪問高校A資源的整個過程如下:
(1)用戶向高校A訪問受控資源。
(2)用戶收到回復,要求其選擇所在的高校。
(3)用戶選擇其所在的高校。
(4)用戶收到其所在高校的登錄認證頁面。
(5)用戶填入用戶名密碼,并提交。
(6)用戶獲得所需要的受控資源。
本文參考Shibboleth的架構,完成了跨校身份聯盟系統的設計方案,實現用戶“異地訪問—本地認證”的功能,避免了異地認證的繁瑣,簡化了業務流程。身份聯盟各子系統交互采用SAML標準,有效地保證了系統通信的安全,保障了用戶的隱私,很好地滿足了應用管理的需求,為高校間的合作和信息交流提供了一個良好的平臺。
參考文獻
[1] Shibboleth support.http://shibboleth.internet2.edu/support,2009.
[2] CANTOR S, HITCH F. Bindings for the OASIS security assertion markup language(SAML)V2.0 S1[M]. OASIS Standard. 2005.
[3] 陳科,余堃,黃迪明.基于安全斷言標記語言輔件技術的單點登錄系統分析[J].計算機應用,2005,25(11):2574-2576.
[4] CHAO Y Y. Weakest link attack on single sign-on and its case in SAML V2.0 Web SSO[J]. Computational Science and its Applications, 2006,3982:507-516.
[5] 宋志強,陳懷楚,沈錫臣.校園網統一身份認證結構及基于此結構的應用漫游的實現[J].計算機工程與應用,2002,38(10):188-191.
[6] 陳小云.統一身份認證系統的研究與實現[D].成都:西南交通大學,2007.