添加到XML :: Compile :: WSDL11的钩子来修改WSSE头

时间:2015-09-01 05:26:18

标签: xml perl soap wss

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

  

sha1_base64(编码utf8 =>“$ nonce $ created $ password”)。'='

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

  

sha1_base64($现时。$ created.sha1($密码))。 '='

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

  

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

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

如何让它发挥作用?

TIA。

1 个答案:

答案 0 :(得分:0)

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

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