Как расшифровать Secure SOAP Response, как это делает SoapUI

SoapUI новичок здесь. Я вызываю этот безопасный API Soap с SoapUI 5.3, и вот как заголовок безопасности был настроен в SoapUI:

  1. Щелкните правой кнопкой мыши проект и выберите show project view
  2. Выбрать WS-Security Configurations табуляция
  3. Выбрать Outgoing WS-Security Configuration вкладка и создать новый конфиг
  4. WSS Entries создано: Имя пользователя (проверено adds a nonce а также adds a created ящики и выбранный PasswordType as PasswordText), Отметка времени (TTL 30, проверил Sets precision of timestamp to milliseconds коробка)

При отправке моего SOAP-запроса тип аутентификации Basic и выбрал вышеуказанную конфигурацию.

Заголовок запроса SOAP теперь выглядит так:

<soapenv:Header>
<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">
<wsu:Timestamp
wsu:Id="TS-68AE03334F6A9DBDDC150599839319940">
<wsu:Created>
2017-09-21T12:53:13.199Z
</wsu:Created>
<wsu:Expires>
2017-09-21T12:53:43.199Z
</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken
wsu:Id="UsernameToken-68AE03334F6A9DBDDC150599839319939">
<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">
8NBStc5kqrgPWG9pj09Svw==
</wsse:Nonce>
<wsu:Created>
2017-09-21T12:53:13.199Z
</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>

И все работает очень хорошо в SoapUI. Но в конечном итоге я собираюсь написать клиент на Java или PHP для использования этого API. Есть вещи, которые я хочу понять:

  1. <wsu:Timestamp wsu:Id="TS-68AE03334F6A9DBDDC150599839319940">
    wsu:Id атрибут для Timestamp а также Username токены, есть ли критерии или я могу генерировать случайное значение для каждого в каждом запросе?
  2. nonce: Та же история, что и 1 выше. Тем не менее, encodingType Base64Binary, Я понимаю, что nonce случайное значение, уникальное для каждого запроса, чтобы отразить атаки воспроизведения. Имея в виду encodingType, как мне последовательно создать хороший из моего php / Java-клиента? Когда я base64decode код, сгенерированный SoapUI, он все еще возвращается в двоичном виде, я ожидал String, что SoapUI делает здесь ??
  3. Ответ в SoapUI — XML, но когда я отправляю запрос из PHP, я получаю либо бинарный ответ, либо просто так:
    bool(false)
    Так как же SoapUI преобразовать ответ в обычный XML и как я могу сделать то же самое в моем коде ??
    Вот мой тестовый скрипт PHP, который работал для меня как шарм с другими API-интерфейсами Soap:

    <?php
    $soap = '<soapenv:Envelope
    xmlns:ns="http://soap.crmapi.util.redknee.com/common/xsd/2011/05"xmlns:ns1="http://soap.crmapi.util.redknee.com/common/xsd/2008/08"xmlns:ns2="http://soap.crmapi.util.redknee.com/subscriptions/xsd/2011/01"xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:sub="http://soap.crmapi.util.redknee.com/subscriptions/xsd/Subscriptions-v2.0">
    <soapenv:Header>
    <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">
    <wsu:Timestamp
    wsu:Id="TS-68AE03334F6A9DBDDC150599839319940">
    <wsu:Created>
    2017-09-21T12:53:13.199Z
    </wsu:Created>
    <wsu:Expires>
    2017-09-21T12:53:43.199Z
    </wsu:Expires>
    </wsu:Timestamp>
    <wsse:UsernameToken
    wsu:Id="UsernameToken-68AE03334F6A9DBDDC150599839319939">
    <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">
    8NBStc5kqrgPWG9pj09Svw==
    </wsse:Nonce>
    <wsu:Created>
    2017-09-21T12:53:13.199Z
    </wsu:Created>
    </wsse:UsernameToken>
    </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
    <sub:methodName>
    <sub:header>
    </sub:header>
    <sub:subscriptionRef>
    <ns2:mobileNumber>
    256723009772
    </ns2:mobileNumber>
    <ns2:spid>
    10
    </ns2:spid>
    </sub:subscriptionRef>
    <!--Zero or more repetitions:-->
    </sub:methodName>
    </soapenv:Body>
    </soapenv:Envelope>';
    $header = array(
    'Connection: Keep-Alive',
    'Content-Length: ' . strlen($soap),
    'SOAPAction:urn:methodName',
    'Host:IP:Port'
    );
    $url = 'https://ip:port/services/SubscriptionService/';
    $ch = curl_init($url); // LIVE
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $soap);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    
    $result = curl_exec($ch);
    echo "\nResult\n$result\n";
    var_dump($result);
    

1

Решение

Это мой заголовок безопасности мыла

<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" 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">
<wsu:Timestamp wsu:Id="TS-38771EEA66D91AA9451507304959249232">
<wsu:Created>2017-10-06T15:49:19Z</wsu:Created>
<wsu:Expires>2017-10-06T15:57:39Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken wsu:Id="UsernameToken-38771EEA66D91AA9451507304959248231">
<wsse:Username>MyUser</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">AfptyLZx14GWb3gdd1cx6g==</wsse:Nonce>
<wsu:Created>2017-10-06T15:49:19.248Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security></soapenv:Header>

Я пытаюсь зашифровать wsu: Id для элемента Timestamp и UsernameToken.
Значение

38771EEA66D91AA9451507304959249232

По-видимому, исходное значение соответствует DateTime для Created at Request, но метод, используемый для шифрования, я не знаю, вы нашли что-то для этого?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]