我目前在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); }
答案 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
}
?>