《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 基于Shibboleth和SAML的跨校統(tǒng)一身份認(rèn)證系統(tǒng)
基于Shibboleth和SAML的跨校統(tǒng)一身份認(rèn)證系統(tǒng)
孫思緯,夏洪山
摘要: 結(jié)合跨域統(tǒng)一身份認(rèn)證的基礎(chǔ)技術(shù)平臺Shibboleth和跨域統(tǒng)一身份認(rèn)證的技術(shù)標(biāo)準(zhǔn)SAML,設(shè)計出跨校統(tǒng)一身份認(rèn)證系統(tǒng)。該系統(tǒng)可實(shí)現(xiàn)用戶“異地訪問—本地認(rèn)證”功能,避免了異地認(rèn)證的繁瑣,簡化了業(yè)務(wù)流程;身份聯(lián)盟各子系統(tǒng)交互采用SAML標(biāo)準(zhǔn),有效地保證了系統(tǒng)通信的安全,保障了用戶的隱私,滿足了應(yīng)用管理的需求。
Abstract:
Key words :

摘  要: 結(jié)合跨域統(tǒng)一身份認(rèn)證的基礎(chǔ)技術(shù)平臺Shibboleth和跨域統(tǒng)一身份認(rèn)證的技術(shù)標(biāo)準(zhǔn)SAML,設(shè)計出跨校統(tǒng)一身份認(rèn)證系統(tǒng)。該系統(tǒng)可實(shí)現(xiàn)用戶“異地訪問—本地認(rèn)證”功能,避免了異地認(rèn)證的繁瑣,簡化了業(yè)務(wù)流程;身份聯(lián)盟各子系統(tǒng)交互采用SAML標(biāo)準(zhǔn),有效地保證了系統(tǒng)通信的安全,保障了用戶的隱私,滿足了應(yīng)用管理的需求。
關(guān)鍵詞: 身份認(rèn)證;單點(diǎn)登錄;統(tǒng)一身份認(rèn)證;身份聯(lián)盟

    隨著技術(shù)的發(fā)展,越來越多的大學(xué)、公司以及政府機(jī)構(gòu)都通過網(wǎng)絡(luò)對外提供資源、服務(wù),并且彼此協(xié)作日益緊密、信息共享日益頻繁。例如,大學(xué)之間的“跨校選課”、“共享圖書資源”等。因此簡化這些業(yè)務(wù)中身份認(rèn)證的流程,同時做到安全高效成為迫切需要解決的問題。
1 Shibboleth簡介
    Shibboleth是Internet2/MACE項(xiàng)目之一,得到了IBM的技術(shù)和資金支持。Shibboleth是一個使用標(biāo)準(zhǔn)語言描述的體系結(jié)構(gòu)和策略框架,支持安全Web資源和服務(wù)共享[1]。
    Shibboleth主要針對分布式資源如何有效訪問的問題。與其他系統(tǒng)的區(qū)別在于Shibboleth將認(rèn)證模塊放在客戶端,資源提供者只需進(jìn)行少量的驗(yàn)證工作,極大地減輕了資源提供者的負(fù)擔(dān),簡化了訪問程序、提高了訪問資源的效率、安全性得到了保證。在系統(tǒng)擴(kuò)展方面,Shibboleth采用了SAML規(guī)范,同時也在SAML上作了改進(jìn),保證了系統(tǒng)的可擴(kuò)展性。
    Shibboleth主要由3個部分組成:
    (1)Origin
    對應(yīng)Identity Provider(IdP),身份提供端。主要作用是向資源提供者提供用戶的屬性,以便使資源服務(wù)器根據(jù)其屬性對操作進(jìn)行判決響應(yīng)。
    (2)Target
    對應(yīng)Resource/Service Provider,資源/服務(wù)提供端。主要作用是響應(yīng)用戶的資源請求,并向該用戶所在的Origin查詢用戶的屬性,然后根據(jù)屬性做出允許或拒絕訪問資源的決策。
    (3)WAYF
    WAYF是Where Are You From的首字母簡稱。SHIRE使用WAYF來進(jìn)行大部分初始化工作。WAYF組件知道每一個Origin端句柄服務(wù)器的名稱和位置。其主要功能是將Origin端站點(diǎn)名稱映射到HS信息上。WAYF的另一個作用是為用戶查詢HS并將句柄發(fā)送給SHIRE。WAYF通過與用戶打交道,詢問“你從哪來”,用戶輸入組織名稱,WAYF便在用戶組織的名稱與HS的URL之間進(jìn)行映射。
2 SAML簡介
    安全斷言標(biāo)記語言SAML(Security Assertion Markup Language)提供了一個健壯的、可擴(kuò)展的數(shù)據(jù)格式集,在各種環(huán)境下交換數(shù)據(jù)和身份識別信息。SAML將所有與檢索、傳輸和共享安全信息相關(guān)的功能標(biāo)準(zhǔn)轉(zhuǎn)化為以下形式[2]:
    (1)為用戶提供XML安全信息格式,請求、傳輸信息的格式。
    (2)定義這些消息與SOAP(Simple Object Access Protocol)等協(xié)議協(xié)作的方式。
    (3)為像Web SSO(Single Sign-On)類似的常見用例定義精確的消息交換。
    (4)支持多種隱私保護(hù)機(jī)制,包括在不披露用戶身份的情況下確定用戶屬性的功能。
    (5)詳述在Unix、Microsoft Windows、X509、LDAP、DCE和XCML技術(shù)所提供的格式中處理身份信息的方法。
    (6)提供系統(tǒng)的元數(shù)據(jù)機(jī)制,使得所有參與的系統(tǒng)能就所支持的SAML選項(xiàng)進(jìn)行通信。
    SAML的設(shè)計特別關(guān)注了靈活性,當(dāng)遇到標(biāo)準(zhǔn)尚未涵蓋的需求時,可以擴(kuò)展。其所描述的環(huán)境包括3個角色,如圖1所示,即信任方(Service Provider)、斷言方(Identity Provider)和主題(與身份信息相關(guān)的用戶)。

    IdP與SP通過SAML消息傳送用戶的身份認(rèn)證和屬性等信息。SAML消息定義了2種重要的語句:(1)身份驗(yàn)證語句,關(guān)于該主題在何時何地、使用何種身份進(jìn)行過驗(yàn)證的報告。SAML提供了超過20種不同身份驗(yàn)證方法的詳細(xì)定義。身份驗(yàn)證語句支持SSO,其中IdP代表SP進(jìn)行登錄。(2)屬性語句,包含了與主題有關(guān)的屬性。屬性語句中典型的屬性是組和角色。
    SAML定義了一組XML格式的請求和應(yīng)答消息,SP可使用這些消息直接獲取斷言[3]。請求會指定SP需要的信息,例如“所有張曉明的屬性”,應(yīng)答消息返回1個或多個匹配請求的斷言。為使不同的產(chǎn)品能夠交互操作,SAML的SOAP綁定詳細(xì)說明了怎樣在SOAP消息體中傳送信息。SAML還為支持聯(lián)盟身份環(huán)境提供了其他許多有用的機(jī)制:(1)協(xié)議允許SP確定通過將來自幾個可能IdP的特定用戶請求指示到何處;(2)協(xié)議允許2個IdP將他們各自擁有的同一個用戶賬戶關(guān)聯(lián)在一起(需用戶許可)。另外,SAML還支持加密全部斷言(也可選擇加密其敏感部分)、指定一個斷言的目標(biāo)用戶等功能。
3 Shibboleth在本系統(tǒng)中的作用
    (1)系統(tǒng)將基于Shibboleth的框架進(jìn)行開發(fā),但不完全使用Shibboleth,需要根據(jù)用戶的實(shí)際需求對其進(jìn)行改造。
    (2)Shibboleth構(gòu)成跨域統(tǒng)一身份認(rèn)證系統(tǒng)的核心部分,包括IdP、SP和WAYF組成的整個跨域統(tǒng)一身份認(rèn)證系統(tǒng)的架構(gòu)。
    (3)通過將Shibboleth的IdP組件與各個學(xué)校的統(tǒng)一身份認(rèn)證系統(tǒng)集成,將身份數(shù)據(jù)的管理和身份憑據(jù)的認(rèn)證交給各個學(xué)校自身的統(tǒng)一身份認(rèn)證系統(tǒng)??缬蛘J(rèn)證中心只是作為跨域認(rèn)證的索引,并不維護(hù)任何身份數(shù)據(jù)。
4 跨校統(tǒng)一身份認(rèn)證系統(tǒng)的實(shí)現(xiàn)
4.1 跨校統(tǒng)一身份認(rèn)證系統(tǒng)設(shè)計

    該身份認(rèn)證系統(tǒng)可分為3個子系統(tǒng),身份提供方IdP(Identity Provider)、服務(wù)提供方SP(Service Provider)和身份聯(lián)盟中心FC(Federation Centre)。這3個子系統(tǒng)在實(shí)現(xiàn)聯(lián)盟認(rèn)證時,工作原理與Shibboleth基本相同。下面從實(shí)現(xiàn)用戶身份聯(lián)盟認(rèn)證的角度介紹這3個子系統(tǒng)的結(jié)構(gòu)、工作機(jī)制以及交互方式。
4.1.1 身份提供方(IdP)
    IdP是負(fù)責(zé)認(rèn)證用戶身份和提供用戶認(rèn)證、屬性信息的實(shí)體,它需要維護(hù)3個模塊,即單點(diǎn)登錄認(rèn)證系統(tǒng)、數(shù)據(jù)庫系統(tǒng)和Shibboleth的IdP組件。
4.1.1.1 單點(diǎn)登錄認(rèn)證系統(tǒng)
    單點(diǎn)登錄認(rèn)證系統(tǒng)(Single Sign-On Authentication System)是源組織的SSO認(rèn)證系統(tǒng),負(fù)責(zé)響應(yīng)用戶的身份認(rèn)證請求并生成SSO Token[4]。加入身份聯(lián)盟的先決條件就是源組織已經(jīng)可以實(shí)現(xiàn)統(tǒng)一身份認(rèn)證,在此基礎(chǔ)上,源組織無須對SSO認(rèn)證系統(tǒng)做出變動。目前使用較多SSO系統(tǒng)有SUN、Oracle、IBM、Microsoft等廠商推出的統(tǒng)一身份認(rèn)證系統(tǒng),身份聯(lián)盟系統(tǒng)都將提供很好的兼容。
4.1.1.2 認(rèn)證數(shù)據(jù)庫和用戶屬性數(shù)據(jù)庫
    認(rèn)證數(shù)據(jù)庫(Authentication DB)是源組織SSO認(rèn)證系統(tǒng)的一部分,為SSO提供認(rèn)證數(shù)據(jù)并直接服務(wù)于單點(diǎn)登錄認(rèn)證系統(tǒng)。
    用戶屬性數(shù)據(jù)庫(User DB)主要為Shibboleth的IdP組件服務(wù),它存儲了身份聯(lián)盟系統(tǒng)所需要的用戶屬性信息。
4.1.1.3 Shibboleth的IdP組件
   Shibooleth的IdP組件主要工作單元分為句柄服務(wù)器HS(Handle Server)和屬性中心AA(Attribute Authority)2個部分。
    (1)句柄服務(wù)器(HS)
    用戶通過源組織的SSO認(rèn)證后,HS根據(jù)用戶瀏覽器中cookie值頒發(fā)身份聯(lián)盟的認(rèn)證句柄作為用戶在聯(lián)盟中的身份憑據(jù)。獲得認(rèn)證句柄的過程既可以通過用戶瀏覽器的Browser/POST和Browser/Artifact方式來實(shí)現(xiàn),也可以通過SAML中的身份驗(yàn)證斷言(Authentication Assertion)來實(shí)現(xiàn)。SAML定義了<samlp:AuthenticationQuery或<samlp:AssertionIDReference>字段的<samlp:Request>消息,通過它可以得到用戶身份認(rèn)證的斷言(Assertion),從中獲取句柄信息。用戶獲得句柄后就獲得了訪問聯(lián)盟中服務(wù)提供方的合法身份。
    (2)屬性中心(AA)
    AA為服務(wù)提供方(SP)提供用戶相關(guān)的屬性信息,這些信息又可分類為用戶固有屬性信息和用戶訪問策略信息。用戶固有屬性信息存儲在用戶屬性數(shù)據(jù)庫(User DB)的數(shù)據(jù)中;用戶訪問策略信息則是由屬性中心的屬性釋放策略ARP(Attribute Release Policy)提供的XML配置文件,包含了指定用戶是否可以訪問指定資源的決策信息。ARP文件定義了一系列的默認(rèn)策略,同時也支持用戶配置策略,用戶配置策略的制定工作將統(tǒng)一交由身份聯(lián)盟中心(FC)負(fù)責(zé)。
    AA與SP通信也是基于SAML系統(tǒng)。服務(wù)提供方的屬性請求器(Attribute Requester)可以利用SAML中定義的包含<samlp:AttributeQuery>字段的<samlp:Request>消息來發(fā)送屬性請求,屬性中心通過<saml:SubjectConfirmation>來確認(rèn)屬性請求器的身份是否合法(該步驟可選),如果屬性請求器是可信的,屬性中心將發(fā)送包含<samlp:AttributeStatement>字段的<samlp:Response>斷言作為應(yīng)答。屬性請求器解析<samlp:Response>斷言就可以得到SP所需要的用戶固有屬性或訪問策略定義。
4.1.2 服務(wù)提供方(SP)
    SP是提供基于Web的服務(wù)、應(yīng)用或資源的實(shí)體,通過安全的途徑實(shí)現(xiàn)資源的授權(quán)訪問和個性化服務(wù)。主要包含2個模塊:mod_shib模塊和SHAR模塊。
4.1.2.1 mod_shib模塊
    mod_shib是Shibboleth用于集成到SP Apache服務(wù)器的一個擴(kuò)展模塊,負(fù)責(zé)根據(jù)IdP提供的用戶訪問策略和本地訪問控制策略對資源進(jìn)行訪問控制。
4.1.2.2 SHAR模塊
    SHAR(Shibboleth Attribute Requester)是運(yùn)行在服務(wù)提供方服務(wù)器上的一個后臺程序,負(fù)責(zé)向IdP請求用戶屬性相關(guān)的信息并處理響應(yīng)消息。實(shí)際上SHAR是與IdP的屬性中心AA配合工作的,當(dāng)SP需要用戶屬性信息時,SHAR將以通過認(rèn)證后獲得的句柄(Handle)為憑據(jù),向AA發(fā)送屬性請求的SAML消息,AA返回屬性查詢結(jié)果,交由SHAR解析作為mod_shib模塊實(shí)現(xiàn)訪問控制的依據(jù)。
4.1.3 身份聯(lián)盟中心(FC)
    FC的主要功能是用于用戶的源組織選擇,即當(dāng)用戶訪問非源組織資源需要認(rèn)證時,將由FC提供源組織定位服務(wù)。該功能主要基于Shibboleth的Service Discovery組件,也可稱為WAYF服務(wù)。另外,本項(xiàng)目中的FC還根據(jù)需求提出了資源注冊、計費(fèi)、審計等輔助功能。
    WAYF服務(wù)在Shibboleth結(jié)構(gòu)中是一個可選組件,采用集中的方式讓用戶選擇自己所在的源組織。
    WAYF服務(wù)必須支持Shibboleth的認(rèn)證請求方式,即瀏覽器Browser/POST和Browser/Artifact認(rèn)證請求方式或者SAML認(rèn)證請求方式,目的是為了協(xié)調(diào)源組織的SSO服務(wù)和身份聯(lián)盟系統(tǒng)中的SSO服務(wù)。WAYF實(shí)際上充當(dāng)了各源組織SSO服務(wù)的中介,使各源組織的SSO在整個身份聯(lián)盟系統(tǒng)中都具有有效性。
4.2 跨校統(tǒng)一身份認(rèn)證系統(tǒng)框架
4.2.1 全局架構(gòu)設(shè)計

    (1)每個高校都具有雙重身份:既是服務(wù)提供者(SP),又是身份提供者(IdP)。
    (2)存在一個Discovery服務(wù)(即WAYF服務(wù)),當(dāng)用戶沒有經(jīng)過認(rèn)證而訪問SP時,由Discovery確定用戶應(yīng)該到哪個IdP去進(jìn)行身份驗(yàn)證。
    整體邏輯架構(gòu)[5]說明如圖2所示。


4.2.2 單一高校內(nèi)部的系統(tǒng)架構(gòu)設(shè)計
    為了更清楚地說明整個邏輯架構(gòu),圖3所示為各個高校的內(nèi)部邏輯架構(gòu)圖。

    高校內(nèi)部邏輯架構(gòu)[6]說明:
    (1)高校中的IdP基于原有的身份認(rèn)證系統(tǒng),在原有系統(tǒng)基礎(chǔ)上加入2個IdP組件:認(rèn)證憑據(jù)和屬性憑據(jù)。
    (2)高校的SP提供并保護(hù)高校的受控資源,在受控資源之上增加3個SP組件:斷言接受器、屬性請求器和訪問控制器。1個SP可以保護(hù)多個受控資源。
4.2.3 聯(lián)盟認(rèn)證過程
4.2.3.1 用戶未登錄時訪問高校A的資源(系統(tǒng)視角)

    場景:用戶第一次訪問高校A的受控資源如圖4、圖5、圖6所示。

    用戶訪問某一高校受控資源步驟如下:
    (1)用戶向高校A提出訪問請求。
    (2)高校A的斷言接受器發(fā)現(xiàn)該用戶未認(rèn)證,將請求重定向給聯(lián)盟認(rèn)證中心的WAYF服務(wù)器。
    (3)WAYF服務(wù)器將學(xué)校選擇界面發(fā)送給用戶,讓用戶選擇所能認(rèn)證的IdP。
    用戶訪問某一高交的Jdp步驟如下:
    (1)用戶選擇高校A后,提交給WAYF。
    (2)WAYF重定向到高校A的認(rèn)證服務(wù)。
    (3)高校A的認(rèn)證服務(wù)發(fā)現(xiàn)用戶尚未登錄,將請求定向到SSO服務(wù)。
    (4)SSO服務(wù)向用戶發(fā)出高校A的認(rèn)證登錄界面。
    用戶進(jìn)行身份認(rèn)證的過程步驟如下:
    (1)用戶輸入用戶名口令,向高校A的IdP認(rèn)證登錄。
    (2)高校A的SSO服務(wù)對用戶認(rèn)證,通過后生成Ticket(用戶A通過認(rèn)證后的證明),交給瀏覽器。
    (3)請求重定向到高校A的認(rèn)證服務(wù),該認(rèn)證服務(wù)到SSO服務(wù)上去驗(yàn)證之前生成的Ticket。
    (4)SSO服務(wù)驗(yàn)證Ticket,通過后將用戶的userId交給認(rèn)證服務(wù)。
    (5)認(rèn)證服務(wù)將userId交給認(rèn)證憑據(jù)。
    (6)認(rèn)證憑據(jù)為該用戶產(chǎn)生一個nameId,這是整個聯(lián)盟認(rèn)證過程中用戶的唯一標(biāo)識,并將該nameId返回給認(rèn)證服務(wù)。
    (7)認(rèn)證服務(wù)將nameId發(fā)還給瀏覽器,瀏覽器再次訪問高校A的SP。
    (8)高校A的斷言接受器接受認(rèn)證后用戶的請求,傳給屬性請求器。
    (9)屬性請求器根據(jù)來訪用戶的nameId,向認(rèn)證該用戶的IdP的屬性憑據(jù)請求用戶的屬性。
    (10)高校A的屬性憑據(jù)根據(jù)該nameId從認(rèn)證憑據(jù)處獲得用戶真實(shí)的userId。
    (11)屬性憑據(jù)根據(jù)獲得的userId從用戶數(shù)據(jù)庫中獲得用戶身份信息的屬性值,將屬性值返回給高校A的屬性請求器。
    (12)高校A的屬性請求器將屬性值發(fā)送給訪問控制器。
    (13)訪問控制器根據(jù)用戶的屬性決定用戶可訪問的受控資源,并將結(jié)果返回給用戶。
4.2.3.2 用戶未登錄時訪問高校A資源(用戶視角)
    用戶可視認(rèn)證過程如圖7所示。

    訪問高校A資源的整個過程如下:
    (1)用戶向高校A訪問受控資源。
    (2)用戶收到回復(fù),要求其選擇所在的高校。
    (3)用戶選擇其所在的高校。
    (4)用戶收到其所在高校的登錄認(rèn)證頁面。
    (5)用戶填入用戶名密碼,并提交。
    (6)用戶獲得所需要的受控資源。
    本文參考Shibboleth的架構(gòu),完成了跨校身份聯(lián)盟系統(tǒng)的設(shè)計方案,實(shí)現(xiàn)用戶“異地訪問—本地認(rèn)證”的功能,避免了異地認(rèn)證的繁瑣,簡化了業(yè)務(wù)流程。身份聯(lián)盟各子系統(tǒng)交互采用SAML標(biāo)準(zhǔn),有效地保證了系統(tǒng)通信的安全,保障了用戶的隱私,很好地滿足了應(yīng)用管理的需求,為高校間的合作和信息交流提供了一個良好的平臺。
參考文獻(xiàn)
[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] 陳科,余堃,黃迪明.基于安全斷言標(biāo)記語言輔件技術(shù)的單點(diǎn)登錄系統(tǒng)分析[J].計算機(jī)應(yīng)用,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] 宋志強(qiáng),陳懷楚,沈錫臣.校園網(wǎng)統(tǒng)一身份認(rèn)證結(jié)構(gòu)及基于此結(jié)構(gòu)的應(yīng)用漫游的實(shí)現(xiàn)[J].計算機(jī)工程與應(yīng)用,2002,38(10):188-191.
[6] 陳小云.統(tǒng)一身份認(rèn)證系統(tǒng)的研究與實(shí)現(xiàn)[D].成都:西南交通大學(xué),2007.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。