如何在WSDL中要求身份验证肥皂头?

时间:2011-11-18 15:49:50

标签: php soap wsdl

我使用SOAPServer在php中创建了一个Web服务。它希望看到SoapHeader UsernameToken包含用户名和密码元素。当我在请求中包含此标头时,一切都工作正常。只需在名为“UsernameToken”的Soap处理程序类中定义一个方法,就会调用此方法并将stdClass Obj传递给它。然后,我可以$Obj->username$Obj->password验证用户。

我不知道要添加到WSDL文件中的内容首先要定义此UsernameToken标头,然后如何在WSDL中指示它是必需的?

我在某处读到过新的SOAP标准不赞成“必需”标题的概念。

关于如何至少表明我的wsdl请求的任何建议都应包含此标题?

3 个答案:

答案 0 :(得分:3)

以下是指定登录名的WSDL示例:https://ws1.webservices.nl/soap_doclit?wsdl

<binding name="Webservices.nlBinding" type="tns:Webservices.nlPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="login">
<soap:operation soapAction="https://ws1.webservices.nl/soap_doclit.php/login" style="document"/>
<input>
<soap:body use="literal"/>
<soap:header message="tns:Headers" part="HeaderLogin" use="literal"/>
<soap:header message="tns:Headers" part="HeaderAuthenticate" use="literal"/>
</input>

答案 1 :(得分:1)

您是否看过section 2.1.3http://www.w3.org/TR/wsdl。我也找不到任何需要被剥夺的东西。

答案 2 :(得分:1)

答案很长。请参阅this帖子。

在客户端中,您可以使用mustUnderstand属性来指示标头条目是必需的还是可选的,以供收件人处理。如果服务器不能或不想处理强制标头,则必须向客户端抛出SOAP Fault。