2016-05-28 72 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