3.2.1 复杂类型RequestAbstractType

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

所有的SMAL请求都是派生自RequestAbstractType抽象类型的类型。这些类型定义了与所有SAML请求关联的公共属性和元素:

注意: <RespondWith>元素已经在SAML 2.0版本中从RequestAbstractType类型中移除了。

  • ID [必须]

请求的标识符。它是xs:ID类型,并且必须遵循第1.3.4节中规定的标识符唯一性要求。SAML请求中的ID属性值和对应的SAML响应中的InResponseTo属性值必须匹配。

  • Version [必须]

请求的版本号。本规范中定义的SAML版本的标识符为“2.0”。SAML版本控制在第4节中讨论。

  • IssueInstant [必须]

请求发布的时间点。该时间是UTC格式,符合1.3.3部分中的描述。

  • Destination [可选]

一个URI引用,用来指示当前的SAML请求是发给谁的。这有助于防止恶意的将请求转发给非预期收件人,这是被某些协议绑定所要求的保护机制。如果该属性存在,实际的接受者必须验证URI引用所指代的地址就是实际接收消息的地址。如果该属性不存在,那么请求必须被丢弃。一些协议绑定可能要求使用这个属性(参考[SAMLBind])。

  • Consent [可选]

说明在发送此请求时是否(以及在何种条件下)获得委托人的同意。可以在8.4节找到一些可能被用作Consent属性值的URI引用及其相关描述。如果Consent属性值不存在,那么默认使用urn:oasis:names:tc:SAML:2.0:consent:unspecified标识符(参考8.4.1部分)。

  • <saml:Issuer> [可选]

指示生成SAML请求的实体(可以参考2.2.5节查看更多该元素的信息)。

  • <ds:Signature> [可选]

验证请求者并提供消息完整性的XML签名,如后面第5节所述。

  • <Extensions> [可选]

此扩展点包含通信双方商定的可选的协议消息扩展元素。使用此扩展点不需要任何扩展schema,即便提供了扩展schema,宽松的验证设置也不要求扩展一定是有效的。SAML扩展元素必须在非SAML定义的命名空间中进行命名空间限定。

根据特定协议或概要文件的要求,SAML请求者通常需要验证自身,通常可能需要消息完整性。认证性和消息完整性可以由协议绑定提供的机制提供(请参见[SAMLBind])。SAML请求可能会被签名,签名可以提供认证性和消息完整性。

如果使用了这样的签名,那么<ds:Signature>元素就一定存在,并且SAML响应者就必须根据[XMLSig]规范验证签名是合法的(即信息没有被篡改)。如果签名无效,那么响应者不能依赖于请求的内容,并且应该返回错误。如果签名合法,那么响应者应该评估签名,以决定签名者的身份与适当性,进而决定继续处理请求或以错误进行响应(如果请求因其他原因无效)。

如果包含Consent属性,并且其值指示已经获得了依赖方的某种同意,那么请求就应该被签名。

如果SAML响应者根据SAML语法或处理规则判定SAML请求无效,那么如果进行响应,其SAML响应信息中必须包含<StatusCode>元素且其值为urn:oasis:names:tc:SAML:2.0:status:Requester。在一些场景中,例如,在可疑的拒绝服务攻击期间,可能根本没有响应。

下列的schema片段定义了RequestAbstractType复杂类型:

<complexType name="RequestAbstractType" abstract="true">
    <sequence>
        <element ref="saml:Issuer" minOccurs="0"/>
        <element ref="ds:Signature" minOccurs="0"/>
        <element ref="samlp:Extensions" minOccurs="0"/>
    </sequence>
    <attribute name="ID" type="ID" use="required"/>
    <attribute name="Version" type="string" use="required"/>
    <attribute name="IssueInstant" type="dateTime" use="required"/>
    <attribute name="Destination" type="anyURI" use="optional"/>
    <attribute name="Consent" type="anyURI" use="optional"/>
</complexType>

<element name="Extensions" type="samlp:ExtensionsType"/>
<complexType name="ExtensionsType">
    <sequence>
        <any namespace="##other" processContents="lax" maxOccurs="unbounded"/>
    </sequence>
</complexType>

Last updated

Was this helpful?