第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security
实例身份验证和 WS-Security
了解 IRIS
网络服务有两个独立的机制在起作用是很有用的:IRIS
服务器和网络服务代码。
- 在管理门户中,您可以为
Web
应用程序指定允许的身份验证模式,从而控制对%Service_WebGateway
服务的访问。(有关详细信息,请参阅时间戳和用户名令牌示例。有关更多背景信息,请参阅Web
应用程序。)如果您选择密码选项,则 Web 应用程序可以接受IRIS
用户名/密码对;这称为实例身份验证。 - 除此之外,
Web
服务还可以要求IRIS
用户名/密码对。
这些机制协同工作如下:
- 收到消息后,
Web
服务将检查是否存在名为<Security>
的标头元素,而不会检查该元素的内容。 - 如果不存在
<Security>
标头元素并且SECURITYIN
参数等于REQUIRE
,则Web
服务将发出故障并退出。 - 如果
<Security>
标头元素包含<UsernameToken>
元素:
- 如果为
Web
应用程序选择了密码选项,则Web
服务将读取<UsernameToken>
元素,从中获取用户名和密码,并登录到Web
应用程序。
Web
服务对 SECURITYIN
参数的任何值(IGNOREALL
除外)都执行此操作。
用户名可在 $USERNAME
特殊变量和 Web
服务的 Username
属性中找到。密码不可用。
- 如果没有选择密码选项,则不会登录。
注意:如果关联(和编译)配置类中存在安全策略,则 SECURITYIN
参数将被忽略。
检索安全标头元素
在某些情况下,可能希望为 WS-Security
标头元素添加自定义处理。为此,请使用 Web
服务或客户端的 SecurityIn
属性。如果服务或客户端收到 WS-Security
标头元素,则此属性是包含标头元素的 %SOAP.Security.Header
实例。例如:
Set secheader=myservice.SecurityIn
然后使用该实例的以下方法之一来检索标题元素:
FindByEncryptedKeySHA1()
method FindByEncryptedKeySHA1(encryptedKeySHA1 As %Binary) as %SOAP.Security.Element
从与给定 EncryptedKeySHA1
参数对应的 <EncryptedKey>
元素中返回密钥。如果没有匹配,则返回空字符串。
FindElement()
method FindElement(type As %String, ByRef pos As %String) as %SOAP.Security.Element
返回位置 pos
之后的第一个指定类型的安全元素。如果没有匹配,该方法将返回空字符串(并将 pos
返回为 0
)。
对于类型,指定“Timestamp”、“BinarySecurityToken”、“UsernameToken”、“Signature”或“EncryptedKey”
。
FindLastElement()
method FindLastElement(type As %String, ByRef pos As %String) as %SOAP.Security.Element
返回指定类型的最后一个安全元素。如果没有匹配,该方法将返回空字符串(并将 pos
返回为 0
)。
有关类型的信息,请参阅 FindElement()
的条目。
所有这些方法都会中返回 %SOAP.Security.Element
的实例或以下子类之一的实例,具体取决于元素类型:
Element Type | Subclass Used |
---|---|
"Timestamp" | %SOAP.Security.Timestamp |
"BinarySecurityToken" | %SOAP.Security.BinarySecurityToken |
"UsernameToken" | %SOAP.Security.UsernameToken |
"Signature" | %XML.Security.Signature |
检查签名确认
WS-Security 1.1
<SignatureConfirmation>
功能使 Web
客户端能够确保收到的 SOAP
消息是响应 Web
客户端发送的原始请求而生成的。客户端请求通常经过签名,但并非必须如此。在此机制中,Web
服务将 <SignatureConfirmation>
元素添加到安全标头元素,Web
客户端可以检查该 <SignatureConfirmation>
元素。
对于 Web
客户端,要验证从 Web
服务收到的响应中的 <SignatureConfirmation>
元素,请调用 Web 客户端的 WSCheckSignatureConfirmation()
方法。如果 <SignatureConfirmation>
元素有效,则此方法返回 true
,否则返回 false
。
网友评论