我编写了一个接受基本身份验证凭据的 PHP SOAP 服务,如http://www.whitemesa.com/soapauth.html中所述。我通过在实例BasicAuth
的处理程序类中定义一个方法来做到这一点。SOAPServer
这一切都很好。
但是,当身份验证由于某种原因失败(用户名不正确,BasicAuth
请求中没有标头)时,我想BasicChallenge
在我的响应中包含一个标头,如下所示:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<h:BasicChallenge xmlns:h="http://soap-authentication.org/basic/2001/10/"
SOAP-ENV:mustUnderstand="1">
<Realm>Realm</Realm>
</h:BasicChallenge>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Authentication failed</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
以下代码不起作用(标头未添加到响应中)。
$soapServer->addSoapHeader(new SoapHeader("http://soap-authentication.org/basic/2001/10/", "BasicChallenge", array("Realm" => "Realm"), true));
throw new SoapFault("Client", "Authentication Failed");
调用$soapServer->fault()
而不是throw new SoapFault
没有任何区别。
我尝试自己构建 Fault 对象,并将其作为常规响应返回,但我无法让 PHP 发送格式正确的响应。
提前致谢。