请问一下,活动量仪表盘这个界面怎么激活,实例怎么展现?我的服务器展开没有数据,但是是有消息记录的。
欢迎来到我的 CI/CD 系列的下一个章节,我们将探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。
今天,我们来谈谈互操作性。
问题
当您有一个有效的互操作性生产时,您有两个独立的流程:一个是处理消息的可以正常运行的生产流程,另一个是更新代码、生产配置和系统默认设置的 CI/CD 流程。
显然,CI/CD 流程会影响互操作性。 但问题是:
- 更新期间究竟发生了什么?
- 我们需要做些什么以在更新期间尽可能缩短或消除生产停机时间?
经过将近四年的停顿,我的 CI/CD 系列又回来了! 这些年来,我与多个 InterSystems 客户合作,为不同的用例开发 CI/CD 管道。 希望本文中提供的信息对您有所帮助。
此系列文章探讨了使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。
我们有一系列激动人心的话题要讨论:但今天,我们来谈谈代码之外的事情 – 配置和数据。
问题
之前我们探讨过代码提升,这在某种程度上是无状态的 – 我们总是从一个(大概)空实例到完整的代码库。 但有时,我们需要提供数据或状态。 不同的数据类型包括:
- 配置:用户、Web 应用、LUT、自定义架构、任务、业务伙伴等
- 设置:环境特定的键值对
- 数据:为了让应用正常工作,通常必须提供引用表等
我们来探讨所有这些数据类型,以及如何先将它们提交到源代码控制工具中,然后进行部署。
配置
系统配置分布在许多不同的类中,但 InterSystems IRIS 可以将大多数类导出为 XML。 首先是一个安全软件包,其中包含以下信息:
- Web 应用程序
- DocDB
- 域
- 审核事件
- KMIP 服务器
- LDAP 配置
- 资源
- 角色
- SQL 特权
- SSL 配置
- 服务
- 用户
所有这些类都提供 Exists、Export 和 Import 方法,允许您在不同的环境之间移动它们。
一些注意事项:
- 用户和 SSL 配置可能包含敏感信息,例如密码。
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- Git 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- 持续交付
- GitLab 安装和配置
- GitLab CI/CD
- 为何使用容器?
- 容器基础架构
- 使用容器的 CD
- 使用 ICM 的 CD
- 容器架构
在本文中,我们将讨论如何构建并部署您自己的容器。
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- Git 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- 持续交付
- GitLab 安装和配置
- GitLab CI/CD
- 为何使用容器?
- 容器基础架构
- 使用容器的 CD
- 使用 ICM 的 CD
在本文中,我们将使用 InterSystems Cloud Manager 构建持续交付。 ICM 是一个面向基于 InterSystems IRIS 的应用程序的云配置和部署解决方案。 它允许您定义所需部署配置,ICM 会自动提供这些配置。 有关详情,请参阅 ICM 概述。
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- Git 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- 持续交付
- GitLab 安装和配置
- GitLab CI/CD
- 为何使用容器
- 容器基础架构
- 使用容器的 CD
在第一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。
在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程,并介绍了持续交付。
在第三篇文章中,我们介绍了 GitLab 安装和配置以及将环境连接到 GitLab
在第四篇文章中,我们编写了 CD 配置。
在第五篇文章中,我们讨论了容器以及使用容器的方式(和原因)。
在第六篇文章中,我们将探讨运行包含容器的持续交付管道所需的主要组件以及这些组件如何协同运行。
在这篇文章中,我们将构建上一篇文章中探讨的持续交付配置。
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- 持续交付
- GitLab 安装和配置
- GitLab CI/CD
- 为何使用容器?
- 容器基础架构
- 使用容器的 GitLab CI/CD
在第一篇文章中,我们介绍了 Git 基础知识,以及为什么对 Git 概念的高层次理解对于现代软件开发如此重要,以及如何使用 Git 开发软件。
在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程和持续交付。
在第三篇文章中,我们介绍了 GitLab 的安装和配置以及如何将环境连接到 GitLab。
在第四篇文章中,我们编写了 CD 配置。
在 第五篇文章中,我们讨论了容器与如何(以及为什么)使用它们。
在本文中,我们将探讨运行使用容器的持续交付管道所需的主要组件,以及它们如何协同工作。
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- Git 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- 持续交付
- GitLab 安装和配置
- GitLab CI/CD
- 为何使用容器
- 使用容器的 GitLab CI/CD
在第一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。
在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程,并介绍了持续交付。
在第三篇文章中,我们介绍了 GitLab 安装和配置以及将环境连接到 GitLab
在第四篇文章中,我们编写了 CD 配置。
在这篇文章中,我们将介绍容器以及使用容器的方法(和原因)。
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- Git 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- 持续交付
- GitLab 安装和配置
- GitLab CI/CD
在第一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。
在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程,并介绍了持续交付。
在第三篇文章中,我们介绍了 GitLab 安装和配置以及将环境连接到 GitLab
在这篇文章中,我们将介绍编写 CD 配置。
计划
环境
首先,我们需要多个环境以及与之对应的分支:
| 环境 | 分支 | 交付 | 有权提交的角色 | 有权合并的角色 |
|---|---|---|---|---|
| 测试 | master | 自动 | 开发者、所有者 | 开发者、所有者 |
| 预生产 | preprod | 自动 | 无 | 所有者 |
| 生产 | prod | 半自动(按下按钮进行交付) | 无 |
所有者 |
开发周期
作为示例,我们将使用 GitLab 流程开发一个新功能,并使用 GitLab CD 进行交付。
- 在功能分支中开发功能。
- 对功能分支进行审查并将其合并到 master 分支中。
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- Git 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- 持续交付
- GitLab 安装和配置
- GitLab CI/CD
在上一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。 我们的侧重点仍是软件开发的实现部分,但本部分会介绍:
- GitLab 工作流 - 从想法到用户反馈的完整软件生命周期流程
- 持续交付 – 软件工程方式,团队通过这种方式在短周期内制作软件,从而确保软件可以随时实现可靠发布。 它的目的是更快速、更频繁地构建、测试和发布软件。
大家都搭建了测试环境。
有些人很幸运,可以在完全独立的环境中运行生产。
-- 佚名
.
在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:
- Git 101
- Git 流程(开发流程)
- GitLab 安装
- GitLab 工作流
- GitLab CI/CD
- 包含容器的 CI/CD
第一部分将介绍现代软件开发的基础 – Git 版本控制系统和各种 Git 流程。
第三十四章 使用派生密钥令牌进行加密和签名 - 使用 进行签名
要使用 进行签名,请使用以下步骤:
- 如果想要签署任何安全标头元素,请创建这些安全标头元素。
- 创建
并将其添加到WS-Security标头,如创建和添加中所述。
请注意,此步骤还会创建并添加 所基于的 元素。
- 根据派生的密钥令牌创建
元素。为此,请调用%XML.Security.Signature的Create()类方法。例如:
set dsig=##class(%XML.Security.Signature).Create(dkt)
此方法返回 %XML.Security.Signature 的实例,该实例表示 标头元素。签名值通过 HMAC-SHA1 摘要算法计算,使用 隐含的对称密钥。
元素适用于消息的一组默认部分;可以指定一组不同的部分。
- 将数字签名添加到
WS-Security标头元素。为此,请调用Web客户端或Web服务的SecurityOut属性的AddSecurityElement()方法。对于参数,请指定上一步中创建的签名对象。例如:
do .- 发送
SOAP消息。请参阅添加安全标头元素中的一般注释。
例如,以下客户端代码对 SOAP 主体和 进行加密:
// Create UsernameToken
set userToken=##class(%SOAP.Security.UsernameToken).第三十二章 使用派生密钥令牌进行加密和签名 - 使用
进行加密
要使用 进行加密,请使用以下步骤:
- 如果要加密一个或多个安全标头元素,请创建这些安全标头元素。.
- 创建
并将其添加到WS-Security标头,如创建和添加中所述。
请注意,此步骤还会创建并添加 所基于的 元素。
- 对于要加密的每个元素,请根据该元素创建一个
元素。为此,请调用%XML.Security.EncryptedData的Create()类方法。在此过程中,请指定以下参数:
a. 派生密钥令牌
b. 要加密的项目。省略此参数可加密正文。
c. 指定 元素如何引用 的宏。在此场景中,当前唯一支持的值是 $$$SOAPWSReferenceDerivedKey。
例如,加密 :
set refopt=$$$SOAPWSReferenceDerivedKey
set encryptedData=##class(%XML.Security.EncryptedData).Create(dkenc,userToken,refopt)
或者,加密正文:
set refopt=$$$SOAPWSReferenceDerivedKey
set encryptedData=##class(%XML.Security.HI 各位开发者们,
📅2024年9月23日🕑14:00-15:30🕞,InterSystems将举办线上研讨会,点击🔔此处🔔报名参会。
此次研讨会以“面向未来的数据平台——InterSystems IRIS五大亮点提速数据潜力挖掘与AI应用”为主题,帮助您了解InterSystems IRIS数据平台的五大亮点:
- 使用InterSystems IRIS for Health进行FHIR开发
- 使用Python进行互操作Production开发
- InterSystems IRIS列存储
- InterSystems IRIS外部表(Foreign Table)
- InterSystems IRIS向量和基于向量检索的患者相似度匹配
第三十章 使用派生密钥令牌进行加密和签名
IRIS 支持 WS-SecureConversation 1.4 定义的 元素。可以创建并使用 元素进行加密和签名,作为前三个主题中描述的方法的替代。
通常,会同时执行加密和签名。为简单起见,本主题分别介绍这些任务。有关结合加密和签名的信息,请参阅结合加密和签名。
概述
元素旨在携带发送者和接收者可以独立使用的信息来生成相同的对称密钥。这些方可以使用该对称密钥对 SOAP 消息的指定部分进行加密、签名或同时执行这两种操作。
要生成和使用 ,请执行以下操作:
- 生成一个对称密钥以供临时使用。
- 使用要向其发送消息的实体的公钥来加密对称密钥。这将创建一个
元素。
可以从该实体的请求消息中包含的 X.509 证书中获取公钥。或者可以提前获取它。
- 通过
P_SHA1算法从原始对称密钥计算出一个新的对称密钥。
这将创建一个引用 元素的 元素。
- 使用新的对称密钥进行加密或签名。
对这些活动使用不同的对称密钥被认为是一种很好的做法,这样就可以减少用于分析的数据量。
- 在消息中包含
元素和。
在 IRIS 中,派生密钥令牌也可以基于另一个派生密钥令牌。
创建并添加
作为参考,本节描述了后面几节中需要的常见活动。它描述了如何创建 并将其添加到 WS-Security 标头。您可以使用以下步骤或各小节中描述的变体。
- 可选择包含
%soap.
InterSystems IRIS 数据平台作为关系数据库使用时,传统上以行为单位存储数据。现在,由于底层数据结构的灵活性,您也可以按列存储数据。虽然每种选择都有其优点,但在列中存储数据(称为列式存储)可以在数据分析的业务中显著提高各种用例的性能。列存储自2022.2 版的IRIS起做实验功能引入, 2023.1 起正式支持,到目前已经迭代了几个版本。
假设一家公司使用基于行的存储来保存收到的所有订单数据,跟踪订单 ID、订单日期、客户、优先级、状态和总金额等数据,使用行存储可以被示意为下面的图形:

每一行数据在逻辑上对应一个订单,单行中的所有数据在物理上存储在一起。
这种模式便于快速添加或更新订单。订单可以一次添加一个,数据库的每次写入正好对应一行。当发生了订单的事务,除了要更改的行之外,无需访问或更新表中的任何数据。
让我们考虑另外的情况:假设公司想找到每个月的平均销售收入。为此,您只需要两列的信息: 订单日期和总金额。但是,如果使用基于行的存储,则必须检索每个订单的所有数据才能获得此信息。即使在 OrderDate 列上使用了索引,仍需要读取日期范围内每个订单的完整行,才能获得总金额。如果订单数量较多,这样做的效率会非常低。
这就是列式存储的作用所在。数据不是按行存储在一起,而是按列存储在一起。从逻辑上讲,表和数据之间的关联保持不变。改变的只是物理存储方法。
第三十一章 使用派生密钥令牌进行加密和签名 - 变体:创建隐式
变体:创建隐式
还可以创建隐式 ,这是引用 的快捷方法。在此方法中:
- 消息中不包含
- 在使用
的元素中,元素指定Nonce属性,该属性包含用于的nonce值。这向消息接收者表明派生密钥令牌是隐含的,并且是从引用的令牌派生的。
要创建隐式 ,请使用前面描述的一般过程,但有两处更改:
- 对于派生的密钥令牌实例,将
Implied属性设置为1。
set dkt.Implied=1
- 请勿将
元素添加到WS-Security标头元素。
使用 的方式与将其包含在消息中的方式完全相同。
变体:引用 的 SHA1 哈希
在此变体中(仅适用于 Web 服务),发送者不在消息中包含 元素,而是引用密钥的 SHA1 哈希。Web 服务可以引用在入站消息中收到的 元素。
使用前面的一般程序,但需做以下更改:
- 步骤
2-4是可选的。. - 省略步骤
5(不要添加)。 - 在步骤
6中,当您使用Create()创建派生密钥令牌时,若要使用从客户端收到的,请省略第一个参数。或者,如果您已创建,请将其用作第一个参数。
指定 $$$SOAPWSReferenceEncryptedKeySHA1
演示程序
使用向量搜索在 IRIS for Health 上运行的病人相似性比较演示。 使用向量搜索计算相似度,在向量基础上比较不同病人之间的个人属性,如姓名、出生日期、地址等。得分越高,被比较的病人越有可能是同一个人。 本演示程序使用 sentence-transformers model 将文本转换为向量,然后使用 IRIS 向量函数来存储、读取和比较向量。
流程原理

安装
- 使用Git克隆存储库
- 演示程序将使用text2vec-base-chinese。你也可以下载任何你想要的transformer模型,并将其存储到一个 本地路径中,如 D:\Coding\EMPIDemo\image-iris\llm\text2vec-base-chinese ,然后在 docker-compose.yml 文件的 volumes 部分更改目录指向本地模型根目录。
- 启动Docker容器 请注意,程序将下载并安装 Python sentence-transformers模块,并安装 FHIR 存储库以存储患者信息,因此将占用大约 15~16GB 磁盘存储空间。
运行演示
- 访问WebUI
- 处理数据的IRIS Procuction
- 相关代码 嵌入式 python 用于调用sentence-transformers来执行向量化,可在 EMPIDemo.Util.Vector 中找到。
第二十九章 添加数字签名 - 指定 的规范化方法
默认情况下, 元素使用Exclusive XML Canonicalization进行规范化,
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
要使用包容性 XML 规范化来规范化此元素,请执行以下操作:
Set sig.SignedInfo.CanonicalizationMethod.Algorithm=$$$SOAPWSc14n
其中 sig 是 %XML.Security.Signature 的实例。
在这种情况下, 包含以下内容:
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
添加签名确认
WS-Security 1.1 功能使 Web 客户端能够确保收到的 SOAP 消息是响应 Web 客户端发送的原始请求而生成的。客户端请求通常经过签名,但并非必须如此。在此机制中,Web 服务将 元素添加到安全标头元素,Web 客户端可以检查该 元素。
第二十八章 添加数字签名 - 指定摘要方法
指定摘要方法
默认情况下,签名的摘要值是通过 SHA-1 算法计算的,安全标头中的 元素包含如下内容:
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
<DigestValue>waSMFeYMruQn9XHx85HqunhMGIA=</DigestValue>
可以为签名指定不同的摘要方法。为此,调用 %XML.Security.Signature 实例的 SetDigestMethod() 方法。对于参数,请使用以下宏之一(包含在 %soap.inc 文件中):
$$$SOAPWSsha1 (the default)
-$$$SOAPWSsha256
-
$$$SOAPWSsha384 -
$$$SOAPWSsha512
do sig.SetDigestMethod($$$SOAPWSsha256)
指定签名方法
默认情况下,签名值是通过 RSA-SHA256 算法计算的,安全标头中的 元素包含如下内容:
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"></SignatureMethod>
.第二十七章 添加数字签名 - 变体:使用签名的 SAML 断言
要添加在签名的 SAML 断言中使用证书的数字签名,请执行以下操作:
- 可选择包含
%soap.inc包含文件,它定义了可能需要使用的宏。 - 如果要对任何安全标头元素进行签名,请创建这些安全标头元素。例如:
set utoken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
- 使用
Holder-of-key方法的元素创建签名的 SAML 断言。请参阅创建和添加SAML令牌。 - 创建
元素。创建时,使用已签名的SAML断言作为CreateX509()类方法的第一个参数。例如:
set signature=##class(%XML.Security.EncryptedKey).CreateX509(signedassertion)
- 将数字签名添加到
WS-Security标头元素。为此,请调用 Web 客户端或Web服务的SecurityOut属性的AddSecurityElement()方法。对于参数,请指定上一步中创建的签名对象。例如:
do ..SecurityOut.AddSecurityElement(dsig)
- 发送
SOAP消息。
第二十六章 添加数字签名 - 示例
示例
此示例显示了对其响应消息进行签名的 Web 服务。
为了使此示例在自己的环境中运行,请首先执行以下操作:
- 为服务器创建证书。
- 将此证书加载到服务器端的
IRIS中,创建名为servercred的凭证。执行此操作时,还要加载私钥文件并提供其密码(这样Web服务在签署其响应消息时就不必提供该密码。)
该 Web 服务指的是具有此确切名称的 IRIS 凭证集。
Class DSig.DivideWS Extends %SOAP.WebService
{
/// Name of the Web service.
Parameter SERVICENAME = "DigitalSignatureDemo";
/// SOAP namespace for the Web service
Parameter NAMESPACE = "http://www.myapp.org";
/// use in documentation
Method Divide(arg1 As %Numeric = 2, arg2 As %Numeric = 8) As %Numeric [ WebMethod ]
{
Do .第二十五章 添加数字签名
本主题介绍如何向 IRIS Web 服务和 Web 客户端发送的 SOAP 消息添加数字签名。
通常,会同时执行加密和签名。为简单起见,本主题仅介绍签名。有关结合加密和签名的信息,请参阅主题结合加密和签名。
主题使用派生密钥令牌进行加密和签名描述了向 SOAP 消息添加数字签名的另一种方法。
数字签名概述
可以使用数字签名来检测消息是否被篡改,或者简单地验证消息的某一部分是否确实由所列实体生成。与传统的手工签名一样,数字签名是对文档的附加,只有文档的创建者才能创建,并且不容易伪造。
IRIS 对 SOAP 消息的数字签名的支持基于 WS-Security 1.1。反过来,WS-Security 遵循 XML 签名规范。根据后者的规范,要对 XML 文档进行签名:
- 使用摘要函数来计算文档一个或多个部分的哈希值。
- 将摘要值连接起来。
- 使用私钥加密串联摘要。(这是只有才能执行的计算。)
- 创建
元素,其中包含以下信息:
- 对已签名部分的引用(以表明该签名适用于消息的哪些部分)。
- 加密的摘要值。
- 使接收者能够识别用于解密加密摘要值的公钥的信息。
此信息可以包含在元素中,或者 元素可以包含对包含 X.509 证书或签名的 SAML 断言的二进制安全令牌的直接引用。在后一种情况下,必须在添加 元素之前将安全令牌添加到消息中。
此信息还可以让收件人验证您是公钥/私钥对的所有者。
第二十四章 加密安全标头元素 - 基本示例
以下示例调用 Web 客户端并发送已加密的 。在此示例中,正文未加密。
Set client=##class(XMLEncrSecHeader.Client.XMLEncrSecHeaderSoap).%New()
// Create UsernameToken
set user="_SYSTEM"
set pwd="SYS"
set userToken=##class(%SOAP.Security.UsernameToken).Create(user,pwd)
//get credentials for encryption
set cred = ##class(%SYS.X509Credentials).GetByAlias("servernopassword")
//get EncryptedKey element and add it
set encropt=$$$SOAPWSEncryptNone ; means do not encrypt body
set enckey=##class(%XML.Security.EncryptedKey).第二十三章 加密安全标头元素
本主题介绍如何加密 Web 服务和 Web 客户端发送的消息中的 WS-Security 标头内的元素。(此处描述的工具也可单独使用或与安全标头元素结合使用来加密 SOAP 主体。)
通常,会同时执行加密和签名。为简单起见,本主题仅介绍加密。有关结合加密和签名的信息,请参阅结合加密和签名。
使用派生密钥令牌进行加密和签名主题描述了加密 SOAP 消息部分内容的另一种方法。
加密安全标头元素
与上一主题中显示的加密技术不同,加密 WS-Security 标头元素的过程要求您指定 元素如何连接到相应的 元素。
要加密安全标头元素,请执行以下操作:
- 可选择包含
%soap.inc包含文件,它定义了可能需要使用的宏。 - 创建要加密的标头元素。例如:
set userToken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
- 获取包含将接收
SOAP消息的实体的公钥的凭证集。请参阅以编程方式检索凭证集。
set credset=..SecurityIn.Signature.X509Credentials
请务必检查返回对象的类型,看它是否是 %SYS.X509Credential的实例,如以编程方式检索凭据集中所述。
- 根据凭证集创建加密密钥。为此,调用
%XML.
第二十二章 加密 SOAP 主体 - 变体:使用签名的 SAML 断言
要使用签名的 SAML 断言中的证书中包含的公钥进行加密,请执行以下操作:
- 跳过前面步骤中的步骤
1–4。 - 使用
Holder-of-key方法的元素创建签名的SAML断言。请参阅创建和添加SAML令牌。 - 创建
元素。执行此操作时,使用签名的SAML断言作为CreateX509()类方法的第一个参数。例如:
set enckey=##class(%XML.Security.EncryptedKey).CreateX509(signedassertion)
- 继续前面步骤中的步骤5。
消息加密示例
在此示例中,Web 客户端(未显示)发送签名的请求消息,而 Web 服务发送加密响应。
Web 服务从请求消息签名中的客户端证书中获取公钥,并使用该公钥在其响应中添加一个加密的 元素。 元素使用客户端的公钥加密,它包含用于加密响应消息正文的对称密钥。
Web服务如下:
Class XMLEncr.DivideWS Extends %SOAP.WebService
{
Parameter SECURITYIN = "REQUIRE";
Parameter SERVICENAME = "XMLEncryptionDemo";
Parameter NAMESPACE = "http://www.第二十一章 加密 SOAP 主体 - 变体:使用可识别证书的信息
包含序列化、base-64 编码格式的证书。可以忽略此令牌,而改用标识证书的信息;接收方使用此信息从相应位置检索证书。为此,请使用上述步骤,并进行以下更改:
- 跳过步骤
3和4。也就是说,不要添加。 - 在步骤
5(创建加密密钥)中,使用步骤1中设置的凭据(而不是二进制安全令牌)作为CreateX509()的第一个参数。例如:
set enckey=##class(%XML.Security.EncryptedKey).CreateX509(credset,,referenceOption)
对于第三个参数(referenceOption),可以指定 元素如何使用证书。
如果指定一个凭据集作为第一个参数(正如我们在此变体中所做的那样),则referenceOption的默认值为$$$SOAPWSReferenceThumbprint。 可以选择指定一个值,如本节所述。 可以使用除$$$SOAPWSReferenceDirect之外的任何值。
X.509 证书的参考选项
WS-Security 标头简介部分介绍了在 SOAP 消息中使用证书的一种方法。在该示例中,数字签名由两个标头元素组成:
元素,以序列化的base-64编码形式携带证书。元素,带有签名并且包含对二进制安全令牌的直接引用。
第十七章 手动添加安全元素
本主题主要介绍如何手动向 IRIS Web 服务和 IRIS Web 客户端发送的消息中添加安全元素。
以下主题提供了有关特定安全任务的详细信息。
添加安全标头元素
要将安全元素添加到 WS-Security 标头元素,请在 Web 客户端或 Web 服务中使用以下常规过程:
- 创建适用类的实例。为此,可以使用名为
Create()或CreateX509()的方法(具体取决于类)。该实例表示WS-Security标头元素之一,例如。or - 通过更新 Web 客户端或
Web服务的SecurityOut属性,将每个实例添加到WS-Security标头元素。为此,请调用AddSecurityElement()方法。 - 发送
SOAP消息。WS-Security标头包含在消息中,并包含添加到其中的元素。 - 对于后续传出消息:
- 对于
Web客户端,SecurityOut属性保持不变,以便此实例的后续出站消息包含添加的安全标头。如果不希望这样,请将SecurityOut属性设置为null。 - 对于
Web服务,在第一个出站SOAP消息之后,SecurityOut属性会自动设置为null`。
标题元素的顺序
当将多个安全元素添加到标头时,按适当的顺序添加安全标头元素非常重要。

