我正在使用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。
答案 0 :(得分:0)
我最近遇到了完全相同的问题,最终创建了一个XML :: Compile :: WSS :: BasicAuth实例,设置XCWB_login,其代码复制自XML :: Compile :: WSS :: BasicAuth-> prepareWriting modified根据需要生成密码字符串,并将该BasicAuth实例作为wsse_Security选项传递给XML :: Compile :: Schema->调用。
这是超级蹩脚的,但我发现使用这些库解决这个问题的唯一方法。