【问题标题】:How to add timestamp to signature with zeep?如何使用zeep为签名添加时间戳?
【发布时间】:2017-06-20 01:39:12
【问题描述】:

我正在尝试创建一个使用 WSDL 文件并生成正确 SOAP 消息的客户端。 这就是我创建客户端的方式:

client = Client(
        wsdl=wsdl
        ,transport = transport
        ,wsse = Signature('key.pem', 'cert.pem')
    )

zeep 代码中的 cmets 说它应该生成类似于此的 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 是空白的。有谁知道如何确保这些字段设置正确?

【问题讨论】:

  • wsdl 是在别处定义的,只是一个本地 wsdl 文件的路径

标签: python soap wsdl wsse zeep


【解决方案1】:
从日期时间导入日期时间,时间增量 从 lxml 导入 etree 从 zeep 导入客户端 从 zeep.wsse 导入工具 从 zeep.plugins 导入 HistoryPlugin # Справочники wsdl = 'http://claim-test2.isb.az:8903/cib/svc/wsdl/codetable.wsdl' 用户名、密码 = 'ws'、'********' bussines_user = '********' 类用户名令牌时间戳: def __init__(self, username, password=None): self.username = 用户名 self.password = 密码 def 应用(自我,信封,标题): 安全 = utils.get_security_header(信封) 创建 = datetime.now() 过期=创建+时间增量(秒=5 * 60) 令牌 = utils.WSSE.UsernameToken() 令牌.扩展([ utils.WSSE.Username(self.username), utils.WSSE.Password(self.password), utils.WSSE.Nonce('43d74dda16a061874d9ff27f2b40e017'), utils.WSSE.Created(utils.get_timestamp(created)), ]) 时间戳 = utils.WSU('时间戳') timestamp.append(utils.WSU('Created', utils.get_timestamp(created))) timestamp.append(utils.WSU('Expires', utils.get_timestamp(expired))) security.append(时间戳) security.append(令牌) # # headers['Content-Type'] = 'application/soap+xml;charset=UTF-8' 回邮信封、信头 def 验证(自我,信封): 经过 历史 = HistoryPlugin() 客户=客户( wsdl=wsdl, wsse=UsernameTokenTimestamp(用户名=用户名,密码=密码), 插件=[历史] )

【讨论】:

  • P.S.扩展类签名和覆盖方法“应用”。
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2017-12-21
  • 2023-03-14
  • 1970-01-01
  • 2017-12-01
  • 2017-11-07
  • 2016-05-05
相关资源
最近更新 更多