2012-05-02 2 views
3

Java/Axis 클라이언트에서 사용하고있는 usernameToken 인증을 사용하는 WCF4 서비스를 개발했습니다.WCF 응답의 MustUnderstand 특성으로 인해 Java/Axis 클라이언트에서 오류가 발생합니다.

내가 요청의 본문이 같은 모습에 오는 것을 볼 수 있습니다 ...

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header> 
    <wss:Security xmlns:wss="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wss:UsernameToken> 
     <wss:Username>username</wss:Username> 
     <wss:Password>password</wss:Password> 
     </wss:UsernameToken> 
    </wss:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
    {snipped} 
    </soapenv:Body> 
</soapenv:Envelope> 

우리는이 같은 모습을 반환하는 응답 ...

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Header> 
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <u:Timestamp u:Id="_0"> 
     <u:Created>2012-05-02T01:23:12.711Z</u:Created> 
     <u:Expires>2012-05-02T01:28:12.711Z</u:Expires> 
     </u:Timestamp> 
    </o:Security> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    {snipped} 
    </s:Body> 
</s:Envelope> 

문제는 응답에 mustUnderstand = "1"속성이 있어야합니다. 이로 인해 Java/Axis 클라이언트에서 "Must Understand check failed"오류가 발생합니다.

누구든지이 s : mustUnderstand 특성을 제거하거나 적어도 "1"대신 "0"으로 설정하도록 WCF를 구성하는 방법을 알고 있습니까?

+0

이 도움을한다 ... 다음과 같습니다? http://stackoverflow.com/questions/3551738/how-to-modify-a-wcf-message-headers-mustunderstanding-using-clientinspector – Chris

+1

보안 구성은 무엇입니까? 아마도 구성에서 시간 소인을 제거하면 문제가 해결됩니다. 그렇지 않으면 사용자 정의 메시지 인코더를 구현하여 헤더를 수정해야합니다. –

답변

1

이 interop 문제를 해결하기 위해 우리가 생각해 낸 해결책은 사용자 지정 바인딩으로 변경하고 includeTimestamp = "false"특성을 지정하는 것이 었습니다. 이렇게함으로써 타임 스탬프 (생성 및 만료 됨)가 응답에 추가되지 않아서 모든 보안 문제를 일으키는 mustUnderstand 특성을 포함하여 전체 보안 헤더가 사라졌습니다.

<customBinding> 
    <binding name="customBindingConfig"> 
     <security authenticationMode="UserNameOverTransport" includeTimestamp="false" /> 
     <textMessageEncoding messageVersion="Soap11" /> 
     <httpTransport /> 
    </binding> 
</customBinding> 

그래서 응답은 이제 단순히

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     {snipped} 
    </s:Body> 
</s:Envelope> 
+0

서비스의 service.xml에 타임 스탬프가 표시 되었습니까? –

+0

@ 브라이언, 잘 모르겠습니다. 몇 달 전에 회사를 떠났으므로 소스 코드에 액세스 할 필요가 없습니다. 죄송합니다. – barrylloyd

관련 문제