第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security
文章目录
- 第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security
- 实例身份验证和 `WS-Security`
- 检索安全标头元素
- `FindByEncryptedKeySHA1()`
- `FindElement()`
- `FindLastElement()`
 
 
- 检查签名确认
第三十八章 验证和解密入站消息 - 实例身份验证和 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。
