我正在重新配置现有的SOAP Web服务,使其在具有Web应用程序防火墙的Azure应用程序网关后面运行。
SOAP Web服务是用C#编写的,并作为Azure云服务中的Web角色在Azure中运行。目前,它同时支持SOAP 1.1和SOAP 1.2。
我已将启用Web应用程序防火墙的Azure应用程序网关配置为在此服务之前运行。 WAF正在使用OWASP 3.0规则集。
从SoapUI发送测试请求,看来应用程序网关WAF允许通过SOAP 1.1请求,但阻止了SOAP 1.2请求(返回403错误)。在文档或其他任何内容中,我找不到任何引用说明为什么会发生这种情况。我知道这是WAF,因为禁用它会允许SOAP 1.2请求通过。
(正在工作的)SOAP 1.1请求的HTTP标头如下所示(已删除服务和名称空间URL):
POST http://{serviceURL}/{service}.asmx HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://{namespaceURL}/{method}"
Content-Length: 3672
Host: {serviceURL}
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
(无效的)SOAP 1.2请求的HTTP标头如下所示:
POST http:/{serviceURL}/{service}.asmx HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="http://{namespaceURL}/{method}"
Content-Length: 3652
Host: {serviceURL}
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
查看WAF日志,我 认为问题在于对Content-Type的更改,基于我对SOAP 1.2的理解(不是很深入),这是正确的。
任何想法都值得赞赏。似乎SOAP的使用范围仍然足够广,Azure Appliction Gateway / WAF应该支持它。