如何使用 curl 发送摘要式身份验证请求?

如何使用 curl 发送摘要式身份验证请求?

在搜索指南时我在维基百科上找到了这个例子

GET /dir/index.html HTTP/1.0
Host: localhost
Authorization: Digest username="Mufasa", realm="[email protected]", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/dir/index.html",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"

(如果有一个工具/网站可以将这种形式的原始请求转换为 curl 命令就太好了)

当我尝试向站点发送正常获取请求时,这就是领域和随机数。

 WWW-Authenticate: Digest realm="device1",nonce="3c5d8f92f03d9f1afd5dd55a7b172ee8", qop="auth", algorithm="MD5"

但响应来自网络捕获的屏幕截图

在网上再次搜索了一下后,我发现命令应该是这样的 

curl "url" --digest -u {username}:{pass} -vv -d @4.xml -H "Content-Type: text/xml;charset=utf-8" 

但我不知道该把 nonce 或 realm 或 qop 或 algorithm="MD5" 放在哪里

而 .xml 文件包含帖子数据(在我的情况下,它是一个 soap 操作)

答案1

您不必在任何地方指定所有这些值。您唯一需要的是用户名/密码对。CURL 会为您计算客户端响应。这正是“支持摘要式身份验证”对任何客户端的意义所在。

用户回答阿列克谢 R.来自堆栈流

此外,对于另一个网站上的用户,命令应该是这样的

curl -v  'https://jigsaw.w3.org/HTTP/Digest/' --digest -u guest:guest --form data=blahblah

答案2

当使用摘要式身份验证时,您需要发送一个 HTTP“授权”标头,并且该标头是随机数等应该去的地方。

但是,Digest 使用质询/响应机制,要求在第二个 HTTP 请求中发送授权标头,而不是在原始 HTTP 请求中发送。

仅当原始 HTTP 请求收到 401 响应后,才能发送第二个 HTTP 请求。

你应该能够从中得到这个想法这个已关闭的 GitHub 问题其中进一步解释了 curl 的工作方式。

相关内容