2016-05-28 70 views
4

代码:蟒蛇泡沫的UsernameToken

security = Security() 
token = UsernameToken('b77a5c561934e089', 'kmfHkNZyn1U/pGAiY3+h0BoHdKI=') 
security.tokens.append(token) 
client.set_options(wsse=security) 

我的问题是这样的一个:包括用户名令牌时,我收到这样的头信息:

<SOAP-ENV:Header> 
     <wsse:Security mustUnderstand="true"> 
     <wsse:UsernameToken> 
      <wsse:Username>b77a5c561934e089</wsse:Username> 
      <wsse:Password>kmfHkNZyn1U/pGAiY3+h0BoHdKI=</wsse:Password> 
     </wsse:UsernameToken> 
     </wsse:Security> 
    </SOAP-ENV:Header> 

但我需要的是这种需求的响应网络服务:

<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
    <wsp:Policy> 
    <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> 
     <wsp:Policy> 
     <sp:WssUsernameToken10 /> 
     </wsp:Policy> 
    </sp:UsernameToken> 
    </wsp:Policy> 
</sp:SignedSupportingTokens> 

我该如何做泡沫?搜索整个互联网,但没有找到解决方案。

回答

0

您的代码是一个SOAP通用解决方案。您的网络服务似乎需要自定义响应。

我认为你的验证不起作用?

尝试marshall您的回复到您的请求者class。这plugin允许您修改您的soap信封。 您可以添加自己的属性。

class MyRequesterClass(object): 

    class _myServiceMarshalled(MessagePlugin): 

     def marshalled(self, context): 
      commons.set_service_common_header(context, "yourService") 

      body = context.envelope.getChild('Body') 
      service = body.getChild("childWhereYouWantAddYourCustomXML") 

      service.attributes.append(Attribute("sp:IncludeToken", "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient")) 

      etc, etc