Сервер WCF и клиент WS-Security to Java (SoapUI) - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь добавить WS-Security в имеющуюся у меня службу, где указанная служба доступна через TLS, и мне в основном удалось протестировать ее с помощью SoapUI.

Однако у меняпроблема с ответом, возвращающимся;хотя ответ выглядит завершенным, SoapUI сообщает:

ERROR:org.apache.ws.security.WSSecurityException: An invalid security token was provided (Bad TokenType "")
   org.apache.ws.security.WSSecurityException: An invalid security token was provided (Bad TokenType "")
    at org.apache.ws.security.str.BSPEnforcer.checkEncryptedKeyBSPCompliance(BSPEnforcer.java:113)
    at org.apache.ws.security.str.SecurityTokenRefSTRParser.processPreviousResult(SecurityTokenRefSTRParser.java:313)
    at org.apache.ws.security.str.SecurityTokenRefSTRParser.parseSecurityTokenReference(SecurityTokenRefSTRParser.java:101)
    at org.apache.ws.security.processor.ReferenceListProcessor.decryptDataRefEmbedded(ReferenceListProcessor.java:169)
    at org.apache.ws.security.processor.ReferenceListProcessor.handleReferenceList(ReferenceListProcessor.java:104)
    at org.apache.ws.security.processor.ReferenceListProcessor.handleToken(ReferenceListProcessor.java:64)
    at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:402)

из того, что я читаю , это связано с отсутствующим атрибутом TokenType в элементе SecurityTokenReference в ответе, и этотакое условие соответствия базовому профилю безопасности.

Вопрос - как мне заполнить этот атрибут в WCF?Я не нашел четкой информации по этому вопросу.

Секция зашифрованного ключа в ответе SOAP от службы WCF выглядит следующим образом:

 <e:EncryptedKey Id="_0" xmlns:e="http://www.w3.org/2001/04/xmlenc#">
    <e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
       <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns="http://www.w3.org/2000/09/xmldsig#"/>
    </e:EncryptionMethod>
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
       <o:SecurityTokenReference>
          <o:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">K6Ag94AG3hQuQ+rqQcBvb88Vl+Y=</o:KeyIdentifier>
       </o:SecurityTokenReference>
    </KeyInfo>
    <e:CipherData>
       <e:CipherValue>FQ58hAfisez2D8J9A49xFRQjfTSFhrWP9wJDnWq0MctAyLhoAynzu3/Z0jYK91uE4DVCgkFo9QGH6O/kR1icQxkpv/xb5gcB1mJTbIpbCOzw6ZtMEfbY0r9ML2fDcChGFPM/nh70Daqi4P9IO8dIZ5EAUcERvDMFvj4fhwwVycSNFUX40/8ywQALQksPb+1j2B3pzHntcyb6CJ0qD10xjbyyQoT0BgR/HeDQEJDQNvx41eqoDSy2/ImkNNfFCXQ47/k1sN48tWur6GEzDuwUBbiAJxVrCgzc6a7F9CrhWiE6DAublBzM8/EBKP5UD5p2WTcjDQxI4cBhqRwIGYcfhQ==</e:CipherValue>
    </e:CipherData>
 </e:EncryptedKey>

Мои привязки WCF выглядят так:

  <customBinding>
    <binding name="NewBinding0">
      <security
          authenticationMode="MutualCertificate"
          allowSerializedSigningTokenOnReply="true"
          messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
          securityHeaderLayout="Lax"

          requireSignatureConfirmation="false"
          messageProtectionOrder="EncryptBeforeSign"
          includeTimestamp="false"
      >
        <localServiceSettings detectReplays="false" />

      </security>
      <textMessageEncoding messageVersion="Soap11" />
      <httpsTransport />
    </binding>
  </customBinding>

В качестве запоздалой мысли, обязательно ли BSP быть «хорошим» сообщением?Я не вижу способа отключить проверку BSP в SoapUI, но, учитывая, что WCF его не применяет, я предполагаю, что это приемлемо?В конечном счете, потребителями сервиса могут быть Java, может быть .NET, может быть что-то еще, поэтому я рад отказаться от поддержки BSP во имя более широкой совместимости, если BSP можно отключить.Если это кажется приемлемым путем, то вместо того, чтобы .NET пытаться соответствовать BSP, как отключить обработку BSP в SoapUI для тестирования?(Тем не менее, если включить настройку BSP в .NET просто, настроив привязку, я буду рад продолжить).

...