[英]SOAP and NTLM Authentication between Debian an IIS Server
我在PHP中的SOAP验证有问题。 我到处都检查有没有成功的答案。
我希望有人能够在这里为我提供帮助!
所以这里是交易。
我的PHP应用程序服务器是带有Apache2的Debian 6,并且Web服务基于IIS服务器。
两台服务器都在我们公司的网络内。
对于连接和身份验证,我在网上使用了一个类:
http://tcsoftware.net/blog/2011/08/php-soapclient-authentication/
这是我使用此类的代码:
<?php
define('CURLOPT_CERTINFO',1);
ini_set("max_execution_time",120);
ini_set('default_socket_timeout', 120);
ini_set("soap.wsdl_cache_enabled", "0");
ini_set('soap.wsdl_cache_ttl',0);
include('./SoapClientAuth.php');
//WSDL
$soapURL = "http://myApplicationAdress/ws/WEB100T/patient_identite_chargerparid.wsdl";
$soapParameters = Array(
'login' => 'anADLogin',
'password' => 'theADPassword',
'exceptions' => 1,
'trace' => 1,
'user_agent' => '',
'keep_alive' => 1
) ;
$soapClient = new SoapClientAuth($soapURL, $soapParameters);
try{
$soapResult = $soapClient->PatientIdentiteChargerParID(array('PatID' =>'152'));
}
catch(SoapFault $fault)
{
var_dump($fault);
}
注意:“ define('CURLOPT_CERTINFO',1);” 添加是因为此常量未在我们的php版本中定义。 如果我没有定义它,我们将出现一个错误:
[03-Sep-2013 15:10:50 UTC] PHP Notice: Use of undefined constant CURLOPT_CERTINFO - assumed 'CURLOPT_CERTINFO' in /var/www/vm-test/SoapClientAuth.php on line 97
[03-Sep-2013 15:10:50 UTC] PHP Warning: curl_setopt() expects parameter 2 to be long, string given in /var/www/vm-test/SoapClientAuth.php on line 97
从客户端到debian服务器的连接结果是401错误,请参见以下内容:
* About to connect() to web100t-qualif port 80 (#0)
* Trying 172.16.101.93... * connected
* Connected to web100t-qualif (172.16.101.93) port 80 (#0)
> POST /mwsiissrv.dll/mws/ws/_mws_soap HTTP/1.1
Host: web100t-qualif
Accept: */*
User-Agent: PHP-SOAP
Content-Type: text/xml; charset=utf-8
SOAPAction: "/patient/identite/chargerparid"
Content-Length: 309
Expect: 100-continue
Connection: Keep-Alive
< HTTP/1.1 401 Unauthorized
< Content-Type: text/html
< Server: Microsoft-IIS/7.5
< WWW-Authenticate: NTLM
第二次,如果我在SoapClientAuth.php中注释了使用常数CURLOPT_CERTINFO的行号97:
curl_setopt($ch, CURLOPT_CERTINFO, TRUE);
然后响应更改如下:
< HTTP/1.1 401 Unauthorized
< Content-Type: text/html
< Server: Microsoft-IIS/7.5
< WWW-Authenticate: NTLM
* gss_init_sec_context() failed: : Credentials cache file '/tmp/krb5cc_33' not found< WWW-Authenticate: Negotiate
< Date: Tue, 03 Sep 2013 12:37:00 GMT
< Content-Length: 1384
<
* Connection #0 to host web100t-qualif left intact
* Closing connection #0
* About to connect() to web100t-qualif port 80 (#0)
* Trying 172.16.101.93... * connected
* Connected to web100t-qualif (172.16.101.93) port 80 (#0)
> POST /mwsiissrv.dll/mws/ws/_mws_soap HTTP/1.1
我不知道为什么在这里提到了kerberos ...但是可能是一个线索。
最后但并非最不重要的,
此代码在我的本地计算机上运行,这是Windows操作系统。 此外,CURLOPT_CERTINFO接缝要配置,因为我不需要在Windows环境中重新定义它。
好吧,这就是我目前所知道的。 我不知道问题出在哪里。 这肯定是由于Debian与IIS之间的身份验证问题引起的,但是...我不了解更多。
如果您需要任何其他信息,请不要犹豫。 谢谢您的帮助。
有关信息,我们最终找到了解决该问题的解决方法。
问题是由于IIS服务器需要一个AD登录名/密码才能使我们的PHP应用程序连接到Web服务。
我们所做的是使用另一个URL来访问Web服务,该URL需要一个“匿名”帐户。 这意味着该帐户是由应用程序本身而不是AD定义的。
因此,我们不需要使用NTLM身份验证来解决问题。
对于那些仍然需要进行身份验证的人,此链接对我有很大帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.