#InterSystems IRIS for Health

0 关注者 · 922 帖子

InterSystems IRIS for Health™ 是全球第一个也是唯一一个专门为医疗应用程序的快速开发而设计的数据平台,用于管理全世界最重要的数据。它包括强大的开箱即用的功能:事务处理和分析、可扩展的医疗保健数据模型、基于 FHIR 的解决方案开发、对医疗保健互操作性标准的支持等等。所有这些将使开发者能够快速实现价值并构建具有突破性的应用程序。了解更多信息

文章 姚 鑫 · 十一月 10, 2024 3m read

第十七章 TCP 客户端 服务器通信 - 使用OPEN命令

使用OPEN命令

OPEN命令保留一个TCP绑定设备供使用。其语法为:

OPEN devicename:parameters:timeout:mnespace
  • devicename - 一个|TCP|格式的字符串,后面跟着一些数字数字。设备名称的数字部分称为设备标识符。如果OPEN参数中没有指定端口号,则该设备标识符必须是唯一的位端口号。如果在参数中指定了端口号(这是首选的实践),这个设备标识符可以是任何唯一的数字(最多),只要单个作业使用的所有TCP设备名称是不同的。

  • - 可选-一系列一个或多个设备参数,用括号括起来,用冒号()分隔。如果省略了某个参数,请为缺少的参数指定冒号分隔符。(对于服务器端OPEN,始终省略第一个参数。)。具体参数说明如下。

    如果只指定第一个参数(),可以省略括号。例如客户端。如果不指定参数,则可以省略圆括号,但必须保留冒号作为分隔符。例如:服务器端。

  • - 可选- 尝试打开TCP设备的最大秒数。如果在此间隔内没有成功,它会将设置为,并将控制权返回给进程。如果成功,它会将设置为。在来自客户端的命令中包含超时可防止客户端系统在服务器忙于处理另一个客户端时尝试打开连接时挂起。服务器一次只能打开一个连接。

  • - 可选-支持所有的对象脚本OPEN命令。没有用于绑定的预定义助记符空间。

0
0 117
文章 姚 鑫 · 十一月 9, 2024 3m read

第十六章 TCP 客户端/服务器通信

TCP 客户端/服务器通信

本章介绍如何使用 TCP/IPIRIS 数据平台进程之间设置远程通信。

IRIS 支持两种互联网协议 ():TCP 和 。这些 协议允许 进程与本地或远程系统上的进程通信,无论这些进程是否正在运行 。

  • TCP IRIS 传输控制协议 (TCP) 绑定。在服务器和单个客户端之间建立双向连接。提供具有错误检查和纠正以及消息确认的可靠字节流数据传输。
  • UDP IRIS 用户数据报协议 () 绑定。提供服务器和大量客户端之间的双向消息传输。 不是基于连接的;每次传输数据包都是一个独立的事件。为本地数据包广播和远程多播提供快速和轻量级的数据传输。本质上不如 可靠。不提供消息确认。

TCP 绑定将 连接到广泛的网络标准,这样 IRIS 用户就可以通过 命令使用底层网络协议的基本功能。

协议允许系统进行通信,即使它们使用不同类型的网络硬件。例如, 通过 连接在使用以太网的系统和使用令牌环的另一个系统之间传输消息。 控制数据传输的准确性。 或 协议在网络或 上的不同系统之间执行实际数据传输。

使用 绑定,可以创建客户端-服务器系统的客户端和服务器部分。在客户端-服务器类型的分布式数据库系统中,一个或多个客户端系统上的用户可以处理存储在另一个系统(称为服务器)上的数据库中的信息。

连接概述

0
0 109
文章 姚 鑫 · 十一月 8, 2024 4m read

第十五章 IRIS 进程之间的通信

本页介绍如何在两个或多个 IRIS 数据平台进程之间建立通信。

介绍

作业间通信 (IJC) 设备是一组特殊设备编号,可让在两个或多个 IRIS 进程之间传输信息。这些流程可以是作业流程或交互式流程。

IJC 设备成对工作。最多可以有 个 IJC 设备对。使用称为接收器的偶数设备来读取数据。使用称为发送器的奇数设备来写入数据。尝试从发送器读取或写入接收器会导致 错误。

可以向 设备发出 命令,就像向任何其他设备一样。向设备发出OPEN和USE命令后,进程可以发出:

  • 向接收器设备读取命令
  • 将命令写入发送器设备

一次只能有一个进程可以打开设备。

对基于 IRIS 设备表中映射的相对顺序,可以使用管理门户的配置选项查看和编辑该表。

每对设备都与一个 内存缓冲区关联。当进程向任何奇数 设备发出命令时 会将数据写入该设备对的缓冲区中。当另一个进程向该对中的偶数设备发出命令时 会从同一缓冲区读取数据。

写入的数据以先进先出的方式缓冲在内存中。如果在设备为空时发生 ,则发出该信号的进程将挂起,直到另一个进程发出相应的 信号。缓冲区已满时发生的写入将挂起,直到另一个进程从该缓冲区读取数据。

将消息写入缓冲区后,即使关闭发送器,它也会保留在那里直到被读取。多个用户可以向发射器发出 、 、 和命令,一次一个。随后的

0
0 102
文章 姚 鑫 · 十一月 7, 2024 3m read

第十四章 本地进程间通信(管道) - 用于进程间通信的 CLOSE 命令

用于进程间通信的 CLOSE 命令

如果使用带Q (/QUEUE) 参数代码的OPEN创建子进程,则该子进程可能会在设备上的CLOSE操作中继续存在。排队的进程间通信管道的生存能力取决于平台。在 系统上,子进程始终在后继续存在。在 系统上,进程的生存取决于进程的年龄。刚刚启动的子进程不会在操作中幸存,但是一旦子进程完全建立,它就会在 操作中幸存。

在 系统上,可以指定关闭管道命令设备时命令应等待的时间。超时默认值为 30 秒。可以通过指定命令位置参数来修改此默认值。可以通过指定可选的位置参数来覆盖命令的默认或指定超时。 “I”参数指定立即关闭( 秒后关闭)。 语法如下:

CLOSE cpipename:"I"

使用命名管道与 进行通信

在 上,在 中使用命名管道就像使用 设备一样,但使用设备名称 。 参数如下:

OPEN "|NPIPE|3":(server:pipename)

其中是计算机名称, 是要连接到的管道的名称。

要连接到本地管道名,请使用“.” (引用的期间)作为服务器。要创建管道(作为服务器),请使用 (不含内容的引号)作为服务器名称。以下是所有有效的服务器名称:

   OPEN "|NPIPE|3":(".":"localpipe")
   OPEN "|NPIPE|3":("mother":"test")
   OPEN "|NPIPE|3":("":"info")
0
0 122
文章 姚 鑫 · 十一月 6, 2024 2m read

第十三章 本地进程间通信(管道) - 用于进程间通信的 READ 命令

用于进程间通信的 READ 命令

语法

READ:pc readargument,...

READ 从管道读取数据。

其中reargument可以是:

formatting-mode
string
variable:timeout
*variable:timeout
variable#n:timeout

I格式化模式参数与管道一起使用。 参数允许对命名管道发出定时READ,而不会丢失跟随在一个部分记录中的任何数据。错误。当在上使用此参数时, 会忽略消息。

默认情况下,格式化模式的值处于关闭状态。如果在没有超时的情况下在命令中包含此参数,则进程将挂起,直到有数据要处理。

退出代码

可以检索命令管道 () 进程的退出代码。必须在 之前检索此退出代码设备已关闭。它是通过%SYSTEM.Process 类的方法获得的。退出代码始终是整数值。如果退出代码不可用,该方法将返回空字符串并设置状态参数和解释,如以下示例所示:

  SET exitcode=$SYSTEM.Process.PipeExitCode(device, .status)
  IF exitcode="" {DO $SYSTEM.OBJ.DisplayError(status)}
  ELSE {WRITE "CPIPE exit code is ",exitcode } 
0
0 92
文章 姚 鑫 · 十一月 5, 2024 2m read

第十二章 本地进程间通信(管道) - OPEN 和 USE 命令关键字

OPENUSE 命令关键字

以下列表描述了用于使用OPEN和命令控制进程间通信管道的关键字。

/IOTABLE[=name]

默认值:如果未指定名称,则使用设备的默认 转换表。

对应K\name\参数代码,为设备建立I/O转换表。

默认值:

与K参数代码相关。 或 /TRANSLATE= n (对于的非零值)启用设备的 转换。 如果值为零,则会禁用设备的 转换。

默认值:如果未指定名称,则使用设备的默认 操作表。

对应参数代码,为设备建立动作表。

仅限 关键字

以下列表描述了仅使用命令控制进程间通信管道的关键字。

指定要在新进程中设置的环境变量。有两种指定值的方法:

  • 明确地说。例如:
/ENV=(name1:value1,name2:value2)
  • 通过多维数组。例如:
 Set arr(name1)=value1
 Set arr(name2)=value2

// then later use the following in the OPEN command:
  /ENV=arr...

这些示例显示了两个环境变量,但可以有任意数量。显式列表必须括在括号中。

默认值:

对应于 参数代码,它指定应无限期地重试操作(忽略任何 条件)或直到指定的超时到期。 或 (对于n的非零值)启用参数代码,

0
0 74
文章 姚 鑫 · 十一月 3, 2024 2m read

第十章 本地进程间通信(管道) - 用于进程间通信的 OPEN 命令

用于进程间通信的 OPEN 命令

OPEN命令允许程序与 IRIS 外部的进程进行通信。

OPEN Arguments

管道名称

仅命令管道— “|CPIPE|”或"" ,其中表示用户指定的唯一标识符。

程序

命令管道可以使用命令 或不使用命令 shell(直接)执行程序。在大多数情况下,首选不使用命令 shell 执行。标准管道使用命令 执行程序。

仅命令管道— 要在不使用命令 的情况下执行,请指定 。如果程序有参数,则必须使用 关键字指定它们。如果指定 或 关键字,则无需命令 即可执行程序: 、 和都是有效的语法。 可以采用单个参数、以逗号分隔的参数列表或数组。例如, 。可以使用数组指定可变数量的参数:

  SET array(1)=arg1, array(2)=arg2, array=2
  OPEN device:(/COMMAND=cmd:/ARGS=array...)

要使用命令 执行,请指定 ,并省略 和 关键字。

程序字符串包含系统上安装的程序的完整路径名。它包含要在主机系统上执行的命令名称及其参数(如果有)。对于标准管道,限制为 个字符。

0
0 82
文章 姚 鑫 · 十一月 2, 2024 2m read

第九章 本地进程间通信(管道)

本页介绍如何通过管道与 IRIS® 数据平台外部的进程建立通信。

介绍

可以通过管道在 IRIS 进程和外部 UNIX®Windows 进程之间进行通信,就像在 或 操作系统级别一样。可以将输出发送到管道或从管道接收输入。管道为单向;不能同时读取和写入同一个程序。

当打开另一个程序的管道进行输出时,可以像写入顺序文件一样对其进行写入。然后程序使用编写的内容作为其输入流。当希望 进程与外部进程共享资源时,此功能特别有用。

打开 实用程序的管道

可以打开通往 IRIS 实用程序以及 或 Windows 进程的管道。在将管道用于实用程序 之前,系统管理员必须在 系统上定义管道设备。

系统管理员定义管道设备后,当运行实用程序(例如 )时,可以使用系统管理员定义的助记符回答提示。输出会自动发送到该设备。

管道和命令管道

支持标准管道和命令管道 ()。标准管道用于相对较短的命令字符串,其中命令名称及其参数少于 256 个字符。当命令字符串长度为 个字符或更长时,使用命令管道。在这两种情况下,管道只能在 和 系统上使用。

标准管道

以下是标准管道的命令语法:

OPEN program:(parameters):timeout

因为

0
0 121
文章 姚 鑫 · 十一月 1, 2024 2m read

第八章 在 I/O 命令中指定设备 - 通过 IRIS ID 指定设备

通过 IRIS ID 指定设备

为了与其他 产品兼容并方便起见,可以通过设备编号(存储在设备表中)来引用设备。系统管理员可以使用管理门户将这些号码链接到设备。选择“系统管理” 、 “配置” 、 “设备设置” 、 “设备”以创建新设备或编辑现有设备。

系统管理员还可以将一个数字转换为另一个数字。因此,可以发出OPEN 47IRIS 会将其转换为OPEN 49

下表显示了设备编号。

IRIS 设备编号和设备

Device Numbers 设备编号 Devices 设备
0 主要设备(您登录的设备)。
2 IRIS 假脱机程序。 :助记符 适用于该设备。
设备编号无效。尝试打开它会返回 错误,而不等待超时到期。
63 查看缓冲区。
20-46, 200-223 常规联锁装置。
作业间通信设备。

示例

要打开假脱机程序,请发出以下命令:

OPEN 2

指定磁盘上的文件

可以使用双引号括起来的操作系统文件规范来打开磁盘文件。

Windows 文件规范具有以下格式:

文件规范具有以下格式:

/directory/name

UNIX 示例

如果 或

0
0 100
文章 姚 鑫 · 十月 31, 2024 2m read

第七章 在 I/O 命令中指定设备

当使用 I/O 命令OPENUSE和在除正在使用的设备之外的任何设备上处理 时,必须指定一个 设备。可以根据设备类型以三种方式之一指定设备,如下表所示。

在 命令中指定设备

Type of Specification 规格类型 Use for these Devices 用于这些设备
IRIS 设备名称 Terminals and Printers 终端和打印机
IRIS 设备 ID 或设备别名 除顺序文件外的所有设备
File Name 文件名 Sequential Files 顺序文件

请注意, 和 UNIX® 处理打印机I/O 的方式不同。有关详细信息,请参阅打印机。

按设备名称指定终端和打印机

如果的 操作是针对终端(或某些平台上的打印机),则可以使用操作系统( 或 )应用的设备名称来指定设备。形式如下:

OPEN "device"  
USE "device"  
CLOSE "device"

其中是设备的操作系统名称,用引号引起来。设备的最大长度为 个字符。

在 系统上指定终端

要打开连接到串行通信端口的 设备,请使用以下语法指定OPEN命令:

OPEN "comn:"
0
0 127
文章 姚 鑫 · 十月 30, 2024 2m read

第六章 主设备、当前设备、空设备

明确使用主设备

USE 0USE $principal向进程的主体设备隐式发出OPEN命令。如果另一个进程拥有该设备,则该进程会挂在隐式上,就像它遇到任何时一样。

为该进程不拥有的任何其他设备(由于先前的命令)发出命令会产生错误。

仅当进程获取设备时,没有超时的OPEN命令才将控制权返回给进程。可以通过键盘中断命令(如 )中断打开命令。由于保护问题或无效设备名称而无法成功的OPEN将永远挂起。当在OPEN命令中指定超时时, 将在超时到期时将控制权返回给进程。

使用主设备的选项

根据主要设备的性质,可以指定其他特定于设备的参数,这些参数对于管道(进程间通信) 、文件和终端 是不同的。例如,可以使用 连接打开主设备:

USE $principal:(::/TLS=ConfigName)

其中是同一实例中定义的 配置的名称。

空设备

如果应用程序生成不希望出现在屏幕上的无关输出,可以将该输出定向到空设备。可以通过发出带有适当参数的 命令来指定空设备(见表)。 将其视为虚拟设备。

空设备参数

Platform 平台 Null Device Argument 空设备参数
UNIX® /dev/null/
Windows

后续命令立即返回空字符串。随后的WRITE命令立即返回成功。没有读取或写入实际数据。 NULL 设备完全绕过

0
0 109
文章 姚 鑫 · 十月 29, 2024 2m read

第五章 主设备、当前设备、空设备

一个进程拥有一台设备

一次只有一个进程可以拥有一个设备,顺序文件除外。

换句话说,在进程成功向设备发出OPEN命令后,在第一个进程释放该设备之前,其他进程都无法打开该设备。进程通过以下任一方式释放设备:

  • 通过显式发出CLOSE命令。

  • 通过停下来。

每个进程都有一个主设备

每个 IRIS 进程都有一个主要输入设备和一个主要输出设备。默认情况下,这些是同一设备。当您登录终端并激活 时,该终端将成为主要设备。由于 IRIS 隐式向该终端发出和命令,因此可以立即向它发出和命令。 主设备是操作系统指定为主输入设备的设备。 特殊变量包含主设备的设备 。

将 命令定向到当前设备

IRIS 将输入和输出操作(包括 、 、 和命令)定向到当前设备。 特殊变量包含当前设备的设备 。当在终端上登录 时, 最初包含终端的设备名称。换句话说,登录后,主设备和当前设备是相同的。在发出USE命令后,当前的设备( 中包含的设备)通常是执行的最后一次命令中指定的设备。

尽管可以在编程器模式下对主设备以外的设备发出和 ,但每次 IRIS 返回到>提示符时,它都会隐式发出。要继续使用 以外的设备必须发出USE在>提示符下输入的每一行中输入命令。

当主要设备成为当前的设备时

当执行以下任一操作时,主要设备将自动成为当前设备:

  • 首次登录。
  • 发出USE 0USE $principal
0
0 156
文章 姚 鑫 · 十月 28, 2024 2m read

第四章 I O 输入输出简介 - Read 命令

Read 命令

该命令从当前设备读取数据。对于某些设备,以星号开头的参数返回 ASCII 数字信息;对于其他人来说,它们表示控制功能。

语法

READ variable:timeout

WRITE 命令

该命令将数据写入当前设备。对于某些设备,以星号开头的参数允许使用其 ASCII 数值写入 ASCII 字符;对于其他人来说,它们表示控制功能。对于某些设备,以 字符开头的参数指示写入该字符的次数。

语法

WRITE variable

语法允许使用在助记符空间中的 代码中定义的助记符来控制设备。助记符空间是一个 例程,必须在或命令中激活它,或者使用管理门户将其配置为设备的默认值。要了解如何定义和激活助记符空间,请参阅定义默认助记符空间。

要使用预定义的 助记符空间将光标移动到终端屏幕上的第 列第 2 行,请发出以下命令:

   WRITE /CUP(1,2)

命令

命令释放指定设备的所有权。 反转命令的效果。

语法

所需的设备名称、 号或助记符。

参数在 级别关闭设备,而不在操作系统级别关闭它。

K参数对 系统没有影响。该文件在操作系统级别关闭。

如果对主设备发出命令,则主设备将保持分配给您的进程,直到注销为止。

其他几个条件可能会影响的行为:

  • 如果由于某种原因停止向设备的输出, IRIS
0
0 85
文章 姚 鑫 · 十月 27, 2024 1m read

第三章 I O 输入输出简介 - Use 命令

Use 命令

此命令使指定设备成为当前设备,并将特殊变量$IO设置为该设备。要使用主设备以外的设备,必须首先对其发出OPEN命令;否则,将收到错误。参数的含义与OPEN命令中的相同。

语法

USE device:(args):"mnespace"

device

所需的设备名称、 号或别名。设备的最大长度为 256 个字符。

args

可选— 某些设备所需的附加信息。管道(进程间通信) 、文件和终端 的可用参数不同。

mnespace

可选— 例程的名称,包含控制助记符的定义,当将 I/O 定向到该设备时,可以与 命令一起使用。

Windows 上的使用示例

此 示例显示了用于通过 连接到远程主机上的时钟服务器的命令。它使用服务名称 ,本地系统将其解析为端口号。 命令用 模式替换 模式并关闭所有用户终止符:

在 上的使用示例

0
0 120
文章 姚 鑫 · 十月 26, 2024 2m read

第二章 I O 输入输出简介 - Open 命令

Open 命令

OPEN建立指定设备的所有权并打开指定设备的 I/O 通道。此所有权将持续存在,直到发出CLOSE命令、进程终止或某些物理操作关闭设备。对于物理 I/O 设备或进程间通信(例如 连接),此所有权会阻止所有其他进程访问该设备。对于逻辑 设备(例如顺序文件),此所有权可能允许其他进程以某种形式共享访问该文件。打开同一顺序文件的多个进程的处理高度依赖于平台。强烈建议使用命令来限制对顺序文件的访问。

语法

device

所需的设备名称、 号或助记符。设备的最大长度为 256 个字符。

parameters

可选— 一个或多个参数,指定某些设备所需的附加信息。该参数列表用括号括起来,列表中的参数之间用冒号分隔。管道(进程间通信) 、文件和终端 I/O的可用参数不同。

timeout

可选— 等待请求成功的秒数。前面的冒号是必需的。超时必须指定为整数值或表达式。如果超时设置为零 (), 将尝试打开文件一次。如果尝试失败, 会立即失败。如果尝试成功,则成功打开文件。如果未设置超时 将继续尝试打开设备,直到打开成功或手动终止该过程。

mnespace

可选—助记符空间的名称,包含与该设备一起使用的控制助记符,指定为带引号的字符串。将 定向到该设备时,可以通过 命令使用这些控制助记符。

0
0 101
文章 姚 鑫 · 十月 25, 2024 2m read

第一章 I/O 输入/输出简介

本页概括地描述了如何在 IRIS 数据平台应用程序中以及在 IRIS 提示符下使用 I/O 设备。

介绍

数据平台为多种不同类型的逻辑和物理设备提供支持。支持的逻辑设备包括:

  • 主要装置
  • 文件
  • 管道
  • TCP连接
  • 作业间通信 (IJC) 设备用于在 IRIS 进程之间进行通信
  • 假脱机程序

支持的物理设备包括

  • 终端
  • 打印机

I/O 命令概述

命令允许拥有、使用、读取、写入和关闭设备。要将 I/O 操作定向到设备,请首先发出以下命令:

  • 发出OPEN命令来建立所有权,除非该设备是主要设备。
  • 发出命令使该设备成为当前设备。
  • 随后的和命令将从该设备读取或写入该设备。
  • 命令释放设备的所有权,以便其他进程可以使用该设备。

以下通用语法适用于支持 中 命令关键字的 命令:

其中可以是单个参数,也可以是括在括号中并用冒号分隔的参数列表:

 parameter  (parameter:parameter[:...]) 
```

参数可以是位置参数或关键字参数。关键字参数具有以下语法:

````java
/keyword[=value] 
```

前导斜杠区分关键字参数和位置参数值。位置参数值的含义源自其在冒号分隔列表中的位置。关键字参数值的含义源自指定的关键字。

请注意,位置参数和关键字参数都可以在同一个`paramlist`中指定。例如,以下示例混合位置参数和关键字参数,以使用 `JIS I/O` 转换以写入/顺序模式打开名为test.dat的新文件:

````java
   OPEN "test.dat":("NWS":/IOTABLE="JIS")
```
0
0 136
文章 Michael Lei · 十月 24, 2024 1m read

InterSystems FAQ 

一个实例上的最大命名空间数量是 2047. 但是,要使用这么大量的命名空间,你需要相应地配置好内存。

一个实例里可以创建的数据库的最大数量(包括远程数据库) 15998. 根据授权的类型,可能会有所限制。具体细节请参考以下文档。
Database Configuration [IRIS]
Database Configuration
 

0
0 298
文章 姚 鑫 · 十月 24, 2024 1m read

第五十五章 安全元素的详细信息 - 详情

本节讨论在消息头中用作 子元素的 元素。当以这种方式使用 时,可以在签名之前执行加密。以下显示了此元素的一个示例:

详情

在每个 元素中,URI 属性指向消息中其他位置的 元素的 Id 属性。

使用顶级 元素时, and 的详细信息有所不同,如下所示:

Scenario
contains pointer to Includes (same for all associated elements) Does not include
Top-level element contains pointer to Does not include Includes (potentially different for each
0
0 103
文章 姚 鑫 · 十月 23, 2024 1m read

第五十四章 安全元素的详细信息 - 详情

的目的是携带发送者和接收者可以独立使用的信息来生成相同的对称密钥。这些方可以使用该对称密钥对 SOAP 消息的相关部分进行加密、解密、签名和签名验证。

以下显示了部分示例:

<DerivedKeyToken xmlns="[parts omitted]ws-secureconversation/200512" 
                 xmlns:wsc="[parts omitted]ws-secureconversation/200512" 
                 wsu:Id="Enc-943C6673-E3F3-48E4-AA24-A7F82CCF6511">
   <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <Reference URI="#Id-658202BF-239A-4A8C-A100-BB25579F366B"></Reference>
   </SecurityTokenReference>
   <Nonce>GbjRvVNrPtHs0zo/w9Ne0w==</Nonce>
</DerivedKeyToken>

0
0 75
文章 姚 鑫 · 十月 22, 2024 1m read

第五十三章 安全元素的详细信息 - 详情

的目的是携带可由消息接收者验证的数字签名。可以使用数字签名来检测消息更改,或者只是验证消息的某个部分是否确实由列出的实体生成。与传统的手写签名一样,数字签名是对文档的附加,只能由文档的创建者创建,并且不易伪造。

以下显示了部分示例:

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
   <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
      </CanonicalizationMethod>
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"></SignatureMethod>
      <Reference URI="#Timestamp-48CEE53E-E6C3-456C-9214-B7D533B2663F">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>waSMFeYMruQn9XHx85HqunhMGIA=</DigestValue>
      </Reference>
      <Reference URI="#Body-73F08A5C-0FFD-4FE9-AC15-254423DBA6A2">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>wDCqAzy5bLKKF+Rt0+YV/gxTQws=</DigestValue>
      </Reference>
   </SignedInfo>
   <SignatureValue>j6vtht/[parts omitted]trCQ==</SignatureValue>
   <KeyInfo>
      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <Reference URI="#SecurityToken-411A262D-990E-49F3-8D12-7D7E56E15081" 
                    ValueType="[parts omitted]oasis-200401-wss-x509-token-profile-1.0#X509v3">
         </Reference>
      </SecurityTokenReference>
   </KeyInfo>
</Signature>
0
0 121
文章 姚 鑫 · 十月 21, 2024 1m read

第五十二章 安全元素的详细信息 - 详情

的作用是携带加密数据,部分示例如下:

<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" 
               Id="Enc-143BBBAA-B75D-49EB-86AC-B414D818109F" 
               Type="http://www.w3.org/2001/04/xmlenc#Content">
   <EncryptionMethod Algorithm="[parts omitted]#aes128-cbc"></EncryptionMethod>
   <CipherData>
      <CipherValue>MLwR6hvKE0gon[parts omitted]8njiQ==</CipherValue>
   </CipherData>
</EncryptedData>

详情

该元素的各部分如下:

  • Id 是元素的唯一标识符。 IRIS 会自动生成此标识符。
  • 表示用于加密该数据的算法。
  • 携带加密数据,作为 元素中的值。在此示例中,值 MLwR6hvKE0gon[parts divided]8njiQ== 为加密数据。
  • (未包含在示例中 标识对称密钥。
0
0 91
文章 姚 鑫 · 十月 20, 2024 2m read

第五十一章 安全元素的详细信息 - 详情

详情

该元素的各部分如下:

  • 表示用于加密对称密钥的算法。

IRIS 中,可以指定密钥传输算法(由 的 Algorithm 属性显示)。请参阅指定密钥传输算法。

  • 标识用于加密此对称密钥的密钥。在 IRIS 中, 包含 ,其具有以下形式之一:
    • WS-Security 标头中较早位置的 的引用,如前面的示例所示。
    • 用于唯一标识证书的信息,该证书可能是邮件收件人所拥有的。例如, 可以包含证书的 指纹,如下所示:

在这两种情况下,相应的公钥都用于加密此 元素中携带的对称密钥。

如果加密使用顶级 元素,则省略此元素;请参阅 。

  • 携带加密后的对称密钥,作元素中的值。本例中的值 WtE[parts divided]bSyvg== 即为加密后的对称密钥。
  • 表示此消息中使用此 元素中携带的对称密钥加密的部分或多个部分。具体而言, 的 URI 属性指向消息中其他地方的 元素的 Id 属性。

根据使用的技术,可能不包含此元素。可以通过顶级 元素链接 和相应的 ;请参阅 。

消息中的位置

<EncryptedKey> 元素应包含在 <Security> 中,位于其使用的任何 <BinarySecurityToken> 之后,以及引用它的所有 <EncryptedData> 和 <DerivedKeyToken> 元素之前。

0
0 104
文章 姚 鑫 · 十月 17, 2024 2m read

第五十章 安全元素的详细信息

本主题讨论 SOAP 消息中较常见的安全元素,特别是 IRIS Web 服务和客户端可以发送的变体。此信息旨在帮助那些不经常使用 SOAP 的人重温记忆。此处的详细信息也可能有助于故障排除。

的目的是携带消息中其他元素使用的安全凭证,供消息接收者使用。安全凭证以序列化、编码的形式携带。以下显示了部分示例:

<BinarySecurityToken wsu:Id="SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53" 
                     EncodingType="[parts omitted]#Base64Binary" 
                     ValueType="[parts omitted]#X509v3">
             MIICnDCCAYQ[parts omitted]ngHKNhh
</BinarySecurityToken>

详细

该元素的各部分如下:

  • Id 是此令牌的唯一标识符,包含该标识符以便此消息中的其他元素可以引用此令牌。如有必要, IRIS 会自动生成此标识符。
  • EncodingType 表示用于生成 <`BinarySecurityToken>IRIS中使用的唯一编码是base-64` 编码。
0
0 92
文章 姚 鑫 · 十月 16, 2024 1m read

第四十九章 解决安全问题 - 可能出现的错误

可能出现的错误

本节讨论 IRIS Web 服务和 Web 客户端中可能出现的与安全相关的错误:

  • 如果刚刚生成了 IRIS Web 服务或客户端,则可能尚未配置为识别 WS-Security 标头。在这种情况下,当您尝试执行 Web 方法时,会收到如下一般错误:
<ZSOAP>zInvokeClient+269^%SOAP.WebClient.1

将以下内容添加到Web服务或客户端并重新编译:

Parameter SECURITYIN="REQUIRE";

这种一般错误也可能是由于错误地调用 方法(例如,在 Web 方法没有返回值时引用返回值)造成的。

如果使用 ,则此项不适用。

  • 在其他情况下,当您尝试执行 方法时,可能会收到以下安全错误:
ERROR #6454: No supported policy alternative in configuration 
Policy.Client.Demo1SoapConfig:service
  • 入站消息可能未通过验证。如果是这样, 日志会指出这一点。例如:
0
0 136
文章 姚 鑫 · 十月 15, 2024 2m read

第四十八章 解决安全问题

本主题提供信息来帮助识别 IRISSOAP 安全问题的原因。

有关与安全无关的问题的信息,请参阅 IRIS 中的 问题故障排除。

故障排除所需的信息

要解决 SOAP 问题,通常需要以下信息:

  • WSDL 及其引用的所有外部文档。
  • (在出现与消息相关的问题的情况下)某种形式的消息记录或跟踪。有以下选择:
Option Usable with SSL/TLS? Shows HTTP headers? Comments
IRIS SOAP log Yes No 对于安全错误,此日志显示的详细信息比 SOAP 故障中包含的更多。
Web Gateway trace Yes Yes 对于使用 MTOM(MIME 附件)的 SOAP 消息问题,查看 HTTP 标头至关重要。
Third-party tracing tools No Depends on the tool 一些跟踪工具还显示较低级别的详细信息,例如实际发送的数据包,这在进行故障排除时至关重要。

发生安全错误时要检查的项目

这 中的 SOAP 问题故障排除中进行了讨论。

  • 在极少数情况下, SOAP 客户端会使用 `HTTP 身份验证,请注意,可以启用身份验证的日志记录;请参阅提供登录凭据。

正确处理故障也非常有用,这样就可以收到最好的信息。请参阅

0
0 96
文章 姚 鑫 · 十月 14, 2024 2m read

第四十七章 创建和添加 SAML 令牌 -

要添加带有 (其中包含 元素)的 ,请执行以下操作:

  1. 按照以编程方式检索凭证集中所述,创建 %SYS.X509Credentials 的实例。

或者使用与签署断言时使用的相同凭证集。

  1. 设置 SAML 断言对象的 Subject 属性的 NameID 属性。
  2. 调用 断言对象的 属性的 AddEncryptedKeyConfirmation() 方法。
method AddEncryptedKeyConfirmation(credentials As %X509.Credentials) as %Status

对于参数,请使用之前创建的 %SYS.X509Credentials实例。

BinarySecret 作为密钥持有者

要添加以 作为 Holder-of-key 的 ,请执行以下操作:

  1. 签署 SAML 断言时,请按如下方式创建签名:

其中断言是 SAML 断言。请注意,在此场景中使用 方法。 引用选项创建对 断言的引用。

  1. 创建 。为此,请调用 的 Create() 方法:
set binsec=##class(%SOAP.WST.BinarySecret).Create()
  1. 调用 断言对象的 属性的 方法:

对于 ,请使用在上一步中创建的 。

0
0 105
文章 姚 鑫 · 十月 13, 2024 2m read

第四十六章 创建和添加 SAML 令牌 - 使用方法 Holder-of-key

添加元素

要将 元素添加到 %SAML.Assertion 实例,执行以下操作:

  1. 创建 %SAML.Subject 的新实例。
  2. 根据需要设置主题的属性。
  3. 将断言对象的 Subject 属性设置为等于此实例。

添加 元素

要将 元素添加到的 %SAML.Assertion 实例,请使用以下某个小节中的步骤。

使用方法 Holder-of-key

要使用 Holder-of-key 方法添加 ,请执行以下操作:

  1. 按照以编程方式检索凭证集中所述,创建 %SYS.X509Credentials 的实例。

或者使用与签署断言时使用的相同凭证集。

  1. 可以选择创建并添加包含与给定凭据集关联的证书的二进制安全令牌。

要创建令牌,调用 的 类方法。例如:

 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)

其中 是在上一步中创建的凭证集。

要将此令牌添加到 WS-Security 标头元素,请调用 客户端或 Web 服务的 属性的 方法。

0
0 91
文章 姚 鑫 · 十月 11, 2024 2m read

第四十五章 创建和添加 SAML 令牌 - 变体:不使用

变体:不使用

包含序列化、base-64 编码格式的证书。可以忽略此令牌,而改用标识证书的信息;接收方使用此信息从相应位置检索证书。为此,请使用上述步骤,并进行以下更改:

  • 跳过步骤 23。也就是说,不要创建和添加 .。
  • 在步骤 中,使用凭证集(而不是二进制安全令牌)作为 的第一个参数。例如:
 set assertion=##class(%SAML.Assertion).CreateX509(credset,referenceOption)

对于 referenceOption,可选择指定一个值,如 X.509 凭证的参考选项中所述。可以使用除 $$$SOAPWSReferenceDirect 之外的任意值。

如果指定凭证集作为第一个参数(正如我们在这个变体中所做的那样),则默认引用选项是证书的指纹。

变体:创建未签名的 SAML 断言

要创建未签名的 断言,请使用上述步骤,并进行以下更改:

  • 跳过步骤 1、 和 。也就是说,不要创建和添加 .。
  • 对于步骤 ,请使用 方法而不是 CreateX509()。此方法不带参数。例如:
 set assertion=##class(%SAML.Assertion).Create()

此方法返回 的一个实例。 会自动设置此实例的 和 属性。S 属性为空。

0
0 94
文章 姚 鑫 · 十月 10, 2024 3m read

第四十四章 创建和添加 SAML 令牌

本主题描述如何将SAML 令牌添加到 WS-Security 标头元素。

另请参阅 %SAML.Assertion 的类参考和相关类。

未实现完整的 支持。 IRIS 中的 SAML 支持仅指 中的 支持中列出的详细信息。

概述

借助 支持,可以将 令牌添加到 标头元素。

可以选择将此 令牌用作签名或加密的密钥材料。如果这样做, 将遵循 令牌配置文件规范。密钥材料来自 断言的 <SubjectConfirmation> 元素(带有 方法)和 <SubjectConfirmationData> 或 <KeyInfoConfirmationData>(带有 <KeyInfo> 子元素)。

或者,可以使用 方法添加 <SubjectConfirmation>;在这种情况下,主题不包含密钥。为了保护这种情况下断言,建议您添加从消息签名到 令牌的安全令牌引用。

基本步骤

要创建 SAML 令牌并将其添加到出站 消息,可以使用此处的基本过程或小节中描述的变体。

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 创建 %SYS.X509Credentials 的实例,如以编程方式检索凭据集中所述。

此 凭证集必须包含自己的证书。例如:

 Set x509alias = "servercred" 
 Set pwd = "mypassword" 
 Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,pwd)
0
0 102