Как я могу получить мой PHP SoapClient для аутентификации с помощью дайджеста - PullRequest
0 голосов
/ 08 февраля 2019

У меня в настоящее время есть веб-сервис 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); }

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете добавить заголовки к вашему SOAP-клиенту, используя 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
    }

?>
...