第四十四章 创建和添加 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
消息,可以使用此处的基本过程或小节中描述的变体。
- 可选择包含
%soap.inc
包含文件,它定义了可能需要使用的宏。 - 创建
%SYS.X509Credentials
的实例,如以编程方式检索凭据集中所述。
此 IRIS
凭证集必须包含自己的证书。例如:
Set x509alias = "servercred"
Set pwd = "mypassword"
Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,pwd)
- 创建包含与给定凭证集关联的证书的二进制安全令牌。为此,调用
%SOAP.Security.BinarySecurityToken
的CreateX509Token()
类方法。例如:
set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)
其中 credset
是在上一步中创建的 IRIS
凭证集。
- 将此令牌添加到
WS-Security
标头元素。为此,请调用Web
客户端或Web
服务的SecurityOut
属性的AddSecurityElement()
方法。对于方法参数,请使用刚刚创建的令牌。例如:
do ..SecurityOut.AddSecurityElement(bst)
- 根据二进制安全令牌创建签名的
SAML
断言。为此,中调用%SAML.Assertion
的CreateX509()
类方法。例如:
set assertion=##class(%SAML.Assertion).CreateX509(bst)
此方法返回%SAML.Assertion
的实例。 IRIS
会自动设置此实例的 Signature
、SAMLID
和 Version
属性。
该实例代表 <Assertion>
元素。
- 指定
%SAML.Assertion
实例的以下基本属性: - 添加
SAML
语句,如添加SAML
语句中所述。 - 向
SAML
断言添加<Subject>
元素,如添加<Subject>
元素中所述。 - 可选择向
<Subject>
添加<SubjectConfirmation>
元素,如添加<SubjectConfirmation>
元素中所述。
可以使用“钥匙持有人”方法或“发送方凭证”方法确认主题。
- 指定
SAML &<Conditions>
元素,如添加<Conditions>
元素中所述。 - 可选择添加 <Advice>
<Advice>
元素,如添加<Advice>
元素中所述。 - 调用
Web
客户端或Web
服务的SecurityOut
属性的AddSecurityElement()
方法。对于方法参数,请使用您创建的SAML
令牌。 - (可选)通过将 SOAP 消息签名中的引用添加到
SAML
断言来签署SAML
断言。
如果签名是对象中的 %XML.Security.Signature
,那么将按如下方式签署 SAML
断言:
Set str=##class(%SOAP.Security.SecurityTokenReference).GetSAMLKeyIdentifier(assertion)
Set ref=##class(%XML.Security.Reference).CreateSTR(str.GetId())
Do signature.AddReference(ref)
特别是当使用 Sender Vouches
方法添加 <SubjectConfirmation>
时,建议执行此步骤。
- 发送
SOAP
消息。请参阅添加安全标头元素中的一般注释。