我如何使我的PHP SoapClient通过摘要进行认证

时间:2019-02-08 05:07:38

标签: php vb.net soap asmx digest

我目前在IIS上托管了一个vb.net ASMX Web服务以及一个通过SoapClient调用Web服务的PHP页面。

我需要根据ActiveDirectory对Web服务进行身份验证,并且我认为最简单的方法是在IIS上启用摘要身份验证,并允许用户在PHP页面中输入其AD用户名/密码,然后在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是MD5的“用户”:“领域”:“通过”:

$options = array(
        'authentication' => SOAP_AUTHENTICATION_DIGEST,
        'login' => $_SESSION['auth']
    );
try { $client = new SoapClient(SERVICE_URL, $options); }

1 个答案:

答案 0 :(得分:0)

您可以使用SoapHeader()类/对象(SoapHeader() documentation)和soap对象运算符__setSoapHeaders()__setSoapHeaders() documentation)将标题添加到soap客户端。

您的请求将如下所示:

<?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
    }

?>