Неверный запрос в SOAPUI - PullRequest
       45

Неверный запрос в SOAPUI

5 голосов
/ 01 марта 2012

Я пытаюсь использовать веб-сервис, используя Delphi 2010 и Indy. Чтобы установить пригодный для использования поток SOAP для сравнения с потоком, созданным моей программой, я тестирую в SOAPUI. Я использую поток SOAP, предоставленный поставщиком веб-службы, который также соответствует потоку SOAP, указанному в файле WSDL. Я получаю сообщение об ошибке HTTP 400 (неверный запрос) от службы.

Из того, что я могу найти в Интернете, видно, что получение ошибки HTTP 400 указывает на то, что ваш запрос SOAP искажен и не может быть прочитан веб-службой. Я проверил свой поток SOAP с использованием XMLPad , и, похоже, XML хорошо сформирован. Я полагаю, это может означать, что что-то не соответствует требованию схемы. Сначала я проверю описание схемы для пароля в случае, если ожидается, что он не будет отправлен в виде простого текста. Что еще я должен проверять, чтобы устранить ошибку HTTP 400?

Вот мой запрос (без имени пользователя и пароля) на случай, если это поможет:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
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" 
xmlns:xop="http://www.w3.org/2004/08/xop/include" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://wwww3.org/2001/XMLSchema-instance">
   <soap:Header>
      <wsa:Action>http://edd.ca.gov/SendTransmission</wsa:Action>
      <wsa:MessageID>urn:uuid:5aa788dc-86e1-448b-b085-2d2743cf9f26</wsa:MessageID>
      <wsa:ReplyTo>
         <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
      </wsa:ReplyTo>
      <wsa:To>http://fsettestversion.edd.ca.gov/fsetproxy/fsetservice.asmx</wsa:To>
      <wsse:Security soap:mustUnderstand="1">
         <wsse:UsernameToken wsu:Id="UsernameToken">
            <wsse:Username>#USERNAME#</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">#PASSWORD#/wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">O5QWht1bslLCX6KnlEypAA==</wsse:Nonce>
            <wsu:Created>2012-02-29T22:32:38.250Z</wsu:Created>
         </wsse:UsernameToken>
         <wsu:Timestamp wsu:Id="Timestamp-805a7373-335c-43b6-ba21-6596c4848dbf">
            <wsu:Created>2012-02-22T15:41:42Z</wsu:Created>
            <wsu:Expires>2012-02-22T15:46:42Z</wsu:Expires>
         </wsu:Timestamp>
      </wsse:Security>
   </soap:Header>
   <soap:Body>
      <SendTransmission xmlns="http://edd.ca.gov/">
         <SendTransmissionRequest xmlns="http://www.irs.gov/a2a/mef/MeFTransmitterServiceWse.xsd">
            <TransmissionDataList>
               <Count>1</Count>
               <TransmissionData>
                  <TransmissionId>123456789</TransmissionId>
                  <ElectronicPostmark>2012-02-22T07:41:42.2502206-08:00</ElectronicPostmark>
               </TransmissionData>
            </TransmissionDataList>
         </SendTransmissionRequest>
         <fileBytes>
            <xop:Include href="cid:1.634654933022658454@example.org"/>
         </fileBytes>
      </SendTransmission>
   </soap:Body>
</soap:Envelope>

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Может быть что-то еще, но на данный момент я с подозрением отношусь к wsse: UsernameToken.Я скачал документ по адресу http://docs.oasis -open.org / wss / 2004/01 / oasis-200401-wss-username-token-profile-1.0.pdf и прочитал его вчера вечером.Он написан довольно простым языком, и я чувствую, что понимаю, о чем он говорит, но это оставляет меня с меньшим вопросом, чем тот, который я задавал изначально.В этом документе предлагается использовать простой текстовый пароль в следующем формате:

<S11:Envelope xmlns:S11="..." xmlns:wsse="...">
  <S11:Header>
  ...
    <wsse:Security>
      <wsse:UsernameToken>
        <wsse:Username>Zoe</wsse:Username>
        <wsse:Password>IloveDogs</wsse:Password>
      </wsse:UsernameToken>
    </wsse:Security>
  ...
  </S11:Header>
...
</S11:Envelope>

Или использовать дайджест пароля.Он определяет дайджест пароля следующим образом:

Password_Digest = Base64 (SHA-1 (nonce + создал + пароль))

Согласно ссылке, формат дляДайджест пароля будет выглядеть следующим образом:

<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "...">
  <S11:Header>
  ...
  <wsse:Security>
    <wsse:UsernameToken>
      <wsse:Username>NNK</wsse:Username>
      <wsse:Password Type="...#PasswordDigest">
      weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==
      </wsse:Password>
      <wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce>
      <wsu:Created>2003-07-16T01:24:32Z</wsu:Created>
    </wsse:UsernameToken>
  </wsse:Security>
  ...
  </S11:Header>
...
</S11:Envelope>

Этот формат не используется в примере, предоставленном издателем веб-службы.В текстовой версии в ссылке не используется одноразовый номер.В примере сообщения используется одноразовый номер, но требуется простой текстовый пароль.Мне кажется, что использование одноразового номера без дайджеста пароля не повышает безопасность сообщения.Это может быть любая случайная строка символов, если нет соглашения о том, как ее создать.Я упускаю суть?

Я знаю, что это должно показаться утомительным занятием, но я надеюсь, что, предоставив это здесь, возможно, мы сможем оказать небольшую помощь следующему пришедшему человеку.

0 голосов
/ 19 июля 2012

Я тоже сталкивался с этой проблемой. В ответ издатель веб-службы (edd.ca.gov) заявил, что «значение требуется стандартами SOAP 1.2», но я не нахожу действительной поддержки для этого. Похоже, мы оба движемся по одному и тому же пути (FSET) и, возможно, нам следует объединиться и работать вместе, две головы лучше, чем одна. Я обнаружил много ошибок в коде примера, и я все еще заставляю его работать.

...