【问题标题】:Adding hook to XML::Compile::WSDL11 to modify WSSE header向 XML::Compile::WSDL11 添加钩子以修改 WSSE 标头
【发布时间】:2015-11-26 05:56:39
【问题描述】:

我正在使用XML::Compile 套件与SOAP API 配合使用,该SOAP API 使用WSSE 安全性和sha1 生成的摘要密码。不幸的是,XML::Compile::WSS::BasicAuth 使用的密码摘要协议是

sha1_base64(encode utf8 => "$nonce$created$password").'='

其中$nonce$password 是文本值,$created 是时间戳,而我正在使用的API 使用摘要生成器

sha1_base64($nonce.$created.sha1($password)).'='

我想我可以通过使用钩子重写密码来解决这个问题,就像在

$wsdl->addHook(type=> 'wsse::PasswordString',replace => \&replace_pwd);

由于当前的 CPAN 文档没有明确指定挂钩调用语法,我依赖于模块作者在 http://grokbase.com/t/sc/xml-compile/1283vscwxz/need-help-with-xml-compile-translate-writer-and-attributes-with-namespace 的 cmets。然而,回调函数replace_pwd() 永远不会被调用,结果是XML::Compile::WSS::BasicAuth 生成的原始(错误)密码继续被发送。

如何让它工作?

TIA。

【问题讨论】:

    标签: xml perl soap wss


    【解决方案1】:

    我最近遇到了完全相同的问题,最后创建了一个 XML::Compile::WSS::BasicAuth 的实例,使用从 XML::Compile::WSS::BasicAuth->prepareWriting 复制的代码设置 XCWB_login 修改为根据需要生成密码字符串,并将 BasicAuth 实例作为 wsse_Security 选项传递给 XML::Compile::Schema->call。

    这是超级蹩脚的,但我发现使用这些库解决这个问题的唯一方法。

    【讨论】:

      猜你喜欢
      • 2014-08-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      相关资源
      最近更新 更多