我正在开发一个将调用 Web 服务操作的 ios 应用程序。现有 Web 服务配置了 wsHttpBinding 安全设置为 TransportWithMessageCredential。
我已经使用 wsdl2objc 生成实现文件(来自 wsdl)并设置了一个小应用程序用于测试目的。不过,我无法让应用程序正确地与 Web 服务对话,而且从我所读到的内容来看,使用这些 Web 配置设置(wsHttpBinding、传输和消息安全)似乎几乎不可能。
我已经进行了大量研究,并在此站点(和其他站点)上找到的信息的帮助下,我设法找出了 SOAP 请求应该是什么样子。我基本上使用 WCF 测试客户端和 Fiddler 来监控流量。我也尝试了soapUI,它没有我希望的那么成功。
我确实在本地设置了一个测试 Web 服务并且我可以成功使用,但只有当 Web 配置使用 BasicHttpBinding 或 wsHttpBinding 安全模式 =“none”(我理解就像 basicHttpBinding 一样)具有安全性时。
我的解决方案(我希望)是……如果我编写一个 Web 服务来调用这个 Web 服务呢?两种 Web 服务都将驻留在服务器上,但 iphone 将使用的 Web 服务配置了 SSL。然后,想法是使用 ios 安全框架 (HMAC) 或其他散列算法手动加密操作(和必要的属性),并让 SSL Web 服务解密,然后从现有的 Web 服务调用请求的操作。这有意义吗?我在想这似乎太简单了,我一定错过了一些东西。有人看到这有什么真正的问题吗?
谢谢。
编辑我只是想稍微澄清一下我的情况:我的应用程序无法使用配置的现有 Web 服务。我的想法是创建一个可以与这个对话的网络服务。新的 Web 服务将简单地解密传入的数据并调用现有 Web 服务上的方法。收到响应后,新的 Web 服务将加密数据并将其发送回 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>