使用 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
我尝试过的事情:
- 使用
--negotiate
参数和 --ntlm
- 使用
--anyauth
- 使用我的域名
-u MYDOMAIN\kevans
- 使用
-u MYDOMAIN\kevans:password
和 -u kevans:password
我将 Curl 从 7.33 更新到 7.40,现在它工作正常。我使用的是 EXACT SAME COMMAND,它可以正常工作。域是完全可选的,似乎不会影响它。
我遇到了同样的问题,但最终得到了不同的解决方案。我只是把我的放在这里,以防有人对此仍有疑问。
- 打开 Microsoft Dynamics Nav Server MMC 工具
- Select 有问题的 NAV 实例
- 点击右下角的编辑按钮编辑实例
- Check/Enable "Use NTLM Authentication"
的复选框
- 保存所做的更改
- 重启 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/"
我正在尝试使用 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
我尝试过的事情:
- 使用
--negotiate
参数和--ntlm
- 使用
--anyauth
- 使用我的域名
-u MYDOMAIN\kevans
- 使用
-u MYDOMAIN\kevans:password
和-u kevans:password
我将 Curl 从 7.33 更新到 7.40,现在它工作正常。我使用的是 EXACT SAME COMMAND,它可以正常工作。域是完全可选的,似乎不会影响它。
我遇到了同样的问题,但最终得到了不同的解决方案。我只是把我的放在这里,以防有人对此仍有疑问。
- 打开 Microsoft Dynamics Nav Server MMC 工具
- Select 有问题的 NAV 实例
- 点击右下角的编辑按钮编辑实例
- Check/Enable "Use NTLM Authentication" 的复选框
- 保存所做的更改
- 重启 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/"