使用 Curl for Dynamics Nav 验证 OData

Authenticating OData using Curl for Dynamics Nav

我正在尝试使用 Curl 从 Microsoft Dynamics Nav.

中提取一些数据

我可以通过我的浏览器在这个 url: http://kevans:(password)@192.168.0.30:8048/Sandbox/OData/ 轻松访问它,它工作得很好。

在 Curl 中,我试过这个:curl --ntlm -u kevans "http://192.168.0.30:8048/Sandbox/OData/" -v,在提示符下输入我的密码,但是 returns 出现 401 未授权错误。

是否需要做些什么才能使其对 Curl 可用?

这是 Curl 的输出:

curl --ntlm -u kevans "http://192.168.0.30:8048/Sandbox/OData/" -v
Enter host password for user 'kevans':
* About to connect() to 192.168.0.30 port 8048 (#0)
*   Trying 192.168.0.30...
* Adding handle: conn: 0x525fe0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x525fe0) send_pipe: 1, recv_pipe: 0
* Connected to 192.168.0.30 (192.168.0.30) port 8048 (#0)
* Server auth using NTLM with user 'kevans'
> GET /Sandbox/OData/ HTTP/1.1
> Authorization: NTLM TlRMTVNTUAABAAAAt4II4gAAAAAAAAAAAAAAAAAAAAAGA4AlAAAADw==
> User-Agent: curl/7.33.0
> Host: 192.168.0.30:8048
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Content-Length: 0
* Server Microsoft-HTTPAPI/2.0 is not blacklisted
< Server: Microsoft-HTTPAPI/2.0
< WWW-Authenticate: Negotiate
< Date: Thu, 05 Feb 2015 20:25:26 GMT
<
* Connection #0 to host 192.168.0.30 left intact

我尝试过的事情:

我将 Curl 从 7.33 更新到 7.40,现在它工作正常。我使用的是 EXACT SAME COMMAND,它可以正常工作。域是完全可选的,似乎不会影响它。

我遇到了同样的问题,但最终得到了不同的解决方案。我只是把我的放在这里,以防有人对此仍有疑问。

  1. 打开 Microsoft Dynamics Nav Server MMC 工具
  2. Select 有问题的 NAV 实例
  3. 点击右下角的编辑按钮编辑实例
  4. Check/Enable "Use NTLM Authentication"
  5. 的复选框
  6. 保存所做的更改
  7. 重启 NAV 实例

进行这些更改后,CURL HTTP 响应 header "WWW-Authenticate: Negotiate" 现在应该是 "WWW-Authenticate: NTLM" 并且您的 curl 请求应该匹配以下内容:

curl -v --ntlm -u 'username:password' "http://YOUR_NAV_URL:8048/NAV_INSTANCE_NAME/OData/"