http://www.whitemesa.com/soapauth.htmlで概説されているように、基本認証クレデンシャルを受け入れるPHPSOAPサービスを作成しました。これは、インスタンス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に整形式の応答を送信させることができませんでした。
前もって感謝します。