文章
· 十月 10 阅读大约需 3 分钟

第四十四章 创建和添加 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 消息,可以使用此处的基本过程或小节中描述的变体。

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

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

 Set x509alias = "servercred" 
 Set pwd = "mypassword" 
 Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,pwd)
  1. 创建包含与给定凭证集关联的证书的二进制安全令牌。为此,调用 %SOAP.Security.BinarySecurityTokenCreateX509Token() 类方法。例如:
 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)

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

  1. 将此令牌添加到 WS-Security 标头元素。为此,请调用 Web客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于方法参数,请使用刚刚创建的令牌。例如:
 do ..SecurityOut.AddSecurityElement(bst)
  1. 根据二进制安全令牌创建签名的 SAML 断言。为此,中调用 %SAML.AssertionCreateX509() 类方法。例如:
 set assertion=##class(%SAML.Assertion).CreateX509(bst)

此方法返回%SAML.Assertion的实例。 IRIS 会自动设置此实例的 SignatureSAMLIDVersion 属性。

该实例代表 <Assertion> 元素。

  1. 指定 %SAML.Assertion 实例的以下基本属性:
  2. 添加 SAML 语句,如添加 SAML 语句中所述。
  3. SAML 断言添加 <Subject> 元素,如添加 <Subject> 元素中所述。
  4. 可选择向 <Subject>添加<SubjectConfirmation> 元素,如添加 <SubjectConfirmation> 元素中所述。

可以使用“钥匙持有人”方法或“发送方凭证”方法确认主题。

  1. 指定 SAML &<Conditions>元素,如添加 <Conditions> 元素中所述。
  2. 可选择添加 <Advice> <Advice>元素,如添加 <Advice> 元素中所述。
  3. 调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于方法参数,请使用您创建的 SAML 令牌。
  4. (可选)通过将 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> 时,建议执行此步骤。

  1. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。
讨论 (0)1
登录或注册以继续