使用带有 NTLM 身份验证的 curl 发布帖子失败
Posted
技术标签:
【中文标题】使用带有 NTLM 身份验证的 curl 发布帖子失败【英文标题】:Using curl with NTLM auth to make a post is failing 【发布时间】:2013-03-19 19:05:09 【问题描述】:我似乎无法理解这一点。我正在尝试编写脚本自动上传 csv,但 curl 失败并出现 401。
curl -v --ntlm -u username --upload-file ~/galaxy/forums/pt_update.csv https://connect.example.com/11063/csv_import?op=add -k
Enter host password for user 'username:
* About to connect() to connect.example.com port 443 (#0)
* Trying x.x.x.x... connected
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using RC4-MD5
* Server certificate:
* subject: C=US; ST=Washington; L=internetland; O=example.com Inc.; CN=connect.example.com
* start date: 2012-06-11 14:53:47 GMT
* expire date: 2013-06-11 14:53:47 GMT
* common name: connect.example.com (matched)
* issuer: DC=com; DC=example; DC=ant; CN=example.com Infosec CA G2
* SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* Server auth using NTLM with user 'username'
> PUT /11063/csv_import?op=add HTTP/1.1
> Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: connect.example.com
> Accept: */*
> Content-Length: 0
> Expect: 100-continue
>
< HTTP/1.1 401 Authorization Required
< Date: Fri, 29 Mar 2013 03:47:00 GMT
< Server: Server
< WWW-Authenticate: Basic realm="ANT (Windows) Login"
< Content-Length: 401
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
我替换了我的实际域所在的示例,并且我最肯定地为我的域使用了正确的用户名/密码。
【问题讨论】:
【参考方案1】:以下作品
curl -X POST -k -v --ntlm --negotiate -u usernamehere -F "csv=@pt_update.csv" -F "op=add" "@987654321@"
【讨论】:
您应该考虑解释为什么它有效。处于类似情况的人将不知道哪里出了问题。【参考方案2】:你试试这个
如果您有一个托管在 IIS 中的页面并且可以使用 NTLM,那么您应该输入:
(例如在 Sharepoint 页面)
curl http://enterprisesharepoint -v --ntlm --negotiate -u USER123:PASSWORD123
这对我来说很好,你可以看到标题消息
--编辑--
如果你放negotiate,这会给出本地帐户并使用服务器登录,如果用户名和密码不正确,那没关系,因为negotiation会自动为本地登录的用户使用windows帐户进行身份验证。如果您不喜欢这种行为,您应该只输入 ntlm 以进行正确的 ntlm 登录。
【讨论】:
删除“--negotiate”使它对我有用。 (到 ADFS 集成 Windows 登录端点,对 Windows 域进行身份验证) 您可以删除 :PASSWORD123 这样您就不必以纯文本形式输入它。如果删除,系统会提示您输入相同内容。 通常是,但请确保使用 https,因为在这两种情况下,“挑战”都将以纯文本形式发送 按原样工作,没有任何问题。谢谢丹尼尔。以上是关于使用带有 NTLM 身份验证的 curl 发布帖子失败的主要内容,如果未能解决你的问题,请参考以下文章
.NET HttpClient 在使用 NTLM 协商时不会在对 IIS 的请求之间保持身份验证
有没有一种正确的方法可以在 symfony 中使用 SwiftMailer 包将 NTLM 身份验证类型添加到 SwiftMailer 中?