第十七章 TCP 客户端 服务器通信 - 使用OPEN命令
使用OPEN命令
OPEN命令保留一个TCP绑定设备供使用。其语法为:
OPEN devicename:parameters:timeout:mnespace
InterSystems IRIS for Health™ 是全球第一个也是唯一一个专门为医疗应用程序的快速开发而设计的数据平台,用于管理全世界最重要的数据。它包括强大的开箱即用的功能:事务处理和分析、可扩展的医疗保健数据模型、基于 FHIR 的解决方案开发、对医疗保健互操作性标准的支持等等。所有这些将使开发者能够快速实现价值并构建具有突破性的应用程序。了解更多信息。
OPEN命令OPEN命令保留一个TCP绑定设备供使用。其语法为:
OPEN devicename:parameters:timeout:mnespace
TCP 客户端/服务器通信本章介绍如何使用 TCP/IP 在 IRIS 数据平台进程之间设置远程通信。
IRIS 支持两种互联网协议 (IP):TCP 和 UDP。这些 Internet 协议允许 IRIS 进程与本地或远程系统上的进程通信,无论这些进程是否正在运行 IRIS。
TCP IRIS 传输控制协议 (TCP) 绑定。在服务器和单个客户端之间建立双向连接。提供具有错误检查和纠正以及消息确认的可靠字节流数据传输。UDP IRIS 用户数据报协议 (UDP) 绑定。提供服务器和大量客户端之间的双向消息传输。 UDP 不是基于连接的;每次传输数据包都是一个独立的事件。为本地数据包广播和远程多播提供快速和轻量级的数据传输。本质上不如 TCP 可靠。不提供消息确认。TCP 绑定将 IRIS 连接到广泛的网络标准,这样 IRIS 用户就可以通过 I/O 命令使用底层网络协议的基本功能。
TCP/IP 协议允许系统进行通信,即使它们使用不同类型的网络硬件。例如,TCP 通过 Internet 连接在使用以太网的系统和使用令牌环的另一个系统之间传输消息。 TCP 控制数据传输的准确性。 IP 或 Internet 协议在网络或 Internet 上的不同系统之间执行实际数据传输。
本页介绍如何在两个或多个 IRIS 数据平台进程之间建立通信。
作业间通信 (IJC) 设备是一组特殊设备编号,可让在两个或多个 IRIS 进程之间传输信息。这些流程可以是作业流程或交互式流程。
IJC 设备成对工作。最多可以有 256 个 IJC 设备对。使用称为接收器的偶数设备来读取数据。使用称为发送器的奇数设备来写入数据。尝试从发送器读取或写入接收器会导致 <NODEV> 错误。
可以向 IJC 设备发出 I/O 命令,就像向任何其他设备一样。向设备发出OPEN和USE命令后,进程可以发出:
一次只能有一个进程可以打开设备。
对基于 IRIS 设备表中映射的相对顺序,可以使用管理门户的配置选项查看和编辑该表。
每对设备都与一个 IJC 内存缓冲区关联。当进程向任何奇数 IJC 设备发出WRITE命令时 IRIS 会将数据写入该设备对的缓冲区中。当另一个进程向该对中的偶数设备发出READ命令时 IRIS 会从同一缓冲区读取数据。
写入的数据以先进先出的方式缓冲在内存中。如果在设备为空时发生READ ,则发出该信号的进程将挂起,直到另一个进程发出相应的WRITE 信号。缓冲区已满时发生的写入将挂起,直到另一个进程从该缓冲区读取数据。
CLOSE 命令如果使用带Q (/QUEUE) 参数代码的OPEN创建子进程,则该子进程可能会在设备上的CLOSE操作中继续存在。排队的进程间通信管道的生存能力取决于平台。在 UNIX® 系统上,子进程始终在CLOSE后继续存在。在 Windows 系统上,进程的生存取决于进程的年龄。刚刚启动的子进程不会在CLOSE操作中幸存,但是一旦子进程完全建立,它就会在 CLOSE操作中幸存。
在 UNIX® 系统上,可以指定关闭管道命令设备时CLOSE命令应等待的时间。超时默认值为 30 秒。可以通过指定OPEN命令closetimeout位置参数来修改此默认值。可以通过指定可选的“I”位置参数来覆盖CLOSE命令的默认或指定超时。 “I”参数指定立即关闭(1 秒后关闭)。 CLOSE语法如下:
CLOSE cpipename:"I"
Visual Basic 进行通信在 Windows 上,在 IRIS 中使用命名管道就像使用 TCP 设备一样,但使用设备名称|NPIPE|nnn而不是|TCP|nnn 。 OPEN参数如下:
OPEN "|NPIPE|3":(server:pipename)
其中server是计算机名称, pipename是要连接到的管道的名称。
READ:pc readargument,...
READ 从管道读取数据。
其中reargument可以是:
formatting-mode
string
variable:timeout
*variable:timeout
variable#n:timeout
将 I格式化模式参数与管道一起使用。 I 参数允许对命名管道发出定时READ,而不会丢失跟随在一个部分记录中的任何数据。错误。当在READ上使用此参数时, READ会忽略消息。
默认情况下,I格式化模式的值处于关闭状态。如果在没有超时的情况下在READ命令中包含此参数,则进程将挂起,直到有数据要处理。
CPIPE 退出代码可以检索命令管道 (|CPIPE|) 进程的退出代码。必须在 |CPIPE| 之前检索此退出代码设备已关闭。它是通过%SYSTEM.Process 类的PipeExitCode方法获得的。退出代码始终是整数值。如果退出代码不可用,该方法将返回空字符串并设置状态参数和解释,如以下示例所示:
OPEN 和 USE 命令关键字以下列表描述了用于使用OPEN和USE命令控制进程间通信管道的关键字。
/IOTABLE[=name] 默认值:如果未指定名称,则使用设备的默认 I/O 转换表。
对应K\name\参数代码,为设备建立I/O转换表。
/TRANSLATE[=n]默认值:1
与K参数代码相关。 /TRANSLATE 或 /TRANSLATE= n (对于n的非零值)启用设备的 I/O 转换。 /TRANSLATE= n如果n值为零,则会禁用设备的 I/O 转换。
/XYTABLE[=name]默认值:如果未指定名称,则使用设备的默认 $X/$Y 操作表。
对应Y\name\参数代码,为设备建立$X/$Y动作表。
OPEN 关键字以下列表描述了仅使用OPEN命令控制进程间通信管道的关键字。
/ENV=environmentvars指定要在新进程中设置的环境变量。有两种指定值的方法:
/ENV=(name1:value1,name2:value2)
Set arr(name1)=value1
Set arr(name2)=value2
// then later use the following in the OPEN command:
/ENV=arr...
以下是有效的命令管道OPEN语句。每个示例指定 10 秒的超时:
OPEN 命令OPEN命令允许程序与 IRIS 外部的进程进行通信。
OPEN Argumentscpipename 管道名称仅命令管道— “|CPIPE|”或"|CPIPE|xxxxxx" ,其中xxxxxx表示用户指定的唯一标识符。
program 程序命令管道可以使用命令 shell 或不使用命令 shell(直接)执行程序。在大多数情况下,首选不使用命令 shell 执行。标准管道使用命令 shell 执行程序。
仅命令管道— 要在不使用命令 shell 的情况下执行,请指定 /COMMAND= program 。如果程序有参数,则必须使用 /ARGS 关键字指定它们。如果指定 /COMMAND 或 /ARGS 关键字,则无需命令 shell 即可执行程序: (/COMMAND=program) 、 (/COMMAND=program:/ARGS=arg1)和(program:/ARGS=arg1)都是有效的语法。 /ARGS 可以采用单个参数、以逗号分隔的参数列表或数组。例如, (/COMMAND=program:/ARGS=arg1,arg2) 。可以使用数组指定可变数量的参数:
本页介绍如何通过管道与 IRIS® 数据平台外部的进程建立通信。
可以通过管道在 IRIS 进程和外部 UNIX® 或 Windows 进程之间进行通信,就像在 UNIX® 或 Windows 操作系统级别一样。可以将输出发送到管道或从管道接收输入。管道为单向;不能同时读取和写入同一个程序。
当打开另一个程序的管道进行输出时,可以像写入顺序文件一样对其进行写入。然后程序使用编写的内容作为其输入流。当希望 IRIS 进程与外部进程共享资源时,此功能特别有用。
IRIS 实用程序的管道可以打开通往 IRIS 实用程序以及 UNIX® 或 Windows 进程的管道。在将管道用于实用程序 I/O 之前,系统管理员必须在 IRIS 系统上定义管道设备。
系统管理员定义管道设备后,当运行实用程序(例如^%RD )时,可以使用系统管理员定义的助记符回答Device:提示。输出会自动发送到该设备。
IRIS 支持标准管道和命令管道 (CPIPE)。标准管道用于相对较短的命令字符串,其中命令名称及其参数少于 256 个字符。当命令字符串长度为 256 个字符或更长时,使用命令管道。在这两种情况下,管道只能在 UNIX® 和 Windows 系统上使用。
OPEN以下是标准管道的OPEN命令语法:
为了与其他 产品兼容并方便起见,可以通过设备编号(存储在设备表中)来引用设备。系统管理员可以使用管理门户将这些号码链接到设备。选择“系统管理” 、 “配置” 、 “设备设置” 、 “设备”以创建新设备或编辑现有设备。
系统管理员还可以将一个数字转换为另一个数字。因此,可以发出OPEN 47 , IRIS 会将其转换为OPEN 49 。
下表显示了设备编号。
| Device Numbers 设备编号 | Devices 设备 |
|---|---|
0 | 主要设备(您登录的设备)。 |
2 | IRIS 假脱机程序。 UNIX®:助记符 SPOOL 适用于该设备。 |
3 | 设备编号无效。尝试打开它会返回 <NOTOPEN> 错误,而不等待超时到期。 |
63 | 查看缓冲区。 |
20-46, 200-223 | 常规联锁装置。 |
224-255 | 作业间通信设备。 |
要打开假脱机程序,请发出以下命令:
OPEN 2
可以使用双引号括起来的操作系统文件规范来打开磁盘文件。
Windows 文件规范具有以下格式:
device:\directory\file.type
UNIX® 文件规范具有以下格式:
/directory/name
当使用 I/O 命令OPEN 、 USE和CLOSE在除正在使用的设备之外的任何设备上处理 I/O 时,必须指定一个 I/O 设备。可以根据设备类型以三种方式之一指定设备,如下表所示。
I/O 命令中指定设备| Type of Specification 规格类型 | Use for these Devices 用于这些设备 |
|---|---|
| IRIS 设备名称 | Terminals and Printers 终端和打印机 |
| IRIS 设备 ID 或设备别名 | 除顺序文件外的所有设备 |
| File Name 文件名 | Sequential Files 顺序文件 |
请注意,Windows 和 UNIX® 处理打印机I/O 的方式不同。有关详细信息,请参阅打印机。
如果的 I/O 操作是针对终端(或某些平台上的打印机),则可以使用操作系统(UNIX® 或 Windows)应用的设备名称来指定设备。形式如下:
OPEN "device"
USE "device"
CLOSE "device"
其中device是设备的操作系统名称,用引号引起来。设备的最大长度为 256 个字符。
Windows 系统上指定终端要打开连接到串行通信端口的 I/O 设备,请使用以下语法指定OPEN命令:
OPEN "comn:"
其中n表示设备所连接的端口号。
USE 0或USE $principal向进程的主体设备隐式发出OPEN命令。如果另一个进程拥有该设备,则该进程会挂在隐式OPEN上,就像它遇到任何OPEN时一样。
为该进程不拥有的任何其他设备(由于先前的OPEN命令)发出USE命令会产生错误。
仅当进程获取设备时,没有超时的OPEN命令才将控制权返回给进程。可以通过键盘中断命令(如Ctrl-C )中断打开命令。由于保护问题或无效设备名称而无法成功的OPEN将永远挂起。当在OPEN命令中指定超时时, OPEN将在超时到期时将控制权返回给进程。
根据主要设备的性质,可以指定其他特定于设备的参数,这些参数对于管道(进程间通信) 、文件和终端 I/O是不同的。例如,可以使用 TLS 连接打开主设备:
USE $principal:(::/TLS=ConfigName)
其中ConfigName是同一实例中定义的 TLS 配置的名称。
如果应用程序生成不希望出现在屏幕上的无关输出,可以将该输出定向到空设备。可以通过发出带有适当参数的 IRIS OPEN命令来指定空设备(见表)。 IRIS 将其视为虚拟设备。
| Platform 平台 | Null Device Argument 空设备参数 |
|---|---|
UNIX® | /dev/null/ |
Windows | //./nul |
一次只有一个进程可以拥有一个设备,顺序文件除外。
换句话说,在进程成功向设备发出OPEN命令后,在第一个进程释放该设备之前,其他进程都无法打开该设备。进程通过以下任一方式释放设备:
通过显式发出CLOSE命令。
通过停下来。
每个 IRIS 进程都有一个主要输入设备和一个主要输出设备。默认情况下,这些是同一设备。当您登录终端并激活 IRIS 时,该终端将成为主要设备。由于 IRIS 隐式向该终端发出OPEN和USE命令,因此可以立即向它发出READ和WRITE命令。 IRIS 主设备是操作系统指定为主输入设备的设备。 $PRINCIPAL特殊变量包含主设备的设备 ID。
IRIS 将 I/O 命令定向到当前设备IRIS 将输入和输出操作(包括READ 、 WRITE 、 PRINT和ZLOAD命令)定向到当前设备。 $I特殊变量包含当前设备的设备 ID。当在终端上登录 IRIS 时, $IO最初包含终端的设备名称。换句话说,登录后,主设备和当前设备是相同的。在发出USE命令后,当前的设备( $IO中包含的设备)通常是执行的最后一次USE命令中指定的设备。
Read 命令该命令从当前设备读取数据。对于某些设备,以星号开头的参数返回 ASCII 数字信息;对于其他人来说,它们表示控制功能。
READ variable:timeout
该命令将数据写入当前设备。对于某些设备,以星号开头的参数允许使用其 ASCII 数值写入 ASCII 字符;对于其他人来说,它们表示控制功能。对于某些设备,以 # 字符开头的参数指示写入该字符的次数。
WRITE variable
WRITE /mnemonicWRITE /mnemonic 语法允许使用在助记符空间中的 IRIS 代码中定义的助记符来控制设备。助记符空间是一个 IRIS 例程,必须在OPEN或USE命令中激活它,或者使用管理门户将其配置为设备的默认值。要了解如何定义和激活助记符空间,请参阅定义默认助记符空间。
要使用预定义的 ^%X364 助记符空间将光标移动到终端屏幕上的第 1 列第 2 行,请发出以下命令:
WRITE /CUP(1,2)
CLOSE 命令CLOSE命令释放指定设备的所有权。 CLOSE反转OPEN命令的效果。
CLOSE device[:params]
device所需的设备名称、ID 号或助记符。
params参数K在 IRIS 级别关闭设备,而不在操作系统级别关闭它。
此命令使指定设备成为当前设备,并将特殊变量$IO设置为该设备。要使用主设备以外的设备,必须首先对其发出OPEN命令;否则,将收到错误。参数的含义与OPEN命令中的相同。
USE device:(args):"mnespace"
所需的设备名称、ID 号或别名。设备的最大长度为 256 个字符。
可选— 某些设备所需的附加信息。管道(进程间通信) 、文件和终端 I/O的可用参数不同。
可选— IRIS 例程的名称,包含控制助记符的定义,当将 I/O 定向到该设备时,可以与WRITE /mnemonic 命令一起使用。
此 Windows 示例显示了用于通过 TCP 连接到远程主机larry上的时钟服务器的命令。它使用服务名称daytime ,本地系统将其解析为端口号。 USE命令用 PSTE 模式替换OPEN C 模式并关闭所有用户终止符:
OPEN "|TCP|4":("larry":"daytime":"C")
USE "|TCP|4":(::"PSTE")
UNIX® 上的使用示例此 UNIX 示例显示了用于打开设备/dev/tty06的 I/O 通道并将其建立为当前设备的命令,并可以选择使用WRITE /mnemonic 和 X364 终端助记符。
OPEN建立指定设备的所有权并打开指定设备的 I/O 通道。此所有权将持续存在,直到发出CLOSE命令、进程终止或某些物理操作关闭设备。对于物理 I/O 设备或进程间通信(例如 TCP 连接),此所有权会阻止所有其他进程访问该设备。对于逻辑 I/O 设备(例如顺序文件),此所有权可能允许其他进程以某种形式共享访问该文件。打开同一顺序文件的多个进程的处理高度依赖于平台。强烈建议使用LOCK命令来限制对顺序文件的访问。
OPEN device{:{(parameters)}{:{timeout}{:"mnespace"}}}
所需的设备名称、ID 号或助记符。设备的最大长度为 256 个字符。
可选— 一个或多个参数,指定某些设备所需的附加信息。该参数列表用括号括起来,列表中的参数之间用冒号分隔。管道(进程间通信) 、文件和终端 I/O的可用参数不同。
可选— 等待请求成功的秒数。前面的冒号是必需的。超时必须指定为整数值或表达式。如果超时设置为零 (0), OPEN将尝试打开文件一次。如果尝试失败, OPEN会立即失败。如果尝试成功,则成功打开文件。如果未设置超时 IRIS 将继续尝试打开设备,直到打开成功或手动终止该过程。
本页概括地描述了如何在 IRIS 数据平台应用程序中以及在 IRIS 提示符下使用 I/O 设备。
IRIS 数据平台为多种不同类型的逻辑和物理设备提供支持。支持的逻辑设备包括:
TCP连接IJC) 设备用于在 IRIS 进程之间进行通信支持的物理设备包括
I/O 命令概述I/O 命令允许拥有、使用、读取、写入和关闭设备。要将 I/O 操作定向到设备,请首先发出以下命令:
OPEN命令来建立所有权,除非该设备是主要设备。USE命令使该设备成为当前设备。READ和WRITE命令将从该设备读取或写入该设备。CLOSE命令释放设备的所有权,以便其他进程可以使用该设备。以下通用语法适用于支持 ObjectScript 中 I/O 命令关键字的 I/O 命令:
OPEN device:paramlist:timeout:"mnespace"
USE device:paramlist:"mnespace"
CLOSE device:paramlist
其中paramlist可以是单个参数,也可以是括在括号中并用冒号分隔的参数列表:
一个实例上的最大命名空间数量是 2047. 但是,要使用这么大量的命名空间,你需要相应地配置好内存。
一个实例里可以创建的数据库的最大数量(包括远程数据库) 15998. 根据授权的类型,可能会有所限制。具体细节请参考以下文档。
Database Configuration [IRIS]
Database Configuration
本节讨论在消息头中用作 <Security>子元素的 <ReferenceList> 元素。当以这种方式使用 <ReferenceList> 时,可以在签名之前执行加密。以下显示了此元素的一个示例:
<ReferenceList xmlns="http://www.w3.org/2001/04/xmlenc#">
<DataReference URI="#Enc-358FB189-81B3-465D-AFEC-BC28A92B179C"></DataReference>
<DataReference URI="#Enc-9EF5CCE4-CF43-407F-921D-931B5159672D"></DataReference>
</ReferenceList>
在每个 <DataReference> 元素中,URI 属性指向消息中其他位置的 <EncryptedData> 元素的 Id 属性。
使用顶级 <ReferenceList> 元素时,<EncryptedKey> and <EncryptedData> 的详细信息有所不同,如下所示:
<DerivedKeyToken> 的目的是携带发送者和接收者可以独立使用的信息来生成相同的对称密钥。这些方可以使用该对称密钥对 SOAP 消息的相关部分进行加密、解密、签名和签名验证。
以下显示了部分示例:
<Signature>的目的是携带可由消息接收者验证的数字签名。可以使用数字签名来检测消息更改,或者只是验证消息的某个部分是否确实由列出的实体生成。与传统的手写签名一样,数字签名是对文档的附加,只能由文档的创建者创建,并且不易伪造。
以下显示了部分示例:
<EncryptedData> 的作用是携带加密数据,部分示例如下:
<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>
该元素的各部分如下:
该元素的各部分如下:
<EncryptionMethod> 表示用于加密对称密钥的算法。在 IRIS 中,可以指定密钥传输算法(由 <EncryptionMethod> 的 Algorithm 属性显示)。请参阅指定密钥传输算法。
<KeyInfo> 标识用于加密此对称密钥的密钥。在 IRIS 中,<KeyInfo> 包含 <SecurityTokenReference>,其具有以下形式之一:
WS-Security 标头中较早位置的 <BinarySecurityToken> 的引用,如前面的示例所示。<SecurityTokenReference> 可以包含证书的 SHA1 指纹,如下所示:本主题讨论 SOAP 消息中较常见的安全元素,特别是 IRIS Web 服务和客户端可以发送的变体。此信息旨在帮助那些不经常使用 SOAP 的人重温记忆。此处的详细信息也可能有助于故障排除。
<BinarySecurityToken><BinarySecurityToken> 的目的是携带消息中其他元素使用的安全凭证,供消息接收者使用。安全凭证以序列化、编码的形式携带。以下显示了部分示例:
<BinarySecurityToken wsu:Id="SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53"
EncodingType="[parts omitted]#Base64Binary"
ValueType="[parts omitted]#X509v3">
MIICnDCCAYQ[parts omitted]ngHKNhh
</BinarySecurityToken>
该元素的各部分如下:
本节讨论 IRIS Web 服务和 Web 客户端中可能出现的与安全相关的错误:
IRIS Web 服务或客户端,则可能尚未配置为识别 WS-Security 标头。在这种情况下,当您尝试执行 Web 方法时,会收到如下一般错误:<ZSOAP>zInvokeClient+269^%SOAP.WebClient.1
将以下内容添加到Web服务或客户端并重新编译:
Parameter SECURITYIN="REQUIRE";
这种一般错误也可能是由于错误地调用 Web 方法(例如,在 Web 方法没有返回值时引用返回值)造成的。
如果使用 WS-Policy,则此项不适用。
Web 方法时,可能会收到以下安全错误:ERROR #6454: No supported policy alternative in configuration
Policy.Client.Demo1SoapConfig:service
SOAP 日志会指出这一点。例如:本主题提供信息来帮助识别 IRIS 中 SOAP 安全问题的原因。
有关与安全无关的问题的信息,请参阅 IRIS 中的 SOAP 问题故障排除。
要解决 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 | 一些跟踪工具还显示较低级别的详细信息,例如实际发送的数据包,这在进行故障排除时至关重要。 |
这 IRIS 中的 SOAP 问题故障排除中进行了讨论。
SOAP 客户端会使用 `HTTP 身份验证,请注意,可以启用身份验证的日志记录;请参阅提供登录凭据。正确处理故障也非常有用,这样就可以收到最好的信息。请参阅 SOAP 故障处理。
<SubjectConfirmation>与 <EncryptedKey>要添加带有 <SubjectConfirmationData>(其中包含 <EncryptedKey> 元素)的 <SubjectConfirmation>,请执行以下操作:
%SYS.X509Credentials 的实例。或者使用与签署断言时使用的相同凭证集。
SAML 断言对象的 Subject 属性的 NameID 属性。SAML 断言对象的 Subject 属性的 AddEncryptedKeyConfirmation() 方法。method AddEncryptedKeyConfirmation(credentials As %X509.Credentials) as %Status
对于参数,请使用之前创建的 %SYS.X509Credentials实例。
<SubjectConfirmation> 以 BinarySecret 作为密钥持有者要添加以 BinarySecret 作为 Holder-of-key 的 <SubjectConfirmation>,请执行以下操作:
SAML 断言时,请按如下方式创建签名:<Subject>元素要将 <Subject> 元素添加到 %SAML.Assertion 实例,执行以下操作:
%SAML.Subject 的新实例。Subject 属性设置为等于此实例。<SubjectConfirmation> 元素要将 <SubjectConfirmation> 元素添加到的 %SAML.Assertion 实例,请使用以下某个小节中的步骤。
<SubjectConfirmation>使用方法 Holder-of-key要使用 Holder-of-key 方法添加 <SubjectConfirmation>,请执行以下操作:
%SYS.X509Credentials 的实例。或者使用与签署断言时使用的相同凭证集。
要创建令牌,调用 %SOAP.Security.BinarySecurityToken 的 CreateX509Token() 类方法。例如:
<BinarySecurityToken><BinarySecurityToken> 包含序列化、base-64 编码格式的证书。可以忽略此令牌,而改用标识证书的信息;接收方使用此信息从相应位置检索证书。为此,请使用上述步骤,并进行以下更改:
2 和 3。也就是说,不要创建和添加 <BinarySecurityToken>.。4 中,使用凭证集(而不是二进制安全令牌)作为 CreateX509() 的第一个参数。例如: set assertion=##class(%SAML.Assertion).CreateX509(credset,referenceOption)
对于 referenceOption,可选择指定一个值,如 X.509 凭证的参考选项中所述。可以使用除 $$$SOAPWSReferenceDirect 之外的任意值。
如果指定凭证集作为第一个参数(正如我们在这个变体中所做的那样),则默认引用选项是证书的指纹。
要创建未签名的 SAML 断言,请使用上述步骤,并进行以下更改:
本主题描述如何将SAML 令牌添加到 WS-Security 标头元素。
另请参阅 %SAML.Assertion 的类参考和相关类。
未实现完整的 SAML 支持。 IRIS 中的 SAML 支持仅指 IRIS 中的 WS-Security 支持中列出的详细信息。
借助 IRIS SOAP 支持,可以将 SAML 令牌添加到 WS-Security 标头元素。
可以选择将此 SAML 令牌用作签名或加密的密钥材料。如果这样做, IRIS 将遵循 WS-Security SAML 令牌配置文件规范。密钥材料来自 SAML 断言的 <SubjectConfirmation> 元素(带有 Holder-of-key (HOK) 方法)和 <SubjectConfirmationData> 或 <KeyInfoConfirmationData>(带有 <KeyInfo> 子元素)。
或者,可以使用 Sender-vouches (SV) 方法添加 <SubjectConfirmation>;在这种情况下,主题不包含密钥。为了保护这种情况下断言,建议您添加从消息签名到 SAML 令牌的安全令牌引用。
要创建 SAML 令牌并将其添加到出站 SOAP 消息,可以使用此处的基本过程或小节中描述的变体。