使用Navision用户(启用SSL)身份验证通过PHP访问Web服务


Access Web Service through PHP using Navision User (SSL Enabled) Authenthication

我需要访问使用Navision User+SSL的Navision Web服务。我使用的连接器是基于PHP的。

我能够连接到简单的http访问并使用Window的User。这是帮助我实现Freddy编写的Navision Web Service PHP的教程。

我仍在使用它,但在curl/request中添加证书时,我玩了一把。研究并阅读了很多文章,但我仍然无法实现。

我现在可以使用上面共享的基本php连接器(链接)访问它,但当检索数据时,我收到了以下详细信息:

成功设置证书验证位置:
*CA文件:/Path/Navision.pem
*使用TLSv1.0/AES256-SHA的SSL连接
*服务器证书:

*SSL证书验证结果:无法获取本地颁发者证书(20),仍在继续
*使用NTLM对用户"user"进行服务器身份验证
POST Navision页面URL名称HTTP/1.1
授权:NTLM TlRMTVNTUAAABAAAABoIAAAAAAAAAAAAAAAAAAAA=

方法:POST
连接:保持活动
用户代理:PHP-SOAP-CURL
内容类型:text/xml;charset=utf-8
SOAPAction:"urn:microsoft dynamics schemas/page/pda_item_list:ReadMultiple"

<HTTP/1.1 401未经授权

我使用makecert.exe使用了证书。我有这些文件2.cer、一个pvk和一个.crl。我们使用了其中一个.cer文件,该文件使用指纹将其应用于navision服务实例。php curl连接器使用哪个文件是正确的。

这是我的请求php代码:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, USERPWD);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/Navision.pem');

如果我能够使用PHP连接器使用Navision的web服务,并使用Navision用户和SSL访问它,那么任何相关的链接都将不胜感激。

更新

我现在可以使用有效的证书,并能够正确通过。尽管如此,它现在仍然不起作用,并返回上面相同的错误。。未经授权401。

很可能是因为我的Navision设置,或者我只是以错误的方式传递凭据?我仍在研究和比赛,所以目前我仍然无法提取数据。

您有两个选项:

  • 具有使用用户名身份验证的第二服务层。这将使PHP能够使用Basic Auth。在这种情况下,你需要一个证书

  • 第二种选择是使用相同的服务层,但生成一个Web服务密钥,供PHP使用。您可以使用相同的用户名使用基本身份验证,但使用Web服务密钥作为密码

PHP不喜欢NTLM身份验证。。。

干杯