第三十九章 创建安全对话

文章目录

第三十九章 创建安全对话

IRIS 支持安全对话,遵循 WS-SecureConversation 1.3 规范。本页介绍如何手动创建安全对话。

概述

在安全对话中,Web 客户端向 Web 服务发出初始请求并接收包含 <SecurityContextToken> 的消息。此元素包含双方都可以使用的对称密钥的信息。此信息指的是只有双方知道的共享密钥。然后双方可以在后续交换中使用对称密钥,直到令牌过期或客户端取消令牌。

双方不应该直接使用 <SecurityContextToken> 执行这些任务(不推荐),而应该从中生成一个 <SecurityContextToken>,然后使用它进行加密、签名、解密和签名验证。

共享密钥可以通过以下任一方式指定:

  • 双方共同提供随机熵值。这是典型的情况。
  • 由客户端,如果客户端提供了一个随机的客户端熵值。
  • 由服务提供,如果服务提供了随机的服务熵值。

开始安全对话

Web 客户端启动安全对话。要在 IRIS 中执行此操作,请在 Web 客户端中执行以下操作:

  1. 加密 SOAP 主体。客户端发送的请求包含必须保护的信息;此信息在 SOAP 主体中携带。

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

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

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

  1. 在调用 %SOAP.WST.RequestSecurityTokenCreateIssueRequest() 类方法。此方法返回此类的一个实例,客户端将使用该实例请求安全对话。该方法具有以下参数:

a. Interval间隔,请求的令牌的生命周期。默认值为 300 秒;使用空字符串则不指定生命周期。

b. clientEntropy,在上一步中创建的客户端熵对象(如果适用)。

c. requireServerEntropy,一个布尔值,指定服务器在创建 <SecurityContextToken>时是否必须使用服务器熵。默认值为 false

java 复制代码
 set RST=##class(%SOAP.WST.RequestSecurityToken).CreateIssueRequest(300,clientEntropy,1)
  1. 可以选择实例中指定 %SOAP.WST.RequestSecurityTokenComputedKeySize 属性。
  2. 调用 Web 客户端的 StartSecureConversation() 方法。此方法向 Web 服务发送一条消息,请求双方都可以使用的 <SecurityContextToken>。此方法接受一个参数,即上一步中在中打开的 %SOAP.WST.RequestSecurityToken实例。

此方法返回一个状态代码,代码应该检查该代码。如果响应表示成功,则客户端的 SecurityContextToken 属性包含一个 %SOAP.WSSC.SecurityContextToken 实例,该实例表示从客户端返回的 <SecurityContextToken>。此元素包含有关对称密钥的信息,双方都可以使用该密钥进行加密、签名、解密和签名验证。

  1. 使用 <SecurityContextToken> 根据需要重新指定安全标头。请参阅使用 <SecurityContextToken>
java 复制代码
  //encrypt the SOAP body because it contains part of the shared secret key
  Set x509alias = "servernopassword" 
  Set cred = ##class(%SYS.X509Credentials).GetByAlias(x509alias)
  set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred)
  do client.SecurityOut.AddSecurityElement(enckey)
 
  // if client entropy to be passed
  set entropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)
  // request with 300 second lifetime and computed key using both client 
  //and server entropy.
  set RST=##class(%SOAP.WST.RequestSecurityToken).CreateIssueRequest(300,entropy,1)
  set sc=client.StartSecureConversation(RST)  ; sends a SOAP message
相关推荐
晴天丨15 小时前
Vite:下一代前端构建工具深度解析与实践指南
前端
多来哈米15 小时前
Jenkins配置vue前端项目(最简单的操作)
运维·前端·jenkins
一只叁木Meow15 小时前
Vue scoped CSS 与 Element Plus Drawer 样式失效问题深度解析
前端
用户924262570073115 小时前
Vue 学习笔记:组件通信(Props / 自定义事件)与插槽(Slot)全解析
前端
UIUV15 小时前
Ajax 数据请求学习笔记
前端·javascript·代码规范
FogLetter15 小时前
手写useInterval:告别闭包陷阱,玩转React定时器!
前端·react.js
神秘的猪头15 小时前
Vibe Coding 实战教学:用 Trae 协作开发 Chrome 扩展 “Hulk”
前端·人工智能
小时前端15 小时前
当递归引爆调用栈:你的前端应用还能优雅降落吗?
前端·javascript·面试
张可爱15 小时前
20251112-问题排查与复盘
前端
ZKshun15 小时前
WebSocket指南:从原理到生产环境实战
前端·websocket