第三十九章 创建安全对话

文章目录

第三十九章 创建安全对话

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
相关推荐
SamChan906 分钟前
用Python+Requests批量翻译PDF:从脚本到调度
后端·python·microsoft·ai·pdf·机器翻译
90后的晨仔6 分钟前
uni-app 跨端布局与适配技术指南
前端
草莓熊Lotso7 分钟前
【LangChain】核心技术:嵌入模型与向量存储完全指南
服务器·网络·python·langchain
zyplayer-doc8 小时前
VuePress类静态文档站和动态知识库怎么选:两种技术路线的适用场景
javascript·人工智能·后端·安全·智能手机
leisoo80978 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
KKKlucifer8 小时前
拨开接口黑盒迷雾:运营商第三方合作接口安全审计与准入管控落地实践
网络·人工智能·安全
WangYan20228 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
紫禁玄科9 小时前
Shai-Hulud:npm生态的自我复制蠕虫风暴
前端·npm·node.js
东风破_9 小时前
后端API没写好,前端难道干等着吗?
前端
百变梦仔9 小时前
从读项目到纠偏交付:我把 Codex 前端任务闭环升级成了第二版
前端