Как добавить атрибут EncodingType к элементу Nonce UsernameToken в WSE 3.0 (.NET) - PullRequest
6 голосов
/ 14 сентября 2011

Я пытаюсь вызвать веб-службу Java из веб-приложения MVC3 .NET с использованием WSE 3.0.

Однако веб-службе требуется атрибут "EncodingType" в элементе Nonce имени пользователяToken.Ниже приведен пример конверта SOAP, который корректно работает с этим веб-сервисом Java:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:v1="http://schema.mydomain.org/sms/v1_0">
   <soap:Header>
     <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
       <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <wsse:Username>myUsername</wsse:Username>
         <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password>
         <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">XQkp6oYc3DRv41cxkSTW8w==</wsse:Nonce>
         <wsu:Created>2011-09-13T20:50:08.355Z</wsu:Created>
       </wsse:UsernameToken>  
    </wsse:Security>
  </soap:Header>
   <soap:Body>
      <v1:ping/>
   </soap:Body>
</soap:Envelope>

Ниже приведен конверт SOAP, созданный из прокси-сервера, созданного VS2010 (захваченного в Fiddler):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope">
    <wsse:Security env:mustUnderstand="true">
      <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-111f922b-72c1-4057-bce4-f6555552ce6a">
        <wsse:Username>myUsername</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password>
        <wsse:Nonce>qYse3Lor9sAJ9pKPefgkKQ==</wsse:Nonce>
        <wsu:Created>2011-09-13T20:50:38Z</wsu:Created>
      </wsse:UsernameToken>
    </wsse:Security>
  </env:Header>
  <soap:Body>
      <v1:ping/>
  </soap:Body>
</soap:Envelope>

Если этот атрибут отсутствует, этот веб-сервис возвращает «Неверный токен безопасности (произошла ошибка при обработке токена имени пользователя)»

Как добавить атрибут EncodingType?

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

Я обнаружил, что установка "isBSPCompliant" в качестве свойства jaxws на моей конечной точке в значение "false" решает проблемы EncodingType. Было ли это решением, которое вы также нашли?

2 голосов
/ 15 сентября 2011

Я нашел приемлемое решение ...

Флаг EncodingType соответствует имени пользователя WSSE и спецификации безопасности токена 1.1, которая является спецификацией, необходимой для версии платформы Apache CXF, которую использует эта веб-служба Java. .NET не соответствует этой спецификации. К счастью, в CXF был флаг, чтобы отключить требование. Мы сделали это и теперь можем общаться.

...