文章
· 九月 17 阅读大约需 2 分钟

第二十七章 添加数字签名 - 变体:使用签名的 SAML 断言

第二十七章 添加数字签名 - 变体:使用签名的 SAML 断言

要添加在签名的 SAML 断言中使用证书的数字签名,请执行以下操作:

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 如果要对任何安全标头元素进行签名,请创建这些安全标头元素。例如:
 set utoken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
  1. 使用 Holder-of-key 方法的<SubjectConfirmation> 元素创建签名的 SAML 断言。请参阅创建和添加 SAML 令牌。
  2. 创建 <Signature> 元素。创建时,使用已签名的 SAML 断言作为 CreateX509() 类方法的第一个参数。例如:
 set signature=##class(%XML.Security.EncryptedKey).CreateX509(signedassertion)
  1. 将数字签名添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于参数,请指定上一步中创建的签名对象。例如:
 do ..SecurityOut.AddSecurityElement(dsig)
  1. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。

将数字签名应用于特定消息部分

默认情况下,当创建数字签名并将其添加到 WS-Security 标头元素时,该签名将应用于 SOAP 主体、标头中的 <Timestamp> 元素(如果存在)以及任何 WS-Addressing 标头元素。

要指定签名适用的部分,请使用前面描述的任一过程,但有一个变体:创建签名时,使用第二个参数 (signatureOptions) 指定要签名的消息部分。将此参数指定为以下任何宏的二进制组合(包含在 %soap.inc 文件中):

  • $$$SOAPWSIncludeNone

$$$SOAPWSIncludeDefault (which equals $$$SOAPWSIncludeSoapBody + $$$SOAPWSIncludeTimestamp + $$$SOAPWSIncludeAddressing)

  • $$$SOAPWSIncludeSoapBody

  • $$$SOAPWSIncludeTimestamp

  • $$$SOAPWSIncludeAddressing

  • $$$SOAPWSIncludeAction

  • $$$SOAPWSIncludeFaultTo

  • $$$SOAPWSIncludeFrom

  • $$$SOAPWSIncludeMessageId

  • $$$SOAPWSIncludeRelatesTo

  • $$$SOAPWSIncludeReplyTo

  • $$$SOAPWSIncludeTo

  • $$$SOAPWSIncludeRMHeaders

要组合宏,请使用加号 (+) 和减号 (-)。例如:

$$$SOAPWSIncludeSoapBody+$$$SOAPWSIncludeTimestamp

注意:这些选项既适用于 CreateX509() 也适用于 Create() 方法;后者在使用派生密钥令牌进行加密和签名中进行了讨论。

 set ts=##class(%SOAP.Security.Timestamp).Create()
 do ..SecurityOut.AddSecurityElement(ts)
 set x509alias = "servercred" 
 set cred = ##class(%SYS.X509Credentials).GetByAlias(x509alias)

 set parts=$$$SOAPWSIncludeSoapBody + $$$SOAPWSIncludeTimestamp
 set signature=##class(%XML.Security.Signature).CreateX509(cred,parts)
讨论 (0)1
登录或注册以继续