当前位置: 首页 > article >正文

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

文章目录

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

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

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

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

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

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

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

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

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

  • $$$SOAPWSReferenceSCT(本地引用)— 引用的 URI 属性以 # 开头,指向 <SecurityContextToken>元素的 wsu:Id 值,该值必须包含在消息中。
  • $$$SOAPWSReferenceSCTIdentifier(远程引用)——引用的 URI 属性包含 <SecurityContextToken> 元素的 <Identifier> 值,该值不必包含在消息中。
 set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(SCT,$$$SOAPWSReferenceSCT)
  1. 使用新的 <DerivedKeyToken> 来指定安全标头。请参阅使用派生密钥令牌进行加密和签名。
  2. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。
  //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() 方法。例如:

 set status=client.CancelSecureConversation()

该方法返回一个状态值。

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


http://www.kler.cn/a/349035.html

相关文章:

  • HTTP代理与HTTP协议的区别详解
  • MATLAB智能优化算法-学习笔记(5)——蚁群算法求解容量受限的车辆路径问题
  • SpringBoot环境下购物推荐网站的高效开发策略
  • 数据结构-4.4.朴素模式匹配算法
  • OpenAI 公布了其新 o1 模型家族的元提示(meta-prompt)
  • Docker在linux系统中的下载与使用
  • Android笔记(二十四)基于Compose组件的MVVM模式和MVI模式的实现
  • 教程|插件的搜索与使用(0基础)
  • 【尚硅谷】FreeRTOS学习笔记(更新中更新时间2024.10.12)
  • 【LeetCode】每日一题 2024_10_15 三角形的最大高度(枚举、模拟)
  • SpringBoot项目热部署-devtools
  • QTableView列单元格根据内容调整大小,表头可拖动,设置表头填充满,单元格单选
  • # 执行 rpm -qa | grep qq 查询软件安装情况时报错 数据库损坏 db3 error(-30974)
  • 【Java】单例模式详解与实践
  • Spring Boot异步任务、任务调度与异步请求线程池的使用及原理
  • JAVA基础 day13 多线程
  • 【SQL】深入探索SQL调优:提升数据库性能的全面指南
  • UE5 猎户座漂浮小岛 03 视觉效果 粒子
  • 腾讯云视立方·直播 SDK 个人信息保护规则
  • node.js安装卸载使用