Веб-служба вызова iphone с зашифрованным вручную сообщением
Я разрабатываю приложение IOS, которое будет вызывать операцию веб-службы. Существующая веб-служба настроена с безопасностью wsHttpBinding, установленной как TransportWithMessageCredential.
Я использовал wsdl2objc для генерации файлов реализации (из wsdl) и настроил небольшое приложение для тестирования. Однако я не могу заставить приложение правильно общаться с веб-службой, и из того, что я прочитал, это кажется практически невозможным с этими настройками веб-конфигурации (wsHttpBinding, Transport и Message security).
Я провел немало исследований, и с помощью информации, найденной на этом сайте (и других), мне удалось выяснить, как должны выглядеть запросы SOAP. Я в основном использовал WCF Test Client с Fiddler для мониторинга трафика. Я также попробовал soapUI, что оказалось не так успешно, как я надеялся.
Я настроил тестовый веб-сервис локально, и я могу успешно использовать его, но только когда веб-конфигурация имеет безопасность с использованием BasicHttpBinding или wsHttpBinding security mode = "none" (что, как я понимаю, похоже на basicHttpBinding).
Мое решение (я надеюсь) состоит в том... что если я напишу веб-сервис для вызова этого веб-сервиса? Обе веб-службы будут находиться на сервере, но та, которую будет использовать iphone, настроена с использованием SSL. Идея заключается в том, чтобы вручную зашифровать операцию (и необходимые атрибуты) с помощью инфраструктуры безопасности ios (HMAC) или другого алгоритма хеширования, и расшифровать веб-службу SSL, а затем вызвать запрошенную операцию из существующего веб-службы. Имеет ли это смысл? Я думаю, что это кажется слишком простым, что я должен что-то упустить. Кто-нибудь видит какие-либо реальные проблемы с этим?
Благодарю.
Редактировать Я просто хотел немного прояснить ситуацию: мое приложение не может использовать существующий веб-сервис, так как он настроен. Я думал создать веб-сервис, который будет общаться с этим. Новый веб-сервис просто расшифрует входящие данные и вызовет метод существующего веб-сервиса. Как только ответ получен, новый веб-сервис зашифрует данные и отправит их обратно в приложение iphone. Извините, если мне неясно.
Обновить
Вот мыльный конверт (от Fiddler):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1">http://tempuri.org/IService/ValidateMe</a:Action>
<a:MessageID>urn:uuid:81d70393-5356-4e3a-b209-49ea53068935</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">https://mibe.stpa.com/WCFService/IVService.svc/ValidationService</a:To>
<o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
<u:Timestamp u:Id="_0">
<u:Created>2013-02-10T04:48:18.646Z</u:Created>
<u:Expires>2013-02-10T04:53:18.646Z</u:Expires>
</u:Timestamp>
<c:SecurityContextToken xmlns:c="http://schemas.xmlsoap.org/ws/2005/02/sc" u:Id="uuid-0191ec20-905d-4ef0-a818-3eced0e02ecf-32">
<c:Identifier>urn:uuid:06bd1d3e-97e5-41bc-afce-3993736f202d</c:Identifier>
</c:SecurityContextToken>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/>
<Reference URI="#_0">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>/RpEprwYbnSypHXVF/rdxn3nkRo=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>ya8hHooO129dNOHplhY3xRndoDk=</SignatureValue>
<KeyInfo>
<o:SecurityTokenReference>
<o:Reference ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct" URI="#uuid-0191ec20-905d-4ef0-a818-3eced0e02ecf-32"/>
</o:SecurityTokenReference>
</KeyInfo>
</Signature>
</o:Security>
</s:Header>
<s:Body>
<ValidateMe xmlns="http://tempuri.org/">
<memberId>950470173</memberId>
</ValidateMe>
</s:Body>
</s:Envelope>