【问题标题】:Access Web Service through PHP using Navision User (SSL Enabled) Authenthication使用 Navision 用户(启用 SSL)身份验证通过 PHP 访问 Web 服务
【发布时间】:2016-09-01 05:20:20
【问题描述】:

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

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

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

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

...成功设置证书验证位置:
* CAfile:/Path/Navision.pem
* SSL 连接使用 TLSv1.0 / AES256-SHA
* 服务器证书:
...
* SSL 证书验证结果:无法获取本地颁发者证书 (20),仍然继续。
* 服务器身份验证使用 NTLM 和用户“用户”
POST Navision 页面 URL 名称 HTTP/1.1
授权:NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAAA=
...
方法:POST
连接:保持活动
用户代理:PHP-SOAP-CURL
内容类型:文本/xml;字符集=utf-8
SOAPAction:“urn:microsoft-dynamics-schemas/page/pda_item_list:ReadMultiple”
...

我通过 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');

如果我能够通过使用 Navision 用户和 SSL 访问它,使用 PHP 连接器使用 Navision 的 Web 服务,任何相关的链接都将非常感激。

更新

我现在可以使用有效的证书并且可以正常通过了。 它现在仍然不起作用并返回与上面相同的错误.. Unauthorized 401.

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

【问题讨论】:

  • 您使用的是哪个版本的 NAV?
  • 您好 Azatoth,我们使用的是 NAV 2016,抱歉回复晚了。

标签: php web-services ssl curl navision


【解决方案1】:

你有两个选择:

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

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

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

干杯

【讨论】:

  • 我使用了第二个选项,因为我不是 Navision 技术人员。基本上,我使用了来自 Navision Client 的“用户”页面字段中的 Web 服务密钥。似乎它也无法访问该页面。我尝试激活 ssl 并禁用它。我还遵循了上面链接中 php 连接器的主要概念。我是否缺少任何步骤?
  • @KevinPatrickTan 运气好吗?无法连接到网络服务
猜你喜欢
  • 2013-09-15
  • 2021-05-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多