第四十四章 创建和添加 SAML 令牌
第四十四章 创建和添加 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消息。请参阅添加安全标头元素中的一般注释。