第四十一章 创建安全对话 - 使用 SecurityContextToken

文章目录

  • [第四十一章 创建安全对话 - 使用 <SecurityContextToken>](#第四十一章 创建安全对话 - 使用 <SecurityContextToken>)
  • 结束安全对话

第四十一章 创建安全对话 - 使用

Web 服务使用 <SecurityContextToken>, 做出响应后,客户端实例和服务实例可以访问相同的对称密钥。有关此密钥的信息包含在两个实例的 SecurityContextToken 属性中。建议的程序如下:

  1. 在客户端中,将 SecurityOut 属性设置为 null,以删除请求消息中使用的安全标头。

Web 服务中不需要这样做,因为 Web 服务会在每次调用后自动清除安全标头。

  1. (可选)将 <SecurityContextToken> 添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。例如:
java 复制代码
 set SCT=..SecurityContextToken
 do ..SecurityOut.AddSecurityElement(SCT)

如果在下一步创建派生密钥令牌时使用 $$$SOAPWSReferenceSCT 引用选项,则此步骤是必需的。否则,此步骤不是必需的。

  1. 根据 <SecurityContextToken>创建一个新的 <DerivedKeyToken> 。为此,调用 %SOAP.WSSC.DerivedKeyTokenCreate() 方法,如下所示:
java 复制代码
 set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(SCT,refOpt)

在这种情况下,必须指定 Create() 的第一个参数,并且 refOpt 必须是以下参考值之一:

  • $$$SOAPWSReferenceSCT(本地引用)--- 引用的 URI 属性以 # 开头,指向 <SecurityContextToken>元素的 wsu:Id 值,该值必须包含在消息中。
  • $$$SOAPWSReferenceSCTIdentifier(远程引用)------引用的 URI 属性包含 <SecurityContextToken> 元素的 <Identifier> 值,该值不必包含在消息中。
java 复制代码
 set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(SCT,$$$SOAPWSReferenceSCT)
  1. 使用新的 <DerivedKeyToken> 来指定安全标头。请参阅使用派生密钥令牌进行加密和签名。
  2. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。
java 复制代码
  //initiate conversation -- not shown here
  //clear SecurityOut so that we can respecify the security header elements for
  //the secure conversation
  set client.SecurityOut=""

  //get SecurityContextToken
  set SCT=client.SecurityContextToken
  do client.SecurityOut.AddSecurityElement(SCT) 

  // get derived keys
  set dksig=##class(%SOAP.WSSC.DerivedKeyToken).Create(SCT,$$$SOAPWSReferenceSCT)
  do client.SecurityOut.AddSecurityElement(dksig)

  // create and add signature
  set sig=##class(%XML.Security.Signature).Create(dksig,,$$$SOAPWSReferenceDerivedKey)
  do client.SecurityOut.AddSecurityElement(sig) 

  
  //invoke web methods

结束安全对话

一旦 <SecurityContextToken> 过期,安全对话就会结束,但 Web 客户端也可以通过取消未过期的 <SecurityContextToken>来结束它。

要结束安全对话,请调用 Web 客户端的 CancelSecureConversation() 方法。例如:

java 复制代码
 set status=client.CancelSecureConversation()

该方法返回一个状态值。

请注意,此方法将客户端的 SecurityOut 属性设置为空字符串。

相关推荐
大模型玩家七七16 分钟前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
Hello.Reader8 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
智驱力人工智能8 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
数据与后端架构提升之路9 小时前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全
市场部需要一个软件开发岗位10 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
lingggggaaaa10 小时前
安全工具篇&动态绕过&DumpLsass凭据&Certutil下载&变异替换&打乱源头特征
学习·安全·web安全·免杀对抗
凯子坚持 c11 小时前
CANN-LLM:基于昇腾 CANN 的高性能、全功能 LLM 推理引擎
人工智能·安全
QT.qtqtqtqtqt12 小时前
未授权访问漏洞
网络·安全·web安全
ba_pi14 小时前
每天写点什么2026-02-04(2.1)信息安全
安全·web安全
枷锁—sha15 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全