В настоящее время у меня есть веб-сервис vb.net ASMX, размещенный на IIS, и страница PHP, которая вызывает веб-сервис через SoapClient.
Мне нужно аутентифицировать веб-сервис на ActiveDirectory, и я решил, что самый простой способ сделать это — включить дайджест-аутентификацию на IIS и позволить пользователю ввести свое имя пользователя / пароль AD на странице PHP и отправить эту аутентификацию в SoapHeaders.
Я не совсем уверен, как это сделать, особенно когда пытаюсь связаться с WSDL (который также стоит за дайджест-аутентификацией).
Любая помощь будет оценена.
Спасибо
РЕДАКТИРОВАТЬ: Что я пробовал:
SERVICE_URL указывает на HTTP: //mypage/service.asmx WSDL
Попытка 1: пользователь и передать как MD5
$options = array(
'authentication' => SOAP_AUTHENTICATION_DIGEST,
'realm' => 'myrealm',
'login' => $_SESSION['authUser'],
'password' => $_SESSION['authPass']
);
try { $client = new SoapClient(SERVICE_URL, $options); }
Попытка 2: Auth — это «user»: «realm»: «pass» как MD5:
$options = array(
'authentication' => SOAP_AUTHENTICATION_DIGEST,
'login' => $_SESSION['auth']
);
try { $client = new SoapClient(SERVICE_URL, $options); }
Вы можете добавить заголовки в ваш мыльный клиент, используя SoapHeader()
класс / объект (Документация SoapHeader ()) и оператор мыльного объекта __setSoapHeaders()
(__setSoapHeaders () документация).
Ваш запрос будет выглядеть примерно так:
<?php
$options = array(
'authentication' => SOAP_AUTHENTICATION_DIGEST,
'realm' => 'myrealm',
'login' => $_SESSION['authUser'],
'password' => $_SESSION['authPass']
);
try {
$client = new SoapClient(SERVICE_URL, $options);
// create and populate header array
$headers = array();
$headers[] = new SoapHeader('MYNAMESPACE',
'authentication',
'SOAP_AUTHENTICATION_DIGEST');
$headers[] = new SoapHeader('MYNAMESPACE',
'realm',
'myrealm');
$client->__setSoapHeaders($headers); // set headers
$client->__soapCall("echoVoid", null); // make soap call
}
?>
Других решений пока нет …