2.3.3 元素<Assertion>

本博客采用知识共享署名 4.0 国际许可协议进行许可

元素<Assertion>属于AssertionType复杂类型。该类型指定了所有断言通用的基本信息,包含夏雷的元素和属性:

  • Version [必须]

断言的版本。本规范中定义的SAML版本的标识符为2.0。SAML版本将在第4节中讨论。

  • ID [必须]

断言的标识符。它的类型是xs:ID,并且必须遵循第1.3.4节中规定的标识符唯一性要求。

The identifier for this assertion. It is of type xs:ID, and MUST follow the requirements specified in Section 1.3.4 for identifier uniqueness.

  • IssueInstant [必须]

断言发布的UTC时间,在1.3.3小节中描述。

  • <Issuer> [必须]

在断言中做出声明的那个SAML机构。对于断言的依赖方来说<Issuer>应该是明确的。

规范并没有定义<Issuer>元素所代表的实体与断言的签名者之间要有特定的关系。任何由依赖方或者专门的说明文件所提出的诸如此类的要求都是特定于应用的。

  • <ds:Signature> [可选]

一种XML签名,用于保护断言的完整性并对断言的颁发者进行身份验证 。在第5章节中详细描述。

  • <Subject> [可选]

断言中声明的主体。

  • <Conditions> [可选]

在评估断言的有效性和/或使用断言时必须评估<Conditions>元素。可以参考2.5小节,来看如何评估<Conditions>条件。

  • <Advice> [可选]

关于断言的一些额外信息。在一些情况下可能有助于处理断言,但是不理解或者不希望使用该信息的应用可能忽略它。

下面的声明可能出现0次或者多次:

  • <Statement>

在扩展架构中定义的一种类型声明。必须使用xsi:type属性来指定实际的声明类型。

  • <AuthnStatement>

认证声明。

  • <AuthzDecisionStatement>

授权决策声明。

  • <AttributeStatement>

属性声明。

没有声明的断言必须要包含<Subject>元素。这种断言以可以被SAML方法引用或确认的方式标识一个主体,但却没有断言该主体的进一步的信息。

否则,如果有声明的话,如果包含<Subject>元素,那么它就标识断言中所有声明的主体。如果<Subject>元素被省略,那么断言中的声明就会应用于以应用或者特定概要文件的方式所标识的主体。SAML本身并没有定义这样的声明,在规范中,一个不包含主体的断言是没有明确的含义的。

根据特定协议或者配置的要求,SAML断言的发布者可能需要被认证,同时也需要进行完整性保护。认证性和消息完整性可能由一种在断言转发过程中使用的协议绑定提供的机制来提供(参考[SAMLBind])。SAML断言可能被签名,通过签名及提供了认证性,又提供了消息完整性保护。

如果使用了这样的签名,那么断言中一定存在<ds:Signature>元素,并且依赖方必须要根据[XMLSig]规范验证签名是合法的(也就是说,断言没有被篡改)。如果签名违法,那么依赖方就必须不能依赖断言中的内容。如果签名合法,那么依赖方应该评估发布者的身份和适当性,并可根据本规范和其认为适当的情况继续处理声明(例如,评估断言生效的条件、建议、遵从的特性配置规则等等)。

注意,无论是签名还是没签名,在一个断言中包含多个声明在语义上等同于一组分别包含这些声明的断言(声明的主体、条件等等也要都一样)。

译者注(义臻):在一个断言中包含多个声明和在多个断言中分别包含这些声明是等价的。

下面的schema片段定义了<Assertion>元素,以及它的AssertionType复杂类型。

<element name="Assertion" type="saml:AssertionType"/>
<complexType name="AssertionType">
    <sequence>
        <element ref="saml:Issuer"/>
        <element ref="ds:Signature" minOccurs="0"/>
        <element ref="saml:Subject" minOccurs="0"/>
        <element ref="saml:Conditions" minOccurs="0"/>
        <element ref="saml:Advice" minOccurs="0"/>
        <choice minOccurs="0" maxOccurs="unbounded">
            <element ref="saml:Statement"/>
            <element ref="saml:AuthnStatement"/>
            <element ref="saml:AuthzDecisionStatement"/>
            <element ref="saml:AttributeStatement"/>
        </choice>
    </sequence>
    <attribute name="Version" type="string" use="required"/>
    <attribute name="ID" type="ID" use="required"/>
    <attribute name="IssueInstant" type="dateTime" use="required"/>
</complexType>

Last updated

Was this helpful?