WSO2 БЕЗОПАСНОСТЬ USERNAMETOKEN ESB И DSS
Я пытаюсь создать веб-сервис, используя ESB из WSO2. Мой сервис использует dataservice для получения данных из базы данных, поэтому мне нужно соединить esb с dss. Когда прокси-сервер и служба данных не являются второстепенными, они работают нормально, но когда они безопасны, я получаю следующую ошибку
<soapenv:Fault xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<faultcode>wsse:InvalidSecurity</faultcode>
<faultstring>Nonce value : 8/BKMsFNs2gTJ58FXyV43Q==, already seen before for user name : UsuarioPrueba1. Possibly this could be a replay attack.</faultstring>
<detail/>
</soapenv:Fault>
Securizing dataservice, но не прокси его работа хорошо. Я отправляю имя пользователя и пароль, созданные в пользователе и ролях из ESB и DSS
1 ответ
Один из возможных сценариев, где мы могли бы получить эту ошибку, это если мы используем посредник заголовка для отправки настраиваемого заголовка безопасности SOAP.
Например, я создал прокси как в [1], и вы можете заметить, что я поместил следующий элемент в заголовок безопасности мыльного сообщения.
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">95euUDNp5wT7nT3BadS9Tw==</wsse:Nonce>
Так как я каждый раз отправляю один и тот же одноразовый номер бэкэнду, он определяется как возможная атака повторного воспроизведения бэкэндом.
Чтобы избавиться от этой ошибки, я удалил вышеуказанный элемент "Nonce". Затем сервер перестал выдавать ошибку
"Значение nonce: 95euUDNp5wT7nT3BadS9Tw==, уже виденное ранее для имени пользователя: admin. Возможно, это может быть атака воспроизведения".
больше.
Только если мы отправим элемент "Nonce" в заголовок безопасности Soap, бэкэнд проверит возможные атаки воспроизведения. Таким образом, удаление этого элемента является одним из способов избавиться от ошибки.
Это также означает, что это решение, только если вы не хотите, чтобы серверная часть оценивала значение Nonce для обнаружения атак воспроизведения.
Я знаю, что этому вопросу один год; но думал добавить ответ в качестве ссылки.
[1]
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="InsuranceServiceProxy2"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<header scope="default">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
soapenv:mustUnderstand="1">
<wsu:Timestamp wsu:Id="TS-23">
<wsu:Created>2015-06-13T03:07:55Z</wsu:Created>
</wsu:Timestamp>
<wsse:UsernameToken wsu:Id="UsernameToken-22">
<wsse:Username>admin</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">admin</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">95euUDNp5wT7nT3BadS9Tw==</wsse:Nonce>
<wsu:Created>2015-06-13T03:07:55.091Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</header>
<property name="Authorization"
value="Basic YWRtaW46YWRtaW4="
scope="transport"
type="STRING"/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<endpoint>
<address uri="https://localhost:8243/services/InsuranceServiceBEProxy2"/>
</endpoint>
</target>
<description/>
</proxy>