第三十二章 使用派生密钥令牌进行加密和签名 - 使用 <DerivedKeyToken>
进行加密
要使用 <DerivedKeyToken>
进行加密,请使用以下步骤:
- 如果要加密一个或多个安全标头元素,请创建这些安全标头元素。.
- 创建
<DerivedKeyToken>
并将其添加到WS-Security
标头,如创建和添加<DerivedKeyToken>
中所述。
请注意,此步骤还会创建并添加 <EncryptedKey>
所基于的 <EncryptedKey>
元素。
- 对于要加密的每个元素,请根据该元素创建一个
<EncryptedData>
元素。为此,请调用%XML.Security.EncryptedData
的Create()
类方法。在此过程中,请指定以下参数:
a. 派生密钥令牌
b. 要加密的项目。省略此参数可加密正文。
c. 指定 <EncryptedData>
元素如何引用 <DerivedKeyToken>
的宏。在此场景中,当前唯一支持的值是 $$$SOAPWSReferenceDerivedKey
。
例如,加密 <UsernameToken>
:
set refopt=$$$SOAPWSReferenceDerivedKey
set encryptedData=##class(%XML.Security.EncryptedData).Create(dkenc,userToken,refopt)
或者,加密正文:
set refopt=$$$SOAPWSReferenceDerivedKey
set encryptedData=##class(%XML.Security.EncryptedData).Create(dkenc,,refopt)
- 创建
<ReferenceList>
元素。为此,在类中调用%XML.Security.ReferenceList
的%New()
方法。例如:
set reflist=##class(%XML.Security.ReferenceList).%New()
- 在这个
<ReferenceList>
中,创建一个指向<EncryptedData>
元素的<ReferenceList>
。为此,对每个<EncryptedData>
执行以下操作:
a. 调用 %XML.Security.DataReference
的 Create()
类方法,并指定加密数据实例作为参数。此方法返回 %XML.Security.DataReference
的实例。
b. 调用引用列表实例的 AddReference()
方法并指定数据引用实例作为参数。
set dataref=##class(%XML.Security.DataReference).Create(encdata)
do reflist.AddReference(dataref)
set dataref2=##class(%XML.Security.DataReference).Create(encdata2)
do reflist.AddReference(dataref2)
- 将
<ReferenceList>
元素添加到WS-Security
标头元素。为此,请调用Web
客户端或Web
服务的SecurityOut
属性的AddSecurityElement()
方法。对于要添加的元素,请指定您的引用列表实例。
do ..SecurityOut.AddSecurityElement(reflist)
网友评论