为啥 cURL 不适用于 IIS7 上的 Windows 身份验证?

Posted

技术标签:

【中文标题】为啥 cURL 不适用于 IIS7 上的 Windows 身份验证?【英文标题】:Why doesn't cURL work with Windows Authentication on IIS7?为什么 cURL 不适用于 IIS7 上的 Windows 身份验证? 【发布时间】:2012-08-19 03:22:16 【问题描述】:

我正在尝试访问 Windows 身份验证背后的服务。我以为我可以像传递 HTTP 基本身份验证凭据一样传递凭据,但它不起作用。当我执行以下操作时,我得到一个 401 错误,我绝对确定密码是正确的。

curl --user username:password http://example.com

为什么这不起作用?

【问题讨论】:

【参考方案1】:

我和你有同样的问题,但是我通过调整iis服务器配置来进行身份验证,启用HTTP基本或摘要身份验证,完成后,你可以使用最简单的身份验证,对不起我的英语不好

【讨论】:

【参考方案2】:

我只想补充一点,授权可能包括多个重定向,并且第二个或后续请求可能需要 NTLM 身份验证,但第一个请求则不需要。在这种情况下,这里的答案将不起作用。

问题是,CURL 仅通过第一个请求发送凭据,而您可能需要它们用于第二个请求。要通过所有请求传递凭据,请使用 --location-trusted 选项。

来自 CURL 文档 (-L option):

使用身份验证时,curl 仅将其凭据发送到初始主机。如果重定向需要 curl 到不同的主机,它将无法拦截用户+密码。另请参阅 --location-trusted 了解如何更改此设置。

此重要说明帮助我在公司网站上进行授权。希望对其他人有所帮助。

【讨论】:

【参考方案3】:

您也可以将用户名和密码字段留空 (-u :),curl 将使用您当前环境中的凭据:

curl --ntlm -u : http://example.com

根据docs(在-u, --user下)

如果您使用启用了 Windows SSPI 的 curl 二进制文件并执行 Kerberos V5, 协商、NTLM 或 Digest 身份验证,然后您可以告诉 curl 通过指定从您的环境中选择用户名和密码 带有此选项的单个冒号:“-u :”。

Kerberos-Enabled Binaries

【讨论】:

【参考方案4】:

如果您使用的是 Windows 身份验证,则需要使用 NTLM:

curl --ntlm --user username:password http://example.com

【讨论】:

如果你不输入密码,命令行会提示你输入密码。 查看我的回答,了解如何使用当前登录的用户来处理您的请求 我看到一个奇怪的行为,当我将密码保存在命令行选项-u 中时,它不起作用,但是当我只保留用户名时,相同的密码有效,并输入密码时提示。知道为什么吗?

以上是关于为啥 cURL 不适用于 IIS7 上的 Windows 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

为啥点击事件不适用于 iOS 上的 li 元素?

为啥这个 CSS 不适用于 Android 上的 Chrome,但适用于其他任何地方?

为啥 shadowColor: '...' - 不适用于“react-native-drawer”组件的 Android 上的抽屉样式?

为啥异常不适用于 OSX 上的 gcc7 和 -static-libgcc?

在 IIS7 URL 重写模块中,我可以在重定向规则中指定不适用于 http-post 请求吗?

cURL 不适用于标签