文章目录
第十七章 手动添加安全元素
本主题主要介绍如何手动向 IRIS Web
服务和 IRIS Web
客户端发送的消息中添加安全元素。
以下主题提供了有关特定安全任务的详细信息。
添加安全标头元素
要将安全元素添加到 WS-Security
标头元素,请在 Web
客户端或 Web
服务中使用以下常规过程:
- 创建适用类的实例。为此,可以使用名为
Create()
或CreateX509()
的方法(具体取决于类)。该实例表示WS-Security
标头元素之一,例如<Username> or <EncryptedKey>
。 - 通过更新 Web 客户端或
Web
服务的SecurityOut
属性,将每个实例添加到WS-Security
标头元素。为此,请调用AddSecurityElement()
方法。 - 发送
SOAP
消息。WS-Security
标头包含在消息中,并包含添加到其中的元素。 - 对于后续传出消息:
- 对于
Web
客户端,SecurityOut
属性保持不变,以便此实例的后续出站消息包含添加的安全标头。如果不希望这样,请将SecurityOut
属性设置为null
。 - 对于
Web
服务,在第一个出站SOAP
消息之后,SecurityOut属性会自动设置为
null`。
标题元素的顺序
当将多个安全元素添加到标头时,按适当的顺序添加安全标头元素非常重要。当对同一消息元素执行加密和签名时,这一点尤其重要:即按执行加密和签名操作的相同顺序添加它们。
标头元素的顺序指示了消息处理的顺序。WS-Security 1.1
规范规定如下:
当元素添加到 <wsse:Security>
标头块时,它们应该被添加到现有元素的前面。因此,<wsse:Security>
标头块表示消息生产者创建消息所采取的签名和加密步骤。此前置规则确保接收应用程序可以按照子元素在<wsse:Security>
标头块中出现的顺序处理子元素,因为子元素之间不存在前向依赖关系。
当添加标题元素时, IRIS
会将每个元素添加到先前添加的元素之前,但以下情况除外:
- 如果包含
<Timestamp>
元素,则强制将其作为第一个。 - 如果包含任何
<BinarySecurityToken>
元素,它们将被强制遵循<Timestamp>
元素(如果包含)或被强制放在第一个。 - 当使用
AddSecurityElement()
添加安全标头元素的加密版本时,可以指定第二个参数来强制插入的<EncryptedData>
元素遵循关联的<EncryptedKey>
当对同一消息元素执行加密和签名时,按适当的顺序添加安全标头元素尤为重要:即,按照执行加密和签名操作的相同顺序添加它们。