第三十三章 使用派生密钥令牌进行加密和签名 - 使用
进行加密(一)
- 如果加密了任何安全标头元素,请将它们添加到
WS-Security 标头元素中。为此,请调用 Web 客户端或 Web 服务的 属性的 方法。在这种情况下,需要两个参数:
a. 安全标头元素(而不是从中生成的的 %XML.Security.EncryptedData)。
b. 引用列表实例。第二个参数指定将第一个参数指定的项目放在何处。如果参数是 A、B,则 IRIS 确保 在 之后。指定此项以便收件人首先处理引用列表,然后再处理依赖于它的加密安全标头元素。
do client.SecurityOut.AddSecurityElement(userToken,reflist)
如果仅加密了 主体,系统会自动将 元素作为 的子元素。
- 发送
SOAP
例如,以下客户端代码对 SOAP进行加密:
// Create UsernameToken
set userToken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
// get credentials for encryption
set cred = ##class(%SYS.X509Credentials).GetByAlias("servercred")
// get EncryptedKey element to encrypt <UsernameToken)
// $$$SOAPWSEncryptNone means that this key does not encrypt the body
set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred,$$$SOAPWSEncryptNone)
//add to WS-Security Header
do client.SecurityOut.AddSecurityElement(enckey)
// get derived key to use for encryption
// second argument specifies how the derived key
// refers to the key on which it is based
set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(enckey,
$$$SOAPWSReferenceEncryptedKey)
//add to WS-Security Header
do client.SecurityOut.AddSecurityElement(dkenc)
// create <EncryptedData> element to contain <UserToken>
set encdata=##class(%XML.Security.EncryptedData).Create(dkenc,userToken,
$$$SOAPWSReferenceDerivedKey)
// create <EncryptedData> element to contain SOAP body
set encdata2=##class(%XML.Security.EncryptedData).Create(dkenc,"",
$$$SOAPWSReferenceDerivedKey)
// create <ReferenceList> with <DataReference> elements that
// point to these two <EncryptedData> elements
set reflist=##class(%XML.Security.ReferenceList).%New()
set dataref=##class(%XML.Security.DataReference).Create(encdata)
do reflist.AddReference(dataref)
set dataref2=##class(%XML.Security.DataReference).Create(encdata2)
do reflist.AddReference(dataref2)
// add <ReferenceList> to WS-Security header
do client.SecurityOut.AddSecurityElement(reflist)
// add encrypted <UserName> to security header;
// 2nd argument specifies position
do client.SecurityOut.AddSecurityElement(userToken,reflist)
// encrypted SOAP body is handled automatically