第十八章 添加时间戳和用户名令牌
本主题讨论时间戳和用户令牌。
概述
时间戳是 WS-Security
标头中的 <Timestamp>
安全元素。严格来说,时间戳不是安全元素。但是,可以使用它来避免重放攻击。时间戳对于自定义日志记录也很有用。
用户名令牌是 WS-Security
标头中的 <UsernameToken>
安全元素;它带有用户名。它还可以带有相应的密码(可选为摘要形式)。通常使用它进行身份验证,即允许 IRIS Web
客户端使用需要密码的 Web
服务。
注意:默认情况下,WS-Security
标头元素以明文形式发送。要保护 <UsernameToken>
中的密码,应该使用 SSL/TLS
、加密 <UsernameToken>
(如其他地方所述),或者使用这些技术的某种组合。
添加时间戳
要将时间戳添加到 WS-Security
标头元素,请在 Web
客户端或 Web
服务中执行以下操作:
- 调用
%SOAP.Security.Timestamp的 Create()
类方法。此方法需要一个可选参数(以秒为单位的过期间隔)。默认过期间隔为300
秒。例如:
set ts=##class(%SOAP.Security.Timestamp).Create()
此方法创建 %SOAP.Security.Timestamp
的实例,设置其 Created
、Expires
和 TimestampAtEnd
属性的值,并返回该实例。此实例表示 <Timestamp>
标头元素。
- 调用
Web
客户端或Web
服务的SecurityOut
属性的AddSecurityElement()
方法。对于方法参数,请在创建的实例中使用%SOAP.Security.Timestamp
例如:
do client.SecurityOut.AddSecurityElement(ts)
- 发送
SOAP
消息。请参阅添加安全标头元素中的一般注释。
如果包含 <Timestamp>
元素,IRIS
会强制它位于 <Security>
中的第一个。
添加用户名令牌
要添加用户名令牌,请在 Web
客户端中执行以下操作:
- 可选择包含
%soap.inc
包含文件,它定义了可能需要使用的宏。 - 调用
%SOAP.Security.UsernameToken的 Create()
类方法。例如:
set user="SYSTEM"
set pwd="_SYS"
set utoken=##class(%SOAP.Security.UsernameToken).Create(user,pwd)
该方法具有可选的第三个参数(类型),用于指定如何将密码包含在用户名令牌中。该参数必须是以下之一:
-
$$$SOAPWSPasswordText
— 以纯文本形式包含密码。这是默认设置。 -
$$$SOAPWSPasswordDigest
— 不包括密码,而是包括其摘要。摘要、Nonce
和创建时间戳均按照WS-Security 1.1
的规定派生。
重要提示:此选项仅适用于与支持该选项的第三方服务器交互的 SOAP
客户端。PasswordDigest
身份验证要求服务器存储纯文本密码,这在现代安全环境中是不可接受的。PasswordDigest
算法应被视为一项旧功能。要保护 <UsernameToken>
中的密码,应该使用 SSL/TLS
、加密 <UsernameToken>
或使用这些技术的某种组合。
-
$$$SOAPWSPasswordNone
— 不包括密码。
此方法创建 %SOAP.Security.UsernameToken
的实例,设置其用户名和密码属性,并返回该实例。此对象表示 <UsernameToken>
标头元素。
- 调用
Web
客户端或Web
服务的SecurityOut
属性的AddSecurityElement()
方法。对于方法参数,请在创建的实例中使用%SOAP.Security.UsernameToken
例如:
do client.SecurityOut.AddSecurityElement(utoken)
- 发送
SOAP
消息。请参阅添加安全标头元素中的一般注释。