如何添加时间戳签名与zeep?
问题描述:
我正在尝试创建一个消费WSDL文件并生成适当的SOAP消息的客户端。 这是我如何创建客户端:如何添加时间戳签名与zeep?
client = Client(
wsdl=wsdl
,transport = transport
,wsse = Signature('key.pem', 'cert.pem')
)
在ZEEP代码中的注释说,它应该产生XML类似于此:
<soap:Header>
<wsse:Security mustUnderstand="true">
<wsu:Timestamp>
<wsu:Created>2015-06-25T21:53:25.246276+00:00</wsu:Created>
<wsu:Expires>2015-06-25T21:58:25.246276+00:00</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
但是它不添加mustUnderstand
属性和TimeStamp
是空白。有没有人有一个想法如何确保这些领域设置正确?
答
from datetime import datetime, timedelta from lxml import etree from zeep import Client from zeep.wsse import utils from zeep.plugins import HistoryPlugin # Справочники wsdl = 'http://claim-test2.isb.az:8903/cib/svc/wsdl/codetable.wsdl' username, password = 'ws', '********' bussines_user = '********' class UsernameTokenTimestamp: def __init__(self, username, password=None): self.username = username self.password = password def apply(self, envelope, headers): security = utils.get_security_header(envelope) created = datetime.now() expired = created + timedelta(seconds=5 * 60) token = utils.WSSE.UsernameToken() token.extend([ utils.WSSE.Username(self.username), utils.WSSE.Password(self.password), utils.WSSE.Nonce('43d74dda16a061874d9ff27f2b40e017'), utils.WSSE.Created(utils.get_timestamp(created)), ]) timestamp = utils.WSU('Timestamp') timestamp.append(utils.WSU('Created', utils.get_timestamp(created))) timestamp.append(utils.WSU('Expires', utils.get_timestamp(expired))) security.append(timestamp) security.append(token) # # headers['Content-Type'] = 'application/soap+xml;charset=UTF-8' return envelope, headers def verify(self, envelope): pass history = HistoryPlugin() client = Client( wsdl=wsdl, wsse=UsernameTokenTimestamp(username=username, password=password), plugins=[history] )
+0
P.S.扩展类签名并覆盖方法“apply”。 – dibrovsd
wsdl在其他地方定义,只是一个本地wsdl文件的路径 – andrei