Как требовать заголовок мыла аутентификации в WSDL? - PullRequest
6 голосов
/ 18 ноября 2011

Я создал веб-сервис в php, используя SOAPServer. Он ожидает увидеть SoapHeader UsernameToken с элементами имени пользователя и пароля. На самом деле все работает нормально, когда я включаю этот заголовок в запрос. Просто путем определения метода в классе обработчика Soap с именем «UsernameToken» вызывается этот метод и ему передается объект stdClass Obj. Затем я могу проверить пользователя по $Obj->username и $Obj->password.

Что я не знаю, так это что добавить в файл WSDL, чтобы сначала определить этот заголовок UsernameToken, а во-вторых, как указать в WSDL, что это требуется?

Я где-то читал, что новый стандарт SOAP не поддерживает понятие «требуемый» заголовок.

Любой совет, как хотя бы указать, является ли мой wsdl этот запрос должен включать этот заголовок?

Ответы [ 3 ]

3 голосов
/ 10 декабря 2011

Вот пример 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 голос
/ 16 декабря 2011

Длинный ответ. См. этот пост.

В клиенте вы можете использовать атрибут mustUnderstand, чтобы указать, является ли запись заголовка обязательной или необязательной для обработки получателем. Если сервер не может или не хочет обрабатывать обязательный заголовок, он должен выдать сбой SOAP клиенту.

1 голос
/ 12 декабря 2011

Вы смотрели на раздел 2.1.3 из http://www.w3.org/TR/wsdl. Я также не смог найти что-либо из требуемого, становящегося изгнанным.

...