SAML國標(biāo)1

1. SAML斷言

斷言是一個(gè)包含零個(gè)或更多個(gè)由SAML權(quán)威做出的聲明的信息包。

SAML斷言通常與由<subject>元素表示的主體有關(guān)。

SAML權(quán)威可以生成三種不同的斷言聲明(所有符合SAML定義的聲明都與一個(gè)主體有關(guān)):認(rèn)證、屬性、授權(quán)結(jié)果。

1.1 名稱標(biāo)識(shí)符

作用:將參與方與標(biāo)識(shí)符進(jìn)行關(guān)聯(lián)。在某些情況下,需要限制標(biāo)識(shí)符的使用范圍、通過名稱限定詞使得不同實(shí)體對(duì)同樣名稱的理解是一致的、通過對(duì)標(biāo)識(shí)符加密增強(qiáng)其隱私保護(hù)性。

1.1.1 <BaseID>元素

<BaseID>元素是一個(gè)擴(kuò)展點(diǎn),使得應(yīng)用程序可以添加新類型的標(biāo)識(shí)符。其類型為BaseIDAbstractType(該類型是一個(gè)抽象類型,只能作為被繼承的源類型),包括下列用來擴(kuò)展的屬性:

a. NameQualifier 【可選】:限定該標(biāo)示符的安全域或管理域,該屬性與標(biāo)識(shí)符聯(lián)合使用,避免同名用戶沖突。

b. SPNameQualifier 【可選】:使用SP的名稱進(jìn)一步限定標(biāo)識(shí)符,該屬性為依賴方提供了一種聯(lián)合標(biāo)識(shí)符的方法。

1.1.2 NameIDType復(fù)合類

當(dāng)元素通過字符串描述一個(gè)實(shí)體時(shí),需要使用NameIDType復(fù)合類。它比<BaseID>元素?fù)碛懈訃?yán)格的限制,是<NameID>和<Issuer>元素的底層類型,包括下列屬性:

a. NameQualifier 【可選】:限定該標(biāo)識(shí)符的安全域或管理域

b. SPNameQualifier 【可選】:使用服務(wù)提供者的名稱進(jìn)一步限定標(biāo)識(shí)符

c. Format【可選】:一個(gè)URI指針,用于描述基于字符串的標(biāo)識(shí)符所屬的類別。如果沒有指定,將使用SAML:1.0:nameid-format:unspecified作為默認(rèn)值

d. SPProvidedID【可選】:服務(wù)提供者建立的一個(gè)與元素中的主標(biāo)識(shí)符不同的名稱標(biāo)識(shí)符。

1.1.3 <NameID>元素

<NameID>元素為NameIDType類型,用在<Subject>和<SubjectConfirmation>元素等多種SAML斷言結(jié)構(gòu)和多種協(xié)議消息中。

1.1.4 <EncryptedID>元素

<EncryptedID>元素為EncryptedElementType類型,包含一個(gè)加密的標(biāo)識(shí)符元素。<EncryptedID>元素包含:

a. <xenc:EncryptedData>【必需】:加密內(nèi)容及相關(guān)細(xì)節(jié)。其Type屬性應(yīng)該存在,應(yīng)包含值http://www.w3.org/2001/04/xmlenc#Element。加密內(nèi)容應(yīng)包含一個(gè)NameIDType或AssertionType類型的元素、或繼承BaseIDAbstractType、NameIDType和AssertionType的元素。

b.<xenc:EncryptedKey>【0個(gè)或多個(gè)】:打包解密密鑰。每個(gè)解密密鑰應(yīng)該包含一個(gè)Recipient屬性,指出該密鑰加密的實(shí)體,該屬性的值應(yīng)該為SAML系統(tǒng)實(shí)體的URI標(biāo)識(shí)符。

1.1.5 <Issuer>元素

<Issuer>元素為NameIDType復(fù)合類型,提供了SAML斷言或協(xié)議消息的簽發(fā)者信息。該元素應(yīng)使用字符串作為簽發(fā)者的名稱,該元素的Format值沒有指定則以u(píng)rn:oasis:name:tc:SAML:2.0:nameid-format:entity作為默認(rèn)值。

1.2 斷言

1.2.1 <AssertionIDRef>元素

<AssertionIDRef>元素使用唯一的標(biāo)識(shí)符來創(chuàng)建一個(gè)SAML斷言的引用。

1.2.2 <AssertionURIRef>元素

<AssertionURIRef>元素使用URI指針來引用SAML斷言。

1.2.3 <Assertion>元素

<Assertion>元素為AssertionType復(fù)合類型。該類型對(duì)斷言包含的基本信息進(jìn)行了說明,包括:

a. Version 【必需】:斷言的版本,本標(biāo)準(zhǔn)對(duì)應(yīng)的是“2.0”

b. ID 【必需】:斷言的標(biāo)識(shí)符,用xs:ID格式標(biāo)識(shí),遵循唯一性要求

c. IssueInstant 【必需】:使用UTC格式表示斷言簽發(fā)時(shí)間

d. Issuer 【必需】:聲明該斷言的簽發(fā)者。

e. <ds:Signature> 【可選】:用來保護(hù)斷言完整性和認(rèn)證簽發(fā)者的XML簽名

f. <Subject> 【可選】:斷言中聲明的主體

g. <Condition> 【可選】:當(dāng)使用斷言或者驗(yàn)證斷言時(shí),應(yīng)對(duì)條件進(jìn)行評(píng)價(jià)

h. <Advice> 【可選】:進(jìn)行操作時(shí)附加的幫助信息,應(yīng)用程序可根據(jù)需要忽略這些信息

斷言中還包含零個(gè)或多個(gè)下列元素:

i. <Statement>:聲明,應(yīng)使用xsi:type屬性來指出其具體類型

j. <AuthnStatement>

k. <AuthzDecisionStatement>

l. <AttributeStatement>

一個(gè)不包含聲明的斷言應(yīng)包含一個(gè)<Subject>元素,這樣的斷言確定了一個(gè)主體但不包含任何該主體的其他信息。

根據(jù)具體協(xié)議要求,SAML斷言的簽發(fā)者通常需要經(jīng)過認(rèn)證并擁有完整性保護(hù)。認(rèn)證和完整性保護(hù)可以由協(xié)議綁定提供的機(jī)制來完成。

1.2.4 <EncryptedAssertion>元素

<EncryptedAssertion>元素描述了一個(gè)加密的斷言,該元素包含以下元素:

a. <xenc:EncryptedData> 【必需】:加密內(nèi)容及相關(guān)細(xì)節(jié),其加密部分應(yīng)包含一個(gè)源自AssertionType的元素。

b. <xenc:EncryptedKey> 【0個(gè)或多個(gè)】:打包解密密鑰

1.3 主體

1.3.1 <Subject>元素

可選的<subject>元素確定了斷言內(nèi)所有聲明(0個(gè)或多個(gè))的共同主體,包含一個(gè)標(biāo)識(shí)符或若干個(gè)主體證明:

a. <BaseID>、<NameID>或<EncryptedID> 【可選】 確定主體

b. <SubjectConfirmation> 【0個(gè)或多個(gè)】可以證明主體的信息。如果存在一個(gè)以上的主體證明,則檢驗(yàn)其中任意一個(gè)即可。

一個(gè)<subject>元素可以同時(shí)包含標(biāo)識(shí)符及主體證明,使得RP可以在處理斷言時(shí)進(jìn)行校驗(yàn)。如果不包含主體證明,斷言的提交者與主體間不存在任何關(guān)系。

一個(gè)subjecct元素不應(yīng)該定義一個(gè)以上的主體。

1.3.2 <SubjectConfirmation>元素

SubjectConfirmation元素為依賴方提供了檢驗(yàn)主體的方法,它包含以下屬性和元素:

a. Method 【必需】:指向確定主體的協(xié)議或機(jī)制的URI指針,協(xié)議使用者可以通過定義新的URI或私下協(xié)商來引入新的方法。

b. BaseID、NameID、EncryptedID 【可選】:標(biāo)明要驗(yàn)證是否滿足主體證明請(qǐng)求的實(shí)體

c. SubjectConfirmationData 【可選】:某些證明方法需要的額外信息,例如一個(gè)<ds:KeyInfo>元素可用來代表一個(gè)密鑰,其他標(biāo)準(zhǔn)可對(duì)SubjectConfirmationData中包含的信息內(nèi)容作具體要求。

1.3.3 <SubjectConfirmationData>元素

提供可以證明主體的額外信息。當(dāng)RP需要檢驗(yàn)提出斷言的實(shí)體(即證明實(shí)體)和斷言宣稱的主體的關(guān)系時(shí),需要使用主體證明。主體證明包含了下列可選元素:

a. NotBefore 【可選】: UTC格式的證明起始時(shí)間

b. NotOnOrAfter 【可選】: UTC格式的證明結(jié)束時(shí)間

c. Recipient 【可選】:限定斷言應(yīng)發(fā)送到特定的網(wǎng)絡(luò)終端以避免中間人攻擊

d. InResponseTo 【可選】:將一個(gè)SAML請(qǐng)求與該斷言關(guān)聯(lián)

e. Address 【可選】:證明實(shí)體可發(fā)布斷言的網(wǎng)絡(luò)地址,該屬性可將特定的終端地址與斷言綁定以避免攻擊者輕易的竊取和發(fā)布斷言。

f. Arbitrary attributes: 本復(fù)合類使用了<xs:anyAttribute>擴(kuò)展點(diǎn),從而可以在<SubjectConfirmationData>結(jié)構(gòu)上添加任意的命名空間限定的XML屬性,而不需要提出特定的擴(kuò)展方案。

g. Arbitrary element:本復(fù)合類可利用<xs:any>擴(kuò)展點(diǎn)在<subjectConfirmationData>結(jié)構(gòu)上添加任意的XML元素,而不需要定義專門的擴(kuò)展方案。

如果時(shí)間限定存在,應(yīng)該包含于<Conditions>元素的NotBefore和NotOnOrAfter屬性中,且本復(fù)合類中NotBefore應(yīng)早于NotOnOrAfter。

1.3.4 KeyInfoConfirmationDataType復(fù)合類

KeyInfoConfirmationDataType復(fù)合類要求<SubjectConfirmationData>元素應(yīng)包含若干個(gè)<ds:KeyInfo>元素,用<ds:KeyInfo>元素來指明認(rèn)證證明方的密文密鑰。證明方法中應(yīng)詳細(xì)定義數(shù)據(jù)使用的機(jī)制。

1.3.5 經(jīng)密鑰認(rèn)證的<Subject>實(shí)例

為了描述上述元素和類型如何共同使用,下面給出一個(gè)包含名稱標(biāo)識(shí)符和主體證明的<Subject>元素的實(shí)例。注意其中使用KeyInfoConfirmationDataType復(fù)合類型包含的ds:KeyInfo元素來定義證明信息的方式。

<subject>

<NameID Format="****:nameid-format:emailAddress"> scott@example.org</NameID>

<SubjecConfirmation Method = "****:holder-of-key">

<SubjectConfirmationData xsi:type = "saml:KeyInfoConfirmationDataType">

<ds:keyInfo>

<ds:KeyName>Scotts Key</ds:KeyName>

</ds:KeyInfo>

</SubjectConfirmationData>

</SubjecConfirmation>

</subject>

1.4 條件

1.4.1 <conditions>元素

<conditions>元素可以包含下列元素和屬性:

a. NotBefore 【可選】 斷言最初生效時(shí)間 UTC編碼

b. NotOnOrAfter 【可選】 斷言失效時(shí)間 UTC編碼

c. Condition 【任意數(shù)目】 在一個(gè)擴(kuò)展方案中某個(gè)類型的條件,應(yīng)使用xsi:type來指明實(shí)際的條件類別。

d. AudienceRestriction 【任意數(shù)目】 指定斷言只能針對(duì)特定依賴方發(fā)布

e. OneTimeUse 【可選】 指定斷言應(yīng)當(dāng)立即被使用,不應(yīng)保留備用。盡管方案允許多次出現(xiàn),但對(duì)此元素應(yīng)至多只有一個(gè)實(shí)例。

f. ProxyRestriction 【可選】 指定斷言發(fā)送方對(duì)符合下列條件的依賴方作出的限制,依賴方希望下一步自己作為斷言發(fā)送方根據(jù)初始斷言中包含的信息發(fā)布自己的斷言。盡管方案允許多次出現(xiàn),但對(duì)此元素應(yīng)至多只有一個(gè)實(shí)例。

1.4.1.1 屬性NotBefore和NotOnOrAfter

屬性NotBefore和NotOnOrAfter指定了斷言在其使用上下文中斷言有效性的時(shí)間限制。

1.4.1.2 <Condition>元素

<Condition>元素是為新條件提供的擴(kuò)展點(diǎn)。其中的ConditionAbstractType復(fù)合類是抽象的,所以只可用作一個(gè)衍生類的基礎(chǔ)。

1.4.1.3 <AudienceRestriction>與<Audience>元素

AudienceRestriction元素指定該斷言將被發(fā)送給Audience元素所標(biāo)識(shí)的一個(gè)或多個(gè)特定的依賴方。雖然特定依賴方之外的一個(gè)SAML依賴方也能從該斷言中獲得信息,但SAML斷言發(fā)送方?jīng)]有對(duì)這樣的依賴方明確做出任何精確或可信的陳述。

AudienceRestriction包含以下元素:Audience。

Audience是一個(gè)URI指針,標(biāo)識(shí)了一個(gè)特定的依賴方,此URI指針可能標(biāo)識(shí)一個(gè)文檔,該文檔描述了接收群的限制與條件。它也可能包含一個(gè)唯一的標(biāo)識(shí)符URI,代表一個(gè)系統(tǒng)實(shí)體的SAML名稱標(biāo)識(shí)符。

需要注意的是,一個(gè)斷言中可能包含多個(gè)<AudienceRestriction>元素,每個(gè)元素應(yīng)獨(dú)立判斷。再需求和以上定義的共同作用下,對(duì)給定條件,依賴方間的關(guān)系是或(or),多重條件間的關(guān)系是與(and)。

1.4.1.4 OneTimeUse元素

一般情況下,依賴方可以選擇保留斷言或以其他形式保留斷言中的信息,以備重用。OneTimeUse元素使得一個(gè)權(quán)威機(jī)構(gòu)可以指定斷言中的信息可能頻繁變化,每次使用都應(yīng)該獲取最新的信息。

如果分布式環(huán)境中的系統(tǒng)時(shí)鐘可以精確同步,則此需求可以通過精心使用有效期的方式來滿足,然而由于系統(tǒng)間的時(shí)鐘誤差存在以及可能出現(xiàn)的傳輸延遲,因此發(fā)布方?jīng)]有便捷的方法既能適當(dāng)?shù)叵拗茢嘌缘挠行?,又可避免斷言可能在到達(dá)依賴方前就已失效的風(fēng)險(xiǎn)。

OneTimeUse元素指明依賴方應(yīng)該立即使用該斷言,不允許保留以備后用。依賴方可以在每次使用時(shí)請(qǐng)求一個(gè)新的斷言。

為了支持此一次性使用的限制,依賴方需要維護(hù)一個(gè)斷言緩存,保存其所處理過的包含此條件的斷言。一旦處理到包含此條件的斷言,就檢查緩存,確保本依賴方此前沒有接受處理過同一條斷言。(是只緩存指定時(shí)間間隔里斷言,會(huì)不會(huì)存在安全問題

一個(gè)SAML權(quán)威不允許在一個(gè)斷言的某個(gè)<Conditions>元素中包含多于一個(gè)<OneTimeUse>元素。為了確定<Conditions>元素的有效性,<OneTimeUse>元素始終有效。即,此條件是一個(gè)使用條件,不影響斷言的有效性。

1.4.1.5 ProxyRestriction元素

該元素指定了斷言發(fā)送方對(duì)依賴方的限制,指定哪些依賴方下一步可作為斷言發(fā)送方,發(fā)布其在初始斷言包含的信息基礎(chǔ)上自行生成的斷言。違反該元素中限制的依賴方不得作為斷言發(fā)送方發(fā)布的一個(gè)斷言。

<ProxyRestriction>元素包含下述元素和屬性:

a. Count 【可選】 指定了斷言發(fā)送方允許存在于本斷言與基于其發(fā)布的最終斷言間的間接斷言的最大數(shù)目。

b. Aduience 【0個(gè)或多個(gè)】指定了斷言發(fā)送方允許的,基于本斷言產(chǎn)生的新斷言可發(fā)送到的依賴方的集合。

如果沒有指定<Audience>元素,則沒有向依賴方施加發(fā)布后續(xù)斷言的依賴方限制。否則,這樣發(fā)布的斷言中應(yīng)包含一個(gè)<AudienceRestriction>元素,其中至少包含本斷言<ProxyRestriction>元素中的一個(gè)Audience,并且要求不得包含本斷言的ProxyRestriction元素中不包括的Audience元素。

一個(gè)SAML權(quán)威不允許在一個(gè)斷言的Conditions元素中包含多于一個(gè)的ProxyRestriction元素。為了確定元素Conditions的有效性,ProxyRestriction條件始終有效,亦即,此條件是一個(gè)使用條件,不影響斷言的有效性。

1.4.1.6 一般處理規(guī)則

如果一個(gè)斷言中包含元素Conditions,則該斷言的有效性依賴于所給出的子元素與屬性,所采用的規(guī)則如下所述(是有優(yōu)先級(jí)的,即依次匹配a,b,c,d):

a. 如果元素<conditions>中沒有子元素或?qū)傩?,則該斷言經(jīng)過條件處理是有效的;

b. 如果元素<conditions>中的任何子元素或?qū)傩允菬o效的,則該斷言是無效的;

c. 如果元素<conditions>中的任何子元素或?qū)傩缘闹挡豢勺x,或元素不可理解,則該斷言的有效性無法確定,該斷言是不確定的

d. 如果元素Conditions中的所有子元素與屬性是有效的,則該斷言經(jīng)過條件處理是有效的。

無效或不確定的斷言應(yīng)被依賴方丟棄,和該斷言形式錯(cuò)誤或不可使用的情況下的處理方式相同。

1.5 建議

<Advice>元素中包含SAML權(quán)威希望提供的所有附加信息。這些信息可以忽略,既不會(huì)影響斷言的語義,也不會(huì)影響斷言的有效性。

<Advice>元素包含0個(gè)或多個(gè)<Assertion>、<EncryptedAssertion>、<AssertionIDRef>、<AssertionURIRef>元素,以及非SAML命名空間的其他命名空間有效元素。

下面是Advice元素的一些應(yīng)用:

--包含支持?jǐn)嘌月暶鞅灰玫淖C據(jù)

--陳述斷言聲明的依據(jù)

--指定斷言更新的時(shí)間與發(fā)布點(diǎn)。

1.6 聲明

1.6.1 Statement元素

Statement元素是一個(gè)擴(kuò)展點(diǎn),使得其他基于斷言的應(yīng)用能夠重用SAML斷言框架。SAML自身就是從此擴(kuò)展點(diǎn)得出其核心聲明的。該元素所屬的StatementAbstractType復(fù)合類是抽象的,所以只可用作一個(gè)衍生類的基礎(chǔ)。

1.6.2 AuthnStatement元素

AuthnStatement元素描述了SAML權(quán)威做出的聲明,聲稱斷言主體是在特定時(shí)間以特定方式被認(rèn)證的。包含<AuthnStatement>元素的斷言應(yīng)包含一個(gè)Subject元素。AuthnStatement包括下列元素與屬性:

a. AuthnInstant 【必需】:指定了認(rèn)證發(fā)送的時(shí)間,采用UTC編碼

b. SessionIndex 【可選】:指定了SAML主體所標(biāo)識(shí)的主體與認(rèn)證權(quán)威間特定會(huì)話的索引

c. SessionNotOnOrAfter 【可選】: 指定了SAML主體所標(biāo)識(shí)的主體與發(fā)布此聲明的SAML權(quán)威間的會(huì)話應(yīng)終止的時(shí)刻。此時(shí)間值采用UTC編碼,此屬性與此斷言中可能存在的NotOnOrAfter條件間沒有必然關(guān)系。

d. SubjectLocality 【可選】: 指定了被認(rèn)證的斷言主體的系統(tǒng)的DNS域名與IP地址。

e. AuthnContext 【必需】:產(chǎn)生該聲明的認(rèn)證事件中的認(rèn)證權(quán)威所使用的上下文。其中包含一個(gè)認(rèn)證上下文類指針,一個(gè)認(rèn)證上下文聲明或聲明的指針,或聲明和聲明指針兩者都有。

通常,任何字符串值都可以用作SessionIndex值。然而,當(dāng)考慮隱私時(shí),應(yīng)注意包裝SessionIndex值不會(huì)使得其他隱私機(jī)制失效。因此,SessionIndex值不能被用來關(guān)聯(lián)一個(gè)主體與不同會(huì)話對(duì)象間的活動(dòng)。推薦使用下列方法:

--SessionIndex值采用小正整數(shù)(或一個(gè)列表中的重用常數(shù)值)。SAML權(quán)威應(yīng)該選擇該值的范圍,使得集合中元素的個(gè)數(shù)充分的多,以防止特定主體與多個(gè)會(huì)話對(duì)象間的活動(dòng)被關(guān)聯(lián)。SAML權(quán)威應(yīng)該在此范圍內(nèi)隨機(jī)選擇SessionIndex值(在保證唯一值的前提下進(jìn)行)。

--在SessionIndex中使用封裝的斷言ID值。

1.6.2.1 SubjectLocality元素

SubjectLocality元素指定了認(rèn)證斷言主體的系統(tǒng)DNS域名與IP地址。SubjectLocality包含下列屬性:

a, Address 【可選】 認(rèn)證斷言主體標(biāo)識(shí)的主體系統(tǒng)的網(wǎng)絡(luò)地址。

b. DNSName 【可選】 認(rèn)證斷言主體標(biāo)識(shí)的主體系統(tǒng)的DNS域名。

由于以上兩個(gè)屬性值都十分容易被欺騙,所以本元素完全用于參考,只在某些應(yīng)用中可能是有用的信息。

1.6.2.2 AuthnContext元素

AuthnContext元素指定了一個(gè)認(rèn)證事件的上下文。此元素可以包含一個(gè)認(rèn)證上下文類指針,一個(gè)認(rèn)證上下文聲明或聲明指針,或聲明及聲明指針兩者都有。其復(fù)合類AuthnContextType中含有以下元素:

a. AuthnContextClassRef 【可選】標(biāo)識(shí)一個(gè)認(rèn)證上下文種類的URI指針,認(rèn)證上下文種類描述了其后的認(rèn)證上下文聲明。

b. AuthenticatingAuthority 【0個(gè)或多個(gè)】 與主體認(rèn)證有關(guān)的0個(gè)或多個(gè)認(rèn)證權(quán)威的唯一標(biāo)識(shí)符(不包括斷言發(fā)送方,假定其必定相關(guān)因此無需在此特別指定)

1.6.3 AttributeStatement元素

AttributeStatement元素描述SAML權(quán)威的聲明,用于聲稱斷言的主體與指定屬性相關(guān)聯(lián)。包含AttributeStatement元素的斷言應(yīng)包含一個(gè)Subject元素。

AttributeStatementType類通過附加下述元素與屬性,擴(kuò)展了StatementAbstractType類:

a. Attribute或EncryptedAttribute 【一個(gè)或多個(gè)】

1.6.3.1 Attribute元素

Attribute元素標(biāo)識(shí)屬性名并可選地包含其屬性值。該元素屬于AttributeType復(fù)合類,可以用在一個(gè)屬性聲明中,用來描述與斷言主體相關(guān)的特定屬性及屬性值;也可用于屬性查詢中,用來請(qǐng)求返回特定SAML屬性的值。Attribute元素包含以下XML屬性:

a. Name 【必需】屬性名

b. NameFormat 【可選】 用于對(duì)屬性名進(jìn)行解釋的表示屬性名分級(jí)的URI指針。

c. FrientlyName 【可選】 提供屬性名的可讀串形式,在實(shí)際Name復(fù)雜或不透明的情況下(如OID或UUID)可能有所幫助。本屬性不能用來正式標(biāo)識(shí)SAML屬性值

d Arbitrary attributes 本復(fù)合類采用一個(gè)xs:anyAttribute擴(kuò)展點(diǎn)來向結(jié)構(gòu)Attribute中添加任意的XML屬性而不需要明確的方案擴(kuò)展。

e. AttributeValue 【任意數(shù)目】 包含屬性的一個(gè)值。如果一個(gè)屬性包含有超過一個(gè)的不連續(xù)值,建議將出現(xiàn)的每個(gè)值都使用單獨(dú)的attributeValue元素存放。如果此屬性中有多于一個(gè)的AttributeValue元素,且其中任意元素通過xsi:type分配了一個(gè)數(shù)據(jù)類型,則所有AttributeValue元素應(yīng)分配同一個(gè)數(shù)據(jù)類型。

一個(gè)Attribute元素中若不包含AttributeValue元素,則其意義依賴于其上下文。在一個(gè)AttributeStatement元素中,如果SAML屬性存在但是沒有值,則AttributeValue元素應(yīng)被忽略。在samlp:attributeQuery中,如果出現(xiàn)沒有值的情況,則意味著請(qǐng)求者對(duì)指定屬性的任意或所有值感興趣。

AttributeValue元素提供了SAML屬性的值,它是一個(gè)xs:anyType類,允許任何形式正確的XML出現(xiàn)在元素內(nèi)容中。

如果一個(gè)SAML屬性包含一個(gè)空值,例如空串,則相應(yīng)的AttributeValue元素應(yīng)為空(一般表示為<AttributeValue/>)。這條規(guī)則的優(yōu)先級(jí)高于SAML內(nèi)容的串值至少包含一個(gè)非空白字符的需求。

如果SAML屬性包含一個(gè)null值,則其相對(duì)應(yīng)的AttributeValue元素應(yīng)為空,且應(yīng)包含保留的xsi:nil XML屬性,其值為true或1

1.6.3.2 EncryptedAttribute元素

EncryptedAttribute元素代表一個(gè)加密SAML屬性。EncryptedAttribute元素包含下列元素:

a. xenc:EncryptedData 【必需】:加密內(nèi)容與相關(guān)加密細(xì)節(jié)。其Type屬性應(yīng)該存在,加密內(nèi)容應(yīng)包含一個(gè)元素,該元素應(yīng)衍生自AttributeType類型。

b. xenc:EnncryptedKey 【0個(gè)或多個(gè)】 封裝的解密密鑰,每個(gè)解密密鑰都應(yīng)該包含一個(gè)Recipient屬性,指定該密鑰加密的實(shí)體。Recipient屬性的值應(yīng)該是一個(gè)URI標(biāo)識(shí)符,標(biāo)識(shí)一個(gè)擁有SAML名字標(biāo)識(shí)符的系統(tǒng)實(shí)體。

1.6.4 AuthzDecisionStatement元素

AuthzDecisionStatement元素描述了一個(gè)SAML權(quán)威的聲明,該聲明表明,基于某些可選的證明,斷言主體訪問指定資源的請(qǐng)求已經(jīng)獲得了指定的授權(quán)決策結(jié)果。包含該元素的斷言應(yīng)包含一個(gè)Subject元素。

資源以URI指針方式標(biāo)識(shí)。為了正確安全地解釋斷言,SAML權(quán)威與SAML依賴方應(yīng)以一致的方式解釋每一個(gè)URI指針。如果不能在URI指針解釋上達(dá)成一致,會(huì)因資源URI指針的編碼差異而導(dǎo)致不一致的授權(quán)決策。

為避免因URI編碼差異導(dǎo)致歧義,SAML系統(tǒng)實(shí)體應(yīng)盡可能地按照以下要求使用URI標(biāo)準(zhǔn)形式:

--SAML權(quán)威應(yīng)該以標(biāo)準(zhǔn)形式編碼所有資源URI指針

--依賴方應(yīng)在處理前優(yōu)先將資源URI指針轉(zhuǎn)換為標(biāo)準(zhǔn)形式。

不一致的URI指針解釋也可能因底層文件系統(tǒng)的URI指針語法語義的差異導(dǎo)致。當(dāng)URI指針被用作指定一種訪問控制策略語言時(shí),需要特別注意。使用SAML斷言的系統(tǒng)應(yīng)滿足下列條件:

--部分URI指針語法是大小寫敏感的,如果底層文件系統(tǒng)是大小寫敏感的,請(qǐng)求者不能通過改變部分資源URI指針的大小寫來訪問一個(gè)禁止訪問的資源

--許多文件系統(tǒng)支持邏輯路徑與符號(hào)鏈接等機(jī)制,這使得用戶可以在文件系統(tǒng)入口間建立邏輯等價(jià)。請(qǐng)求者不能通過建立這種等價(jià)來訪問一個(gè)禁止訪問的資源。

AuthzDecisionStatement元素術(shù)語AuthzDecisionStatementType類,通過附加下列元素與屬性擴(kuò)展了StatementAbstractType類:

a. Resource 【必需】 標(biāo)識(shí)請(qǐng)求授權(quán)訪問的資源URI指針,此屬性中的URI指針值可能為空(”“),其意義定義為”當(dāng)前文檔的起始“

b. Decision 【必需】 SAML權(quán)威做出的關(guān)于給的資源的決策,其值是簡(jiǎn)單類DecisionType。

c. Action 【一個(gè)或多個(gè)】 獲得授權(quán),可在指定資源上執(zhí)行的操作的集合

d Evidence 【可選】 SAML權(quán)威做出決定時(shí)依賴的一組斷言

1.6.4.1 簡(jiǎn)單類 DecisionType

簡(jiǎn)單類DecisionType定義了在授權(quán)決策聲明中可能的決策狀態(tài)值:

a. Permit 允許該行為

b. Deny 禁止該行為

c Indeterminate SAML權(quán)威不能確定指定行為應(yīng)被允許還是禁止。其在下述情況使用:SAML權(quán)威需要有能力提供一個(gè)確定的聲明,但是在某些情況下卻無法發(fā)布決策。

拒絕或不能提供決策的原因可以作為附加信息以StatusDetail元素的形式封裝在Response中返回。

1.6.4.2 Action元素

Action元素指定了向指定資源申請(qǐng)權(quán)限的行為,以字符串?dāng)?shù)據(jù)的形式提供了這些行為的標(biāo)簽,并且包含以下屬性:

a. Namespace 【可選】 表示解釋指定行為名稱的命名空間的URI指針。若此元素不存在,則****:rwedc-negation有效 ?---國標(biāo)中該項(xiàng)在schema描述中是required

1.6.4.3 Evidence元素

Evidence元素包含一個(gè)或多個(gè)斷言或斷言指針,SAML權(quán)威依賴這些斷言或斷言指針來發(fā)布授權(quán)決定。它屬于EvidenceType復(fù)合類,包含一個(gè)或多個(gè)下列元素:

a. AssertionIDRef 【任意數(shù)目】 通過以該斷言的ID屬性值作為指針的方式指定一個(gè)斷言;

b. AssertionURIRef 【任意數(shù)目】 通過一個(gè)URI指針的方式指定一個(gè)斷言;

c. Assertion 【任意數(shù)目】 通過值指定一個(gè)斷言

d. EncryptedAssertion 【任意數(shù)目】 通過值指定一個(gè)加密斷言

作為依據(jù)的斷言可以影響SAML依賴方與作出授權(quán)決定的SAML權(quán)威間的信任一致性。例如,SAML依賴方在請(qǐng)求中向SAML權(quán)威方提交一個(gè)斷言的情況下,SAML權(quán)威可以使用該斷言作為作出授權(quán)決策的依據(jù),無論對(duì)于依賴方還是對(duì)于其他第三方,都無需將evidence元素的斷言簽署為有效。


2. SAML協(xié)議

SAML協(xié)議消息可以通過多種協(xié)議生成和交換。SAML bindings specification描述了使用常用的傳輸協(xié)議來傳輸協(xié)議消息的標(biāo)準(zhǔn)化方法。SAML profile specification描述了本章提到的多種協(xié)議的應(yīng)用以及額外的規(guī)則、限定和增強(qiáng)互操作性的要求。

標(biāo)準(zhǔn)化的SAML請(qǐng)求和響應(yīng)消息起源于通用類型,請(qǐng)求者向響應(yīng)者發(fā)送一個(gè)RequestAbstractType的衍生類元素;然后響應(yīng)者生成一個(gè)與StatusResponseType類型兼容或者該類型的衍生類元素。

在特定情形中,當(dāng)允許時(shí),SAML響應(yīng)可以不由接收請(qǐng)求的實(shí)體生成。

SAML協(xié)議完成以下操作:

--返回一個(gè)或多個(gè)斷言,作為直接請(qǐng)求或斷言詢問的響應(yīng);

--對(duì)請(qǐng)求進(jìn)行認(rèn)證并返回相應(yīng)斷言;

--注冊(cè)一個(gè)名稱標(biāo)識(shí)符或終止一個(gè)名稱注冊(cè)請(qǐng)求;

--生成一個(gè)通過artifact方式請(qǐng)求的協(xié)議消息;

--對(duì)一系列相關(guān)進(jìn)程執(zhí)行同步登出(單點(diǎn)登出)

--為請(qǐng)求提供一個(gè)名稱標(biāo)識(shí)符映射

SAML各組成協(xié)議之間的關(guān)系:方案和命名空間定義了協(xié)議的作用范圍;在方案和命名空間的范圍內(nèi)定義了RequestAbstractType復(fù)合類型與StatusResponseType復(fù)合類型,所有SAML請(qǐng)求類型都是以RequestAbstractType復(fù)合類型為基礎(chǔ)進(jìn)行擴(kuò)展而得來的,所有SAML響應(yīng)類型都是以StatusResponseType復(fù)合類型為基礎(chǔ)進(jìn)行擴(kuò)展而得來的;針對(duì)主體與客體間會(huì)話目的不同,各個(gè)協(xié)議分別對(duì)主體與客體間的請(qǐng)求和響應(yīng)的內(nèi)容和格式進(jìn)行了一系列的規(guī)定。

2.1 請(qǐng)求與響應(yīng)

2.1.1 RequestAbstractType復(fù)合類型

本類型定義了與SAML請(qǐng)求相關(guān)的通用的屬性和元素:

a. ID 【必需】 請(qǐng)求的標(biāo)識(shí)符 屬于xs:ID類型,且應(yīng)符合唯一性要求。請(qǐng)求中的ID屬性的值與響應(yīng)中的InResponseTo屬性的值應(yīng)匹配

b. Version 【必需】 請(qǐng)求的版本,本標(biāo)準(zhǔn)中定義的標(biāo)識(shí)符版本為2.0

c. IssueInstant 【必需】 UTC編碼的請(qǐng)求時(shí)間

d. Destination 【可選】 指向請(qǐng)求接收地址的URI指針。可實(shí)現(xiàn)某些協(xié)議綁定中避免惡意轉(zhuǎn)發(fā)的要求。如果本屬性存在,接收者應(yīng)檢查該URI指針以識(shí)別消息的目的地是否匹配。如果不匹配,該請(qǐng)求應(yīng)被拋棄。

e. Consent 【可選】 指出是否從發(fā)送此請(qǐng)求的主體處獲得了一個(gè)許可。

f. <saml:Issuer> 【可選】 標(biāo)識(shí)生成請(qǐng)求消息的實(shí)體

g. <ds:Signature> 【可選】XML簽名,用于認(rèn)證請(qǐng)求者和提供完整性保護(hù)

h. Extensions 【可選】經(jīng)過雙方協(xié)商的包含可選協(xié)議消息擴(kuò)展元素的擴(kuò)展點(diǎn)。即使使用擴(kuò)展的方案,松校驗(yàn)設(shè)定也不對(duì)擴(kuò)展的有效性作強(qiáng)制要求。

根據(jù)具體協(xié)議和配置文件的要求,SAML請(qǐng)求者通常需要對(duì)自己進(jìn)行認(rèn)證并保護(hù)消息的完整性。認(rèn)證和完整性保護(hù)可以由協(xié)議綁定提供的機(jī)制來完成。為了認(rèn)證請(qǐng)求者和保護(hù)完整性,SAML請(qǐng)求可以使用簽名。如果應(yīng)用了簽名,則應(yīng)同時(shí)使用ds:signature元素,且響應(yīng)方應(yīng)對(duì)簽名的有效性進(jìn)行檢驗(yàn);如果簽名無效,則返回錯(cuò)誤;如果有效,響應(yīng)方應(yīng)對(duì)簽名進(jìn)行評(píng)價(jià)以決定簽發(fā)者的身份及其適當(dāng)性。

如果請(qǐng)求包含Consent屬性并且一些主要的許可已經(jīng)獲得,則該請(qǐng)求應(yīng)該被簽名。

如果SAML響應(yīng)者認(rèn)為一個(gè)請(qǐng)求無效,則其響應(yīng)時(shí)應(yīng)在響應(yīng)消息中返回一個(gè)包含值為***:Requester的<StatusCode>元素。在某些情況下(如懷疑被DoS攻擊),可以不進(jìn)行響應(yīng)。

2.1.2 StatusResponseType復(fù)合類型

所有SAML響應(yīng)都起源于StatusResponseType復(fù)合類型,本類型定義了與SAML響應(yīng)相關(guān)的通用的屬性和元素:

a. ID 【必需】 響應(yīng)的標(biāo)識(shí)符,屬于xs:ID類型,符合標(biāo)識(shí)符唯一性要求

b. InResponseTo 【可選】 指向SAML響應(yīng)對(duì)應(yīng)的請(qǐng)求標(biāo)識(shí)符的指針。如果響應(yīng)不針對(duì)請(qǐng)求生成,或請(qǐng)求中的ID屬性值不能確定(例如請(qǐng)求畸形),則本屬性不應(yīng)存在。除去以上情況,此屬性應(yīng)存在,且其值應(yīng)與相應(yīng)請(qǐng)求中的ID屬性相匹配。

c. Version 【必需】 響應(yīng)的版本,本標(biāo)準(zhǔn)對(duì)應(yīng)的應(yīng)為2.0

d. IssueInstant 【必需】 UTC編碼的請(qǐng)求時(shí)間 (標(biāo)識(shí)內(nèi)容應(yīng)出錯(cuò),是響應(yīng)簽發(fā)的時(shí)間

e. Destination 【可選】 指向響應(yīng)接收地址的URI指針。可實(shí)現(xiàn)某些協(xié)議綁定中避免惡意轉(zhuǎn)發(fā)的要求。如果本屬性存在,接收者應(yīng)檢查該URI指針以失敗消息的目的地是否匹配。如果不匹配,該響應(yīng)應(yīng)被拋棄。

f. Consent 【可選】 指出是否從發(fā)送此響應(yīng)的主體處獲得了一個(gè)許可。

g. <saml:Issuer> 【可選】 標(biāo)識(shí)生成響應(yīng)消息的實(shí)體

h. <ds:Signature> 【可選】XML簽名,用于認(rèn)證響應(yīng)者和提供完整性保護(hù)

i. <Extension> 【可選】 經(jīng)過雙方協(xié)商的包含可選協(xié)議擴(kuò)展元素的擴(kuò)展點(diǎn)

j. Status 【必需】 描述相應(yīng)請(qǐng)求狀態(tài)的編碼

根據(jù)具體協(xié)議的要求,SAML響應(yīng)者通常需要對(duì)自己進(jìn)行認(rèn)證并保護(hù)消息的完整性。認(rèn)證和完整性保護(hù)可以由協(xié)議綁定提供的機(jī)制來完成。SAML響應(yīng)可以通過簽名來認(rèn)證響應(yīng)者和提供完整性保護(hù)。

如果應(yīng)用了簽名,則應(yīng)同時(shí)使用<ds:Signature>元素,且接收該響應(yīng)的請(qǐng)求者應(yīng)對(duì)簽名的有效性進(jìn)行檢驗(yàn)。如果響應(yīng)包含Consent屬性且其值指出某些形式的主體許可已經(jīng)獲得,則該響應(yīng)應(yīng)該被簽名。

2.1.2.1 Status元素

Status元素包含以下元素:

a. StatusCode 【必需】 描述響應(yīng)行為的狀態(tài)編碼

b. StatusMessage 【可選】可以返回給操作者的一條消息

c. StatusDetail 【可選】 與請(qǐng)求狀態(tài)相關(guān)的附加信息。由0個(gè)或多個(gè)任意命名空間內(nèi)的元素組成,且不包含任何關(guān)于方案的要求。

2.1.2.2 <StatusCode>元素

StatusCode元素定義了描述相應(yīng)請(qǐng)求狀態(tài)的編碼或嵌套的編碼集合。StatusCode包括以下元素和屬性:

a. Value 【必需】 狀態(tài)編碼值。本屬性包含一個(gè)URI指針,頂層<StatusCode>元素值應(yīng)從本節(jié)中提供的頂層狀態(tài)列表中選擇。

b. StatusCode 【可選】 提供更多細(xì)節(jié)信息的底層狀態(tài)編碼。響應(yīng)者可以忽略這些狀態(tài)編碼值以防止故意使用錯(cuò)誤請(qǐng)求來探察信息的攻擊。

被允許用作頂層狀態(tài)的StatusCode值如下所示:***:Success、***:Requester(由于請(qǐng)求者的錯(cuò)誤造成請(qǐng)求不能執(zhí)行)、***:Responder(由于SAML響應(yīng)方或SAML權(quán)威的錯(cuò)誤造成請(qǐng)求不能執(zhí)行)、****:VersionMismatch(版本錯(cuò)誤)

次級(jí)狀態(tài)編碼:***:AuthnFailed (不能成功認(rèn)證主體)、***:InvalidAttrNameOrValue(<saml:Attribute>或<saml:AttributeValue>中出現(xiàn)未預(yù)料或無效的內(nèi)容)、 ***:InvalidNameIDPolicy(響應(yīng)提供者不能或不愿支持請(qǐng)求的名稱標(biāo)識(shí)符策略)、***:NoAvailableIDP ...

2.2 斷言查詢和請(qǐng)求協(xié)議

2.2.1 AssertionIDRequest

如果請(qǐng)求者知道若干斷言的唯一標(biāo)識(shí)符,則可通過AssertionIDRequest消息元素來發(fā)出請(qǐng)求。在Response消息中返回這些斷言。

<complexType name="AssertionIDRequestType">

<complexContent>

<extension base = "samlp:RequestAbstractType">

<sequence>

<element ref = "saml:AssertionIDRef" maxOccurs="unbounded"/>

</sequence>

</extension>

</complexContent>

</complexType>

saml:AssertionIDRef元素用來限定每個(gè)返回的斷言。

2.2.2 查詢

2.2.2.1 SubjectQuery元素

SubjectQuery消息元素是一個(gè)擴(kuò)展點(diǎn),允許SAML主體通過該擴(kuò)展點(diǎn)定義新的SAML查詢。其中SubjectQueryAbstractType復(fù)合類型為抽象類,只能作為其他衍生類型的源類型。

SubjectQueryAbstractType向RequestAbstractType類型添加了<saml:Subject>元素。

2.2.2.2 AuthnQuery元素

AuthnQuery消息元素用來查詢“哪些斷言包含適用于該主體的認(rèn)證聲明?”。 一個(gè)成功的Response將返回一或多個(gè)符合查詢請(qǐng)求的斷言。

在本協(xié)議中,不得利用AuthnQuery中提供的信任憑證來獲取新的認(rèn)證。

該元素屬于AuthnQueryType,由SubjectQueryAbstractType經(jīng)下列元素和屬性擴(kuò)展得到:

a. SessionIndex 【可選】 為可能的響應(yīng)指定一個(gè)過濾器,查詢”哪些斷言包含進(jìn)程上下文中提到的主體的認(rèn)證聲明“

b. RequesetedAuthnContext 【可選】 為可能的響應(yīng)指定一個(gè)過濾器,查詢”哪些斷言包含滿足元素中認(rèn)證上下文提到的主體的認(rèn)證聲明?”

為響應(yīng)一個(gè)認(rèn)證查詢,SAML權(quán)威返回包含以下認(rèn)證聲明的斷言:

---返回匹配查詢中<subject>元素的斷言

---如果查詢中存在SessionIndex屬性,則返回的AuthnStatement元素中至少有一個(gè)應(yīng)包含與查詢中SessionIndex屬性相匹配的SessionIndex屬性。是否返回所有匹配的斷言集合是可選的。

---如果查詢中存在RequestedAuthnContext元素,返回的集合中應(yīng)至少包含一個(gè)滿足查詢中AuthnContext元素的AuthnStatement元素。是否返回所有匹配的斷言集合是可選的。

RequestedAuthnContext元素指定了查詢或請(qǐng)求響應(yīng)中返回的認(rèn)證聲明的上下文需求,并通過RequestedAuthnContextType復(fù)合類型定義:?

a. <saml:AuthnContextClassRef> or <saml:AuthnContextDeclRef> 【一個(gè)或多個(gè)】指定若干個(gè)URI指針來識(shí)別認(rèn)證上下文類或聲明。

b. Comparison 【可選】定義評(píng)價(jià)上下文類或聲明的對(duì)照方法,為“exact”、“minimum”、“maximum”或“better”之一,其中“exact”為默認(rèn)。如果Comparison設(shè)置為“exact”或者被省略,則認(rèn)證聲明中的上下文結(jié)果應(yīng)精確匹配至少一個(gè)認(rèn)證上下文;如果Comparison設(shè)置為“minimum”,則(響應(yīng)者相信)認(rèn)證聲明中的上下文結(jié)果應(yīng)至少同一個(gè)認(rèn)證上下文一樣強(qiáng);如果Comparison設(shè)置為“better”,則(響應(yīng)者相信)認(rèn)證聲明中的上下文結(jié)果應(yīng)強(qiáng)于至少一個(gè)認(rèn)證上下文;如果Comparison設(shè)置為“maximum”,則(響應(yīng)者相信)認(rèn)證聲明中的上下文結(jié)果應(yīng)在不超過的認(rèn)證上下文中最強(qiáng)上限情況下盡可能強(qiáng)。

2.2.2.3 AttributeQuery元素

AttributeQuery元素用來生成一個(gè)“返回主體請(qǐng)求的屬性”查詢。一個(gè)成功的響應(yīng)應(yīng)該以包含屬性聲明的斷言的格式返回信息。本元素為AttributeQueryType類型,由SubjectQueryAbstractType添加下列元素?cái)U(kuò)展得到:

<saml:Attribute> 【任意數(shù)目】

每個(gè)<saml:Attribute>元素定義了一個(gè)將返回的屬性。如果沒有明確指定有哪些屬性,則表明所有策略允許的屬性都被請(qǐng)求。如果給出的一個(gè)<saml:Attribute>元素包含一個(gè)或多個(gè)<saml:AttributeValue>元素,則一旦該屬性被返回,返回的值應(yīng)與查詢中指定的值嚴(yán)格相等。如果缺少專門的文檔或?qū)傩詠泶_定相等性規(guī)則,則相等性被定義為同樣的XML表示。

2.2.2.4 AuthzDecisionQuery元素

AuthzDecisionQuery元素用來生成一個(gè)“基于給定的證據(jù),主體對(duì)這些資源的這些行為是否被允許?”的查詢,一個(gè)成功的響應(yīng)應(yīng)該以包含授權(quán)決定聲明的斷言的格式返回信息。

本元素屬于AuthzDecisionQueryType類型,由SubjectQueryAbstractType添加下列元素和屬性擴(kuò)展得到:

a. Resource 【必需】 指向被請(qǐng)求資源的URI指針

b. saml:Action 【一個(gè)或多個(gè)】 授權(quán)請(qǐng)求的行為

c. saml:Evidence 【可選】 SAML權(quán)威可以用來作出授權(quán)決定的斷言集合。

2.2.3 Response元素

Response消息元素用來生成一個(gè)響應(yīng)。該響應(yīng)包含0個(gè)或多個(gè)滿足請(qǐng)求的斷言。Response元素屬于ResponseType復(fù)合類型,由StatusResponseType添加下列元素?cái)U(kuò)展得到:

a. <saml:Assertion>或<saml:EncryptedAssertion>【任意數(shù)目】 指定一個(gè)斷言或加密斷言

2.2.4 處理規(guī)則

為了響應(yīng)SAML查詢消息,SAML權(quán)威返回的每個(gè)斷言應(yīng)包含一個(gè)<saml:Subject>元素(記做S1),并要求該元素嚴(yán)格匹配查詢中的<saml:Subject>元素(記做S2);兩者嚴(yán)格匹配當(dāng)且僅當(dāng)同時(shí)滿足以下兩個(gè)條件:

---如果S2包含標(biāo)識(shí)符元素(<BaseID>、<NameID>或<EncryptedID>),則S1應(yīng)包含標(biāo)識(shí)符元素。S1和S2中的標(biāo)識(shí)符在解密后應(yīng)相同。

---如果S2包含一或多個(gè)<saml:SubjectConfirmation>元素,則S1應(yīng)包含至少一個(gè)saml:SubjectConfirmation,且能夠被S2中至少一個(gè)saml:SubjectConfirmation元素確認(rèn)。

如果SAML權(quán)威不能提供任何滿足查詢或復(fù)合斷言索引限定的斷言,則Response元素中應(yīng)不包含Assertion元素,且應(yīng)包含一個(gè)值為******:Success的次級(jí)<StatusCode>。

2.3 認(rèn)證請(qǐng)求協(xié)議

當(dāng)一個(gè)主體(或主體代理)希望獲得包含認(rèn)證聲明的斷言以建立一個(gè)安全上下文時(shí),可以使用認(rèn)證請(qǐng)求協(xié)議來向SAML權(quán)威發(fā)送一個(gè)<AuthnRequest>消息元素以請(qǐng)求SAML權(quán)威返回包含若干上述斷言的Response消息。返回的斷言可以包含任意類型的附加聲明,但至少有一個(gè)斷言應(yīng)包含認(rèn)證聲明。

支持本協(xié)議的SAML權(quán)威通常也稱作身份提供者。

除了滿足以上要求,返回?cái)嘌缘膬?nèi)容還取決于其使用的配置文件或上下文。

本節(jié)中的描述和處理規(guī)涉及到以下參與者,在實(shí)際應(yīng)用中,他們中的某些可能是同一實(shí)體:

a. 請(qǐng)求者: 創(chuàng)建認(rèn)證請(qǐng)求及接受響應(yīng)的實(shí)體。

b. 提交者:將請(qǐng)求提交給身份提供者的實(shí)體。如果提交者不是請(qǐng)求者,則其在請(qǐng)求者和身份提供者之間起中間人的作用。

c. 請(qǐng)求主體: 被請(qǐng)求斷言中的實(shí)體

d. 證明實(shí)體: 與結(jié)果斷言中某個(gè)<subjectConfirmation>元素相一致的實(shí)體。

e. 依賴方: 使用斷言達(dá)到配置文件中或使用上下文中定義的某種目的(通常是建立安全上下文)的實(shí)體。

f. 身份提供者 接收提交者發(fā)送的請(qǐng)求并作出響應(yīng)的實(shí)體。

2.3.1 AuthnRequest元素

為了請(qǐng)求認(rèn)證聲明,提交者向身份提供者發(fā)送一個(gè)AuthnRequest消息來描述響應(yīng)斷言應(yīng)具體的屬性。這些屬性包括斷言內(nèi)容和/或Response消息的傳遞方法。對(duì)于提交者的認(rèn)證處理可以在首次傳遞AuthnRequest消息之前、之中或之后進(jìn)行。請(qǐng)求者和提交者可以不同,例如請(qǐng)求者可以是RP。

<AuthnRequest>消息應(yīng)該被簽名或使用其他方法以進(jìn)行認(rèn)證和保護(hù)其完整性。

本消息屬于AuthnRequestType復(fù)合類型,由RequestAbstractType添加以下元素和屬性擴(kuò)展得到,所有擴(kuò)展都是可選的,但可能受特定的配置文件所限定:

a. <saml:Subject> 【可選】 ?定義了結(jié)果斷言的請(qǐng)求主體,可以包含一或多個(gè)<saml:SubjectConfirmation>元素來指出結(jié)果斷言可被誰證明。如果不包含標(biāo)識(shí)符,則認(rèn)為提交者是請(qǐng)求主體。如果不包含<saml:SubjectConfirmation>元素,則認(rèn)為提交者是唯一證明方且證明方法來源于配置文件和/或身份提供者的策略。

b. <NameIDPolicy> 【可選】 描述了對(duì)主體名稱標(biāo)識(shí)符的限定。如果省略,則可使用身份提供者支持的所有標(biāo)識(shí)符類型或使用相關(guān)的已發(fā)布標(biāo)識(shí)進(jìn)行限定。

c. <saml:Conditions> 【可選】 定義了請(qǐng)求者期望的對(duì)結(jié)果斷言的有效性和/或使用方法進(jìn)行限定的SAML條件。響應(yīng)者可以對(duì)其進(jìn)行必要的修改或補(bǔ)充。本元素中的信息將在建立斷言的過程中被當(dāng)做輸入的參數(shù)。

d. <RequestedAuthnContext> 【可選】 定義了請(qǐng)求者向響應(yīng)提供者提出的關(guān)于認(rèn)證上下文的要求。

e. <Scoping> 【可選】 定義了請(qǐng)求者信任的,可用來認(rèn)證提交者的身份提供者集合,或是響應(yīng)者對(duì)AuthnRequest消息代理的限制和相關(guān)上下文。

f. ForceAuthn 【可選】 一個(gè)布爾值,如果為“true”,則身份提供者應(yīng)直接認(rèn)證提交者而不能依賴于先前的安全上下文。如果該值未提供,則默認(rèn)為“false”。如果ForceAuthn和IsPassive同時(shí)為“true”,除非能夠滿足IsPassive約束,否則,身份提供者不得連續(xù)地認(rèn)證提交者。

g. IsPassive 【可選】 一個(gè)布爾值,如果為“true",身份提供者和用戶代理不應(yīng)在請(qǐng)求者和提交者交互中強(qiáng)制控制用戶接口。如果該值未提供,則默認(rèn)為”false“

h. AssertionConsumerServiceIndex 【可選】 間接指出Response消息應(yīng)該返回的位置。只在請(qǐng)求者和提交者使用不同的配置文件時(shí)應(yīng)用。身份提供者應(yīng)信任將給定的索引值映射到請(qǐng)求者相關(guān)位置的方法。如果該屬性被忽略,則身份提供者應(yīng)按照配置文件中描述的默認(rèn)位置返回Response。本屬性與AssertionConsumerServiceURL以及ProtocolBinding互斥。

i. AssertionConsumerServiceURL 【可選】 指定Response消息應(yīng)被返回的位置。響應(yīng)者應(yīng)通過某些方法保證該限定位置確實(shí)與請(qǐng)求者有關(guān)。對(duì)封裝的AuthnRequest消息進(jìn)行簽名可以滿足此種需求。本屬性與AssertioConsumerServiceIndex屬性互斥并通常與ProtocolBinding屬性一起使用。

j. ProtocolBinding 【可選】 指定Response返回時(shí)使用的SAML protocol binding的URI指針。本屬性與AssertionConsumerServiceIndex屬性互斥,并通常與AssertionConsumerServiceURL屬性配合使用。

k. AttributeConsumingServiceIndex 【可選】 間接指出請(qǐng)求者希望身份提供者在Response消息中提供的SAML屬性。身份提供者應(yīng)信任將給定的索引值映射到相關(guān)屬性的方法。身份提供者可以使用這些信息來將若干saml:AttributeStatement元素組裝入返回的斷言內(nèi)。

l. ProviderName 【可選】 定義了可讀的請(qǐng)求者名稱,該名稱被提交者的用戶代理或身份提供者使用。

2.3.1.1 NameIDPolicy元素

NameIDPolicy元素對(duì)斷言中的名稱標(biāo)識(shí)進(jìn)行裁剪,本元素的NameIDPolicyType復(fù)合類型定義了以下屬性:

a. Format 【可選】 定義了說明名稱標(biāo)識(shí)符格式的URI指針。附加值****:encrypted用來限定請(qǐng)求結(jié)果中的標(biāo)識(shí)符需要經(jīng)過加密

b. SPNameQualifier 【可選】 定義了斷言主體標(biāo)識(shí)符可使用的請(qǐng)求者以外的服務(wù)提供者的命名空間

c. AllowCreate 【可選】 用來指出身份提供者是否被允許在執(zhí)行請(qǐng)求的過程中創(chuàng)建新的主體標(biāo)識(shí)符的布爾值。默認(rèn)為false。如果為“false”,請(qǐng)求者限定身份提供者只能在主體標(biāo)識(shí)符已建立的情況下簽發(fā)斷言。

如果Format值被省略或被設(shè)置為**:unspecified,則身份提供者可以隨意返回任何種類的標(biāo)識(shí)符。

如果策略需要,身份提供者可以不遵循Format中的限制而在結(jié)果斷言中返回一個(gè)EncryptedID

2.3.1.2 Scoping元素

Scoping元素定義了請(qǐng)求者信任的身份提供者以及響應(yīng)者定義的與AuthnRequest消息代理相關(guān)的限制和上下文。ScopingType復(fù)合類型定義了以下元素和屬性:

a. ProxyCount 【可選】 定義了收到AuthnRequest的身份提供者與最終進(jìn)行認(rèn)證的身份提供者之間的最大代理數(shù)目;如果數(shù)目為零,則說明不允許代理,如果該屬性被忽略,則代表無限制。

b. IDPList 【可選】 可用的身份提供者信息列表

c. RequesterID 【0個(gè)或多個(gè)】 定義了請(qǐng)求實(shí)體集合,使用后續(xù)章節(jié)中的規(guī)則進(jìn)行通信。

在包含中間方的配置文件中,中間方可以檢查該列表,如果中間方不能連接列表中的任何一個(gè)身份提供者或者列表中不包含中間方支持的身份提供者,則返回一個(gè)Response消息。

2.3.1.3 IDPlist元素

IDPlist元素定義了請(qǐng)求者信任的身份提供者,其IDPListType復(fù)合類型定義了以下元素:

a. IDPEntry 【1個(gè)或多個(gè)】 一個(gè)身份提供者的信息。

b. GetComplete 【可選】 如果IDPList不完整,則使用本元素來定義一個(gè)用來獲取完整列表的URI指針,該URI指針指向的資源應(yīng)是一個(gè)根元素為IDPList且不包含GetComplete的XML實(shí)例。

IDPEntry元素定義了請(qǐng)求者信任的一個(gè)身份提供者,其IDPEntryType復(fù)合類型定義了以下屬性:

a. ProviderID 【必需】 身份提供者的唯一標(biāo)識(shí)符

b. Name 【可選】可讀的身份提供者名稱。

c. Loc 【可選】 指向支持認(rèn)證請(qǐng)求協(xié)議的一個(gè)終端的位置的URI指針,其綁定應(yīng)與配置無關(guān)。

2.3.2 處理規(guī)則

AuthnRequest與Response的交互支持許多應(yīng)用場(chǎng)景,在特定的上下文中也可以做典型的配置。

響應(yīng)者應(yīng)最終以一個(gè)Response消息回應(yīng)一個(gè)AuthnRequest,該Response消息中包含符合請(qǐng)求中所定義規(guī)范的一個(gè)或多個(gè)斷言,或者包含一個(gè)描述了所發(fā)生錯(cuò)誤的Status。響應(yīng)者可以根據(jù)需要與提交者進(jìn)行附加消息交換,以發(fā)起或完成認(rèn)證過程,這一過程要依據(jù)所綁定的協(xié)議及認(rèn)證機(jī)制的性質(zhì)。

所有在AuthnRequest中定義的內(nèi)容都是可選的,但在特定的配置文件中某些內(nèi)容可能是必須的。如果沒有任何特定內(nèi)容,默認(rèn)滿足下列條件:

--返回的斷言應(yīng)包含一個(gè)描述提交者的saml:Subject元素。標(biāo)識(shí)符的類型與格式由身份提供者決定。但至少一個(gè)斷言中的至少一個(gè)聲明應(yīng)是saml:AuthnStatement,且用來描述響應(yīng)者或與其相關(guān)的認(rèn)證服務(wù)進(jìn)行的認(rèn)證。

--請(qǐng)求的提交者應(yīng)該是唯一能夠滿足斷言subjectConfirmation的證明實(shí)體。在確認(rèn)方法較弱的情況下可以使用綁定的專門或其他機(jī)制來幫助滿足此需求。

--所得出的斷言應(yīng)包含一個(gè)AudienceRestriction元素,用來向請(qǐng)求者提示一個(gè)合理的依賴方

2.3.3 代理

如果一個(gè)收到AuthnRequest的身份提供者未認(rèn)證提交者或者不能直接認(rèn)證提交者,但是相信提交者已經(jīng)通過另一個(gè)身份提供者或非SAML的等價(jià)實(shí)體的認(rèn)證,它可以通過發(fā)布一個(gè)新的AuthnRequest給另一個(gè)身份提供者或者發(fā)布一個(gè)非SAML的等價(jià)實(shí)體可以識(shí)別的請(qǐng)求來獲得響應(yīng)。此時(shí),原始身份提供者成為代理身份提供者。當(dāng)一個(gè)Response(或一個(gè)非SAML的等價(jià)實(shí)體)返回給代理提供者后,Response中所封裝的斷言(或非SAML等價(jià)體)可以用來認(rèn)證提交者。這樣,代理提供者可以通過發(fā)布一個(gè)斷言來響應(yīng)原始的AuthnRequest。

請(qǐng)求者可以通過加入一個(gè)包含ProxyCount值的Scoping元素影響代理的行為,并且/或者通過一個(gè)有序的IDPList來指定一系列優(yōu)先選擇的可以提供代理的身份提供者。

一個(gè)身份提供者可以通過在它發(fā)布的斷言中使用一個(gè)ProxyRestriction元素來控制代理身份提供者對(duì)其斷言的后續(xù)使用。

代理提供者如果選擇一個(gè)SAML身份提供者作為身份提供者,在創(chuàng)建一個(gè)新的AuthnRequest時(shí),代理身份提供者應(yīng)包含與原始請(qǐng)求中的所有信息對(duì)等或更嚴(yán)格的格式。注意,代理提供者可以自由指定NameIDPolicy以使響應(yīng)成功的可能性最大。

新的AuthnRequest應(yīng)包含一個(gè)ProxyCount屬性,其值要比原始值至少少1.如果原始請(qǐng)求中不包含ProxyCOunt屬性,則新請(qǐng)求應(yīng)該包含一個(gè)ProxyCount屬性。

如果原始請(qǐng)求中指定了一個(gè)IDPList,新請(qǐng)求中也應(yīng)包含一個(gè)IDPList。代理身份提供者可以在IDPList的末尾添加額外的身份提供者,但是不得從列表中刪除任何身份提供者。

2.4 假名解析協(xié)議

假名解析協(xié)議提供了一種機(jī)制:SAML協(xié)議消息可以在SAML綁定中以指針引用而非數(shù)值的形式傳輸。利用此特殊的協(xié)議可以通過指針獲取請(qǐng)求與響應(yīng)。消息發(fā)送方不需將消息綁定到一個(gè)傳輸協(xié)議上,而是使用綁定發(fā)送稱為假名的一小段數(shù)據(jù)。一個(gè)假名可以有多種形式,但應(yīng)使接收方可以通過某種形式確定該假名由誰發(fā)送。如果接收方愿意,可以將協(xié)議與一個(gè)不同的(通常是同步的)SAML綁定協(xié)議聯(lián)合使用來將該假名解析為原始協(xié)議消息。

本機(jī)制的最普遍應(yīng)用是由于規(guī)模限制導(dǎo)致綁定難以攜帶一個(gè)消息,或者是為了使一個(gè)消息可以通過一個(gè)安全信道在SAML請(qǐng)求者與響應(yīng)方間傳輸,而不需使用簽名。

根據(jù)經(jīng)由指針傳遞的消息的性質(zhì),假名解析協(xié)議可以要求所綁定的用來解析假名的協(xié)議提供諸如雙向認(rèn)證、完整性保護(hù)和機(jī)密性等保護(hù)措施。在任何情況下,假名應(yīng)以一次使用的語義出現(xiàn),以保證當(dāng)其被成功解析后,不會(huì)再被任何人使用。

2.4.1 ArtifactResolve元素

ArtifactResolve消息用來請(qǐng)求返回一條<ArtifactResponse>消息,該消息中包含一個(gè)假名代表的SAML協(xié)議消息。假名的初始傳輸由所使用的綁定協(xié)議負(fù)責(zé)。

應(yīng)當(dāng)使用用來發(fā)送消息的綁定協(xié)議來對(duì)消息ArtifactResolve進(jìn)行簽名或認(rèn)證,并提供完整性保護(hù)。

本消息為復(fù)合類ArtifactResolveType,它擴(kuò)展了RequestAbstractType并添加了下列元素:

a. Artifact 【必需】 請(qǐng)求者收到的假名值,希望將其翻譯為它所代表的協(xié)議消息。

2.4.2 ArtifactResponse元素

收到ArtifactResolve消息后應(yīng)以ArtifactResponse消息元素進(jìn)行響應(yīng)。此類型為復(fù)合類ArtifactResponseType,由StatusResponseType擴(kuò)展而來,在其中加入一個(gè)可選的通配符元素(any namespace="##any" processContents="lax" minOccurs="0"/>),對(duì)應(yīng)所返回的SAML協(xié)議消息。

應(yīng)當(dāng)使用用來發(fā)送消息的綁定協(xié)議來對(duì)消息ArtifactResponse進(jìn)行簽名或認(rèn)證,并提供完整性保護(hù)。

2.4.3 處理規(guī)則

如果響應(yīng)方認(rèn)為假名有效,則在消息元素ArtifactResponse中以相應(yīng)的協(xié)議消息進(jìn)行響應(yīng)。否則,以無植入消息的元素ArtifactResponse進(jìn)行響應(yīng)。

響應(yīng)方應(yīng)確保任何假名只能使用一次的特性,可通過保證任何請(qǐng)求者對(duì)同一個(gè)假名的后續(xù)請(qǐng)求都導(dǎo)致上文描述的空響應(yīng)來實(shí)現(xiàn)。

如果假名發(fā)布方從請(qǐng)求者處收到一個(gè)artifactResolve消息,且該消息不能認(rèn)證請(qǐng)求者是原始指定的接收者,則假名發(fā)布方應(yīng)返回一個(gè)空響應(yīng)。假名發(fā)布方應(yīng)當(dāng)在一個(gè)假名的使用上施加最短的應(yīng)用時(shí)間限制,這樣,在假名接收方獲得假名并將其在一個(gè)ArtifactResolve消息中返回發(fā)布方的過程中,存在一個(gè)接收時(shí)間窗口。

需要注意ArtifactResponse消息的InResponseTo屬性應(yīng)包含與ArtifactResolve消息中ID屬性值相對(duì)應(yīng)的值。

2.5 名稱標(biāo)識(shí)符管理協(xié)議

在為一個(gè)主題建立一個(gè)名稱標(biāo)識(shí)符后,身份提供者希望改變?cè)摌?biāo)識(shí)符的值和/或格式以供未來引用該主體時(shí)使用,或者指明一個(gè)名字標(biāo)識(shí)符不再用來引用該主體。這是,身份提供者就向服務(wù)提供者發(fā)送一個(gè)ManagementNameIDRequest消息來告知這種變化。

服務(wù)提供者也使用此消息來注冊(cè)或改變?cè)谕ㄐ艜r(shí)需要使用的名稱標(biāo)識(shí)符的SPProvidedID值,或終止一個(gè)名稱標(biāo)識(shí)符在其與身份呢提供者間的使用。

2.5.1 ManageNameIDRequest元素

提供者發(fā)送一個(gè)ManagementNameIDRequest消息來告知接收方一個(gè)更改了的名稱標(biāo)識(shí)符,或者指明一個(gè)名稱標(biāo)識(shí)符的使用終止。

應(yīng)當(dāng)使用用來發(fā)送消息的綁定協(xié)議對(duì)ManagementNameIDRequest消息進(jìn)行簽名或認(rèn)證,并提供完整性保護(hù)。

本消息為復(fù)合類ManagementNameIDPRequestType,擴(kuò)展了RequestAbstractType,并添加了下列元素:

a. NameID或EncryptedID 【必需】 詳細(xì)說明主體的名稱標(biāo)識(shí)符或相關(guān)描述數(shù)據(jù)(以明文或加密形式),該主體最近在此請(qǐng)求前曾被身份提供者或服務(wù)提供者確認(rèn)過;

b. NewID或NewEncryptedID或Terminate 【必需】 新的名稱標(biāo)識(shí)符(以明文或加密形式),在與進(jìn)行請(qǐng)求的提供者通信時(shí)指代本主體,或表明舊標(biāo)識(shí)符的使用已經(jīng)終止。如果請(qǐng)求者是服務(wù)提供者,新的標(biāo)識(shí)符應(yīng)在元素NameID中的SPProvidedID屬性中出現(xiàn);如果請(qǐng)求者是身份提供者,新的值應(yīng)在元素NameID中作為元素內(nèi)容出現(xiàn)。

2.5.2 ManagementNameIDResponse元素

ManagementNameIDRequest消息的接收方應(yīng)以ManagementNameIDResponse消息進(jìn)行響應(yīng),該消息為StatusResponseType類,沒有附加內(nèi)容。

應(yīng)當(dāng)使用用來發(fā)送消息的綁定協(xié)議對(duì)ManagementNameIDResponse消息進(jìn)行簽名或認(rèn)證,并提供完整性保護(hù)。

2.5.3 處理原則

標(biāo)識(shí)符的改變可能占用請(qǐng)求者與響應(yīng)方的大量時(shí)間來向整個(gè)系統(tǒng)廣播此變動(dòng)。具體實(shí)現(xiàn)可能希望允許每一方在一個(gè)名字標(biāo)識(shí)符成功完成更新后一段時(shí)間內(nèi)仍接受原有標(biāo)識(shí)符。否則,可能導(dǎo)致主體不能訪問資源。

2.6 單點(diǎn)登出協(xié)議

單點(diǎn)登出協(xié)議提供了一個(gè)消息交換協(xié)議,通過此協(xié)議由特定會(huì)話權(quán)威提供的所有會(huì)話可以幾乎同步地終止。單點(diǎn)登出協(xié)議可以在一個(gè)主體從一個(gè)會(huì)話參與方或直接從一個(gè)會(huì)話權(quán)威登出的時(shí)候使用。此協(xié)議也可以在超出時(shí)限的情況下登出一個(gè)實(shí)體。登出事件的原因通過Reason屬性指出。

當(dāng)主體從一個(gè)會(huì)話參與方處調(diào)用一個(gè)單點(diǎn)登出過程,會(huì)話參與方應(yīng)發(fā)送一個(gè)LogoutRequest消息給提供斷言的會(huì)話權(quán)威,其中包含會(huì)話參與方中與會(huì)話相關(guān)的認(rèn)證聲明。

當(dāng)主體從會(huì)話權(quán)威處調(diào)用一個(gè)登出,或會(huì)話參與方代表該實(shí)體發(fā)送一個(gè)登出請(qǐng)求給會(huì)話權(quán)威時(shí),會(huì)話權(quán)威應(yīng)當(dāng)發(fā)送一個(gè)消息LogoutRequest給那些未向該權(quán)威發(fā)送消息LogoutRequest的每個(gè)會(huì)話參與方,向他們提供的斷言中包含關(guān)于該主體的當(dāng)前會(huì)話下的認(rèn)證聲明。認(rèn)證權(quán)威最終返回一個(gè)LogoutResponse消息到提出請(qǐng)求的會(huì)話參與方。

2.6.1 LogoutRequest元素

一個(gè)會(huì)話參與方或會(huì)話權(quán)威發(fā)送一個(gè)消息LogoutRequest來指明一個(gè)會(huì)話的終止。

應(yīng)當(dāng)使用用來發(fā)送消息的綁定協(xié)議對(duì)LogoutRequest消息進(jìn)行簽名或認(rèn)證,并進(jìn)行完整性保護(hù)。

此消息為L(zhǎng)ogoutRequestType復(fù)合類型,它擴(kuò)展了RequestAbstractType并加入了下列元素和屬性:

a. NotOnOrAfter 【可選】 請(qǐng)求失效的時(shí)間,如果超出此時(shí)間,接收方可以丟棄此消息,采用UTC編碼。

b. Reason 【可選】 以URI指針的形式指明登出原因。

c. BaseID或NameIDD或EncryptedID 【必需】 詳細(xì)說明主體的標(biāo)識(shí)符與相關(guān)屬性(以明文或加密形式),該主體最近在此請(qǐng)求前曾被身份提供者與服務(wù)提供者確認(rèn)過。

d. <SessionIndex> 【可選】 為消息接收方指示此會(huì)話的標(biāo)識(shí)符。

2.6.2 LogoutResponse元素

LogoutResponse元素為StatusResponseType,沒有專門添加內(nèi)容。

應(yīng)當(dāng)使用用來發(fā)送消息的綁定協(xié)議對(duì)消息LogoutResponse進(jìn)行簽名或認(rèn)證,并提供完整性保護(hù)。

2.6.3 處理規(guī)則

消息發(fā)送方可以使用Reason屬性來指明LogoutRequest的原因。本規(guī)范定義了***:logout:user表示主體希望終止指定會(huì)話;***:logout:admin表示管理者希望終止到該主體的指定會(huì)話。

2.6.3.1 會(huì)話參與方規(guī)則

當(dāng)一個(gè)會(huì)話參與方收到一個(gè)LogoutRequest消息時(shí),會(huì)話參與方應(yīng)認(rèn)證該消息。如果發(fā)送方是提供斷言的權(quán)威,斷言中包含一個(gè)連接到主體當(dāng)前會(huì)話的認(rèn)證聲明,會(huì)話參與方應(yīng)通過BaseID、NameID、EncryptedID元素,或消息中給出的任何SessionIndex元素令所有指向的主體的會(huì)話無效。如果沒有提供SessionIndex元素,則應(yīng)令所有與該主體相關(guān)的會(huì)話失效。

會(huì)話參與方應(yīng)將登出請(qǐng)求消息應(yīng)用到任何滿足下列條件的斷言,即使斷言在登出請(qǐng)求之后到達(dá):

---斷言的主體嚴(yán)格匹配<logoutRequest>中的baseID、NameID或encryptedID元素;

---斷言認(rèn)證聲明中的一個(gè)SessionIndex屬性匹配登出請(qǐng)求中描述的一個(gè)SessionIndex元素,或者登出請(qǐng)求不包含SessionIndex元素

---基于斷言自身描述的時(shí)間條件(尤其是在條件或主體證實(shí)數(shù)據(jù)中所描述的NotOnOrAfter屬性值)斷言有效;

---登出請(qǐng)求沒有超時(shí)(通過檢驗(yàn)消息中的NotOnOrAfter屬性來確定)+++此規(guī)則的目的是避免會(huì)話參與方在收到一個(gè)真實(shí)的,可能仍然有效的斷言之前收到一個(gè)登出請(qǐng)求,其目標(biāo)包括了剛收到的斷言的一個(gè)或多個(gè)斷言(由SessionIndex元素標(biāo)識(shí))。它應(yīng)該保留登出請(qǐng)求直到登出請(qǐng)求自身可以被拋棄(超出了請(qǐng)求中的NotOnOrAfter值)或者登出請(qǐng)求的目標(biāo)斷言已經(jīng)被收到且已經(jīng)被適當(dāng)處理。

2.6.3.2 會(huì)話權(quán)威規(guī)則

當(dāng)一個(gè)會(huì)話權(quán)威收到一個(gè)LogoutRequest消息,該會(huì)話權(quán)威應(yīng)認(rèn)證發(fā)送方。如果會(huì)話權(quán)威要提供包含對(duì)當(dāng)前會(huì)話的認(rèn)證聲明到發(fā)送方,則會(huì)話權(quán)威應(yīng)當(dāng)按照指定順序執(zhí)行下列行為:

----發(fā)送一個(gè)LogoutRequest消息給任何由本會(huì)話權(quán)威代理了主體認(rèn)證的其他會(huì)話權(quán)威;

---除了當(dāng)前LogoutRequest消息的初始發(fā)送方外,發(fā)送一個(gè)LogoutRequest消息給每個(gè)本會(huì)話權(quán)威在當(dāng)前會(huì)話中提供了斷言的會(huì)話參與方;

----終止主體當(dāng)前會(huì)話,根據(jù)BaseID、NameID或EncryptedID元素,或登出請(qǐng)求消息中給出的任何SessionIndex元素的說明執(zhí)行終止。

如果會(huì)話權(quán)威成功終止主體關(guān)于其自身的會(huì)話,則它對(duì)原始請(qǐng)求者做出響應(yīng)(如果原始請(qǐng)求存在)。響應(yīng)是一個(gè)LogoutResponse消息。

會(huì)話權(quán)威應(yīng)當(dāng)嘗試使用任何可應(yīng)用的綁定協(xié)議來聯(lián)系各會(huì)話參與方,即使此種嘗試失敗或不能執(zhí)行(例如因?yàn)槌跏颊?qǐng)求的發(fā)生所使用的綁定協(xié)議不能將登出傳播給所有參與方)。

注意會(huì)話權(quán)威可以在未從一個(gè)會(huì)話參與方處收到一個(gè)LogoutRequet的情況下發(fā)起一個(gè)登出,原因包括但不限于:

---如果與一個(gè)會(huì)話參與方之間的某個(gè)時(shí)間期限過期,會(huì)話權(quán)威可以發(fā)送一個(gè)LogoutRequest到該會(huì)話參與方;

---一個(gè)達(dá)成共識(shí)的全局時(shí)間期限過期;

---一個(gè)主體或其他可信實(shí)體直接向會(huì)話權(quán)威請(qǐng)求主體登出;

---會(huì)話權(quán)威確定主體的證書被攻破

在構(gòu)造一個(gè)登出請(qǐng)求消息時(shí),會(huì)話權(quán)威應(yīng)將消息中的NotOnOrAfter值設(shè)置成一個(gè)時(shí)間值,指明該消息的時(shí)限,在該時(shí)限之后,登出請(qǐng)求可以被接收方拋棄。此值應(yīng)當(dāng)被設(shè)置成一個(gè)等于或大于最新發(fā)布的斷言中的NotOnOrAfter值的時(shí)間值。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評(píng)論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,145評(píng)論 6 13
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,953評(píng)論 6 342
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,467評(píng)論 0 20
  • 電視劇《我的前半生》改編自亦舒同名小說,在7月悄悄上映 這部劇全程無尿點(diǎn),看過之后,你鐵定不好意思說自己還在追《楚...
    鹿z有萌閱讀 1,000評(píng)論 1 2