1

我尝试从 Microsoft Dynamics Nav WebService 获取一些数据。此服务使用 NTML 身份验证。

如果我在浏览器中打开 web 服务 url 并使用给定的凭据,一切正常。

为了设置 WebService 客户端的环境,我使用命令行检查一切是否正常,在特定点上,我无法进行身份验证。

这就是我正在使用的命令:

curl --ntlm -u "DOMAIN\USERNAME" -k -v "http://hostname:port/instance/Odata/Company('CompanyName')/Customer"

该命令将提示输入密码。我复制密码,一切正常。

但是当我使用这个命令时,已经包含密码,它停止工作并且身份验证失败:

curl --ntlm -u "DOMAIN\USERNAME:PASSWORD" -k -v "http://hostname:port/instance/Odata/Company('CompanyName')/Customer"

密码包含一些特殊字符,所以我尝试使用百分比编码,但完全没有效果。

研究这类问题非常困难。搜索 curl + ntlm 身份验证问题会提供很多结果,但与此类特定问题无关。

有没有人已经有过这种问题的经验?

4

3 回答 3

2

由于 cookie,我遇到了身份验证问题。我解决了这个在 txt 文件中包含 cookie 的问题,并在所有请求中都使用了这个文件。例如,在登录请求后,我保存了这个 cookie:

curl -X POST -u username:password https://mysite/login -c cookies.txt 

在下一个请求中,我使用了这个文件,如下所示:

curl -X POST -u username:password https://mysite/link -b cookies.txt

这个解决方案对我有用,我不知道你的问题是否相似,但是,我想,你可以试试这个。

于 2016-08-26T10:05:30.583 回答
1

我在类似的问题上苦苦挣扎了很长时间,最后我发现了这个 curl 错误报告#1253 NTLM authentication failed when password contains special characters (british pound symbol £)

cURL 中的 NTLM 身份验证仅支持密码中的 ASCII 字符!在 Ubuntu 上的 7.50.1 版本中仍然是这种情况,但我在许多不同的发行版上对此进行了测试,并且始终相同。这个错误也会破坏 PHP 中的 curl_init()(在 PHP7 上测试)。解决这个问题的唯一方法是避免在 NTLM 身份验证密码中使用非 ASCII 字符。

如果您使用的是 Python,那么您很幸运。显然,Python 开发人员重写了 cURL 实现,如果您使用 HttpNtlmAuth 包,它可以使用非 ASCII 字符。

于 2017-03-20T11:31:34.317 回答
0

尝试使用 nltm 标志。

像这样的东西:

curl -v --proxy-nltm -u 'username:password' youproxy.com:8080 someURL


from > curl --help

 -x, --proxy [PROTOCOL://]HOST[:PORT] Use proxy on given port
     --proxy-anyauth Pick "any" proxy authentication method (H)
     --proxy-basic   Use Basic authentication on the proxy (H)
     --proxy-digest  Use Digest authentication on the proxy (H)
     --proxy-negotiate Use Negotiate authentication on the proxy (H)
     --proxy-ntlm    Use NTLM authentication on the proxy (H)
于 2020-09-25T04:27:28.367 回答