第四十三章 使用 WS-ReliableMessaging - 对 WS-ReliableMessaging 标头进行签名
对 WS-ReliableMessaging 标头进行签名
可以通过以下任一方式签署 WS-ReliableMessaging 标头。
使用 SecurityContextToken 对标头进行签名
如果还使用 WS-SecureConversation,则 Web 客户端的 SecurityContextToken 属性包含一个对称密钥,可以使用该密钥对 WS-ReliableMessaging 标头元素进行签名。为此,请在调用 %SOAP.RM.CreateSequence实例的 AddSTR() 方法,并将 SecurityContextToken 属性作为参数传递:
do createsequence.AddSTR(client.SecurityContextToken)
在调用 %StartRMSession() 之前执行此操作。
签署消息时签署标头
还可以使用与签署消息其余部分相同的方式签署 WS-ReliableMessaging 标头。为此,在调用 %XML.Signature 的 Create() 或 CreateX509() 方法时,将值 $$$SOAPWSIncludeRMHeaders 添加到 signatureOptions 参数。$$$SOAPWSIncludeRMHeaders 宏包含在 %soap.inc 文件中。
修改 Web 服务以支持 WS-ReliableMessaging
要修改 IRIS Web 服务以支持 WS-ReliableMessaging,请修改 Web 方法以便它们执行以下操作:
- 验证入站请求消息是否包含
WS-ReliableMessaging标头。 - 验证
WS-ReliableMessaging标头是否已签名。
请注意 IRIS 会自动检查任何签名是否有效。请参阅验证和解密入站消息。
- 可选择指定
Web服务类的参数来微调Web服务的行为,如下一节所述。
控制 Web 服务如何处理可靠消息
可以指定 Web 服务类的以下参数来微调 Web 服务的行为:
RMINORDER
对应于 WS-ReliableMessaging 的 InOrder 策略断言。将其指定为 0 (false) 或 1 (true)。有关详细信息,请参阅 Web Services Reliable Messaging Policy 1.1 规范。
默认情况下,当未指定此参数时, IRIS Web 服务不会发出有关消息顺序的 SOAP 错误。
RMDELIVERYASSURANCE
对应于 WS-ReliableMessaging 的 DeliveryAssurance 策略断言。将其指定为“ExactlyOnce”、“AtLeastOnce”或“AtMostOnce”。有关详细信息,请参阅 Web Services Reliable Messaging Policy 1.1 规范。
默认情况下,当未指定此参数时,IRIS Web 服务不会发出有关根据此策略断言进行传送的任何失败的 SOAP 故障。
RMINACTIVITYTIMEOUT
指定 Web 服务接收的序列的不活动超时时间(以秒为单位)。默认值为 10 分钟。
此外,还可以实现 Web 服务的 %OnCreateRMSession() 回调方法。此方法在 WS-ReliableMessaging 会话开始时调用,然后返回 %SOAP.RM.CreateSequenceResponse。此时,响应参数已完全创建,但尚未返回。此回调使有机会将任何所需的 Security 标头元素添加到 Web 服务的 SecurityOut 属性。如果使用 WS-Policy,则 WS-Policy 支持会自动执行此操作。有关方法签名,请参阅 %SOAP.WebService的类参考。