第四十章 创建安全对话 - 启用 IRIS Web 服务以支持 WS-SecureConversation

文章目录

  • [第四十章 创建安全对话 - 启用 IRIS Web 服务以支持 WS-SecureConversation](#第四十章 创建安全对话 - 启用 IRIS Web 服务以支持 WS-SecureConversation)
  • [启用 `IRIS Web` 服务以支持 `WS-SecureConversation`](#启用 IRIS Web 服务以支持 WS-SecureConversation)

第四十章 创建安全对话 - 启用 IRIS Web 服务以支持 WS-SecureConversation

启用 IRIS Web 服务以支持 WS-SecureConversation

Web 客户端向 Web 服务发送请求安全对话的消息时,安全对话就开始了。作为响应,Web 服务发送双方都可以使用的 <SecurityContextToken>

要使 IRIS Web 服务能够使用此令牌进行响应,请重写 Web 服务的 OnStartSecureConversation() 方法。此方法具有以下签名:

java 复制代码
Method OnStartSecureConversation(RST As %SOAP.WST.RequestSecurityToken) As 
                          %SOAP.WST.RequestSecurityTokenResponseCollection

该方法应该执行以下操作:

  1. 加密 SOAP 主体。OnStartSecureConversation() 发送的消息包含必须保护的信息;此信息在 SOAP 主体中携带。

根据需要,可以选择采用其他方式保护消息安全。

  1. (可选)调用 %SOAP.WST.EntropyCreateBinarySecret() 方法。此方法返回表示随机服务器熵的该类的实例。该方法接受一个参数,即熵的大小(以字节为单位)。
java 复制代码
 set serverEntropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)

该实例表示 <Entropy>元素和其中包含的 <BinarySecret>

  1. OnStartSecureConversation() 收到的实例中调用 %SOAP.WST.RequestSecurityTokenCreateIssueResponse() 方法。CreateIssueResponse() 方法采用以下参数:

a. $THIS,代表当前的 Web 服务实例。

b. keysize,所需密钥的大小(以字节为单位)。仅当同时提供服务器熵和客户端熵时才使用此参数。默认值是较小密钥的大小(给定客户端熵中的密钥和服务器熵中的密钥)。

c. requireClientEntropy,其值为 truefalse,取决于 Web 服务是否要求请求包含客户端熵。如果为 false,则请求不得包含客户端熵。

d. serverEntropy,在步骤2中创建的服务器熵对象(如果适用)。

e. error错误,作为输出参数返回的状态代码。

f. lifetime,一个整数,指定安全对话的生存期(以秒为单位)。

java 复制代码
 set responseCollection=RST.CreateIssueResponse($this,,1,serverEntropy,.error)
  1. 检查上一步中的错误输出参数。如果发生错误,代码应设置 Web 服务的 SoapFault 属性并返回一个空字符串。
  2. 如果成功,则中返回由步骤 2 创建 的 %SOAP.WST.RequestSecurityTokenResponseCollection 的实例。

该实例代表<RequestSecurityTokenResponseCollection>元素,其中包含双方可以使用的 <SecurityContextToken>

以下显示一个例子:

java 复制代码
Method OnStartSecureConversation(RST As %SOAP.WST.RequestSecurityToken) 
As %SOAP.WST.RequestSecurityTokenResponseCollection
{
 // encrypt the SOAP body sent by this messsage 
 //because it contains part of the shared secret key
 Set x509alias = "clientnopassword" 
 Set cred = ##class(%SYS.X509Credentials).GetByAlias(x509alias)
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred)
 do ..SecurityOut.AddSecurityElement(enckey)

 //Supply the server entropy
 set serverEntropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)
 // Get the response collection for computed key
 set responseCollection=RST.CreateIssueResponse($this,,1,serverEntropy,.error)
 
 If error'="" {
    set ..SoapFault=##class(%SOAP.WST.RequestSecurityTokenResponse).MakeFault("InvalidRequest")
    Quit ""
    }
 
 Quit responseCollection
}

注意:OnStartSecureConversation() 方法最初定义为仅当策略指定时才返回 <SecurityContextToken>。请参阅创建和使用策略。

相关推荐
MATLAB代码顾问6 小时前
5大智能算法优化标准测试函数对比(Python实现)
开发语言·python
ting94520006 小时前
Tornado 全栈技术深度指南:从原理到实战
人工智能·python·架构·tornado
果汁华6 小时前
Browserbase Skills:让 Claude Agent 真正“看见“网页世界
人工智能·python
ZhengEnCi6 小时前
04-缩放点积注意力代码实现 💻
人工智能·python
云水一下6 小时前
从零开始!VMware安装Fedora Workstation 44桌面系统完整教程
前端
DeepReinforce7 小时前
三、AI量化投资:使用akshare获取A股主板20260430所有的涨停股票
python·量化·akshare·龙头战法
段一凡-华北理工大学7 小时前
【高炉炼铁领域炉温监测、预警、调控智能体设计与应用】~系列文章08:多模态数据融合:让数据更聪明
人工智能·python·高炉炼铁·ai赋能·工业智能体·高炉炉温
万粉变现经纪人7 小时前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
小码哥_常8 小时前
安卓黑科技:实现多平台商品详情页一键跳转APP
前端
killerbasd8 小时前
还是迷茫 5.3
前端·react.js·前端框架