2015-11-16 4 views
0

Обязателен ли заголовок SOAP для WS-Security Response? Если да, то почему?SOAP Header на ответ WS-Security

Мне интересно, потому что мой клиент жалуется на отсутствие заголовка SOAP в ответе сервера (который на самом деле отсутствует), и нет возможности его настроить.

Я использую немного устаревшую технологию (Axis2 + Rampart 1.4).

Это политика безопасности:

<wsp:Policy wsu:Id="SigOnly" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> 
    <wsp:ExactlyOne> 
     <wsp:All> 
      <sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
       <wsp:Policy> 
        <sp:InitiatorToken> 
         <wsp:Policy> 
          <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once"> 
           <wsp:Policy> 
            <sp:WssX509V3Token10/> 
           </wsp:Policy> 
          </sp:X509Token> 
         </wsp:Policy> 
        </sp:InitiatorToken> 
        <sp:RecipientToken> 
         <wsp:Policy> 
          <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Once"> 
           <wsp:Policy> 
            <sp:WssX509V3Token10/> 
           </wsp:Policy> 
          </sp:X509Token> 
         </wsp:Policy> 
        </sp:RecipientToken> 
        <sp:AlgorithmSuite> 
         <wsp:Policy> 
          <sp:TripleDesRsa15/> 
         </wsp:Policy> 
        </sp:AlgorithmSuite> 
        <sp:Layout> 
         <wsp:Policy> 
          <sp:Strict/> 
         </wsp:Policy> 
        </sp:Layout> 
        <sp:IncludeTimestamp/> 
        <sp:OnlySignEntireHeadersAndBody/> 
       </wsp:Policy> 
      </sp:AsymmetricBinding> 
      <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
       <sp:Body/> 
      </sp:SignedParts> 
     </wsp:All> 
    </wsp:ExactlyOne> 
</wsp:Policy> 

ответ

0

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

Я предполагаю, что политика запроса применяется на сервере, так как вы не получили ошибку MustUnderstand в ответе. Вы уверены, что политика ответа также применяется?

1

Политика реагирования была применена. Проблема связана с кодом Rampart - он ожидал заголовок, как он определен в WS-Security 1.1, но сервер использовал WS-Security 1.0, где этот заголовок не является обязательным.

Требуется, чтобы тень org.apache.rampart.util.RampartUtil класс с локальным, с переопределенным isSecHeaderRequired, чтобы он всегда возвращал False для входящих сообщений.

Это соответствует стандарту WS-Security 1.0, который не говорит ни слова, требующего заголовка. WS-Security 1.1 требует заголовка неявно при использовании Подписи (https://docs.oasis-open.org/wss/v1.1/wss-v1.1-spec-os-SOAPMessageSecurity.pdf, глава 8.5.1)

0

Как уже говорила Барбара. Причина в том, что политика, применяемая на стороне клиента, не соответствует той, которая применяется на стороне сервера.

E.g. тег

<sp:IncludeTimestamp/> 

в политике приводит к клиенту, чтобы отправить запрос с wsse тега в заголовке SOAP, как этот

<wsse:Security 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" soapenv:mustUnderstand="true"> 
    .... 
    <wsu:Timestamp wsu:Id="TS-F89FADB76552899AC314938177135681"> 
     <wsu:Created>2017-05-03T13:21:53.566Z</wsu:Created> 
     <wsu:Expires>2017-05-03T13:26:53.566Z</wsu:Expires> 
    </wsu:Timestamp> 
    ... 
    </wsse:UsernameToken> 
</wsse:Security> 

И политикой клиент ожидает получить от server a <wsu:Timestamp> тег под тегом <wsse> в ответе, чтобы он мог проверить политику метки времени на стороне клиента. Если сервер не выдал ответ, соответствующий политике (например, поскольку сервер создает ответное сообщение SOAP с использованием другой политики.), То принятие ответа не выполняется.

В моем случае сервер отвечал пустым заголовком SOAP (без тега <wsse>). В результате, за исключением следующего:

org.apache.axis2.AxisFault: Missing wsse:Security header in request 
at org.apache.rampart.handler.RampartReceiver.setFaultCodeAndThrowAxisFault(RampartReceiver.java:186) 
at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:99) 
.... 

Изменение политики на стороне клиента к чему-сервер был настроен вернуться сделал свою работу.

 Смежные вопросы

  • Нет связанных вопросов^_^