gpt4 book ai didi

c++ - 如何获得正确的摘要认证

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:43 30 4
gpt4 key购买 nike

我尝试编写一个 C++ 应用程序,但我必须执行 HTTP 摘要式身份验证。问题主要不在于 C++,而在于未建立连接这一事实。我尝试访问的网站如下:httpbin.org/digest-auth/auth/user/passwd。

考虑以下服务器对简单 GET/digest-auth/auth/user/passwd 的响应:

HTTP/1.1 401 未经授权
访问控制允许凭据:true
访问控制允许来源:*
内容类型:文本/html;字符集=utf-8
日期:2014 年 9 月 8 日星期一 15:10:09 GMT
服务器:gunicorn/18.0
设置 Cookie:fake=fake_value
Www-Authenticate: Digest realm="me@kennethreitz.com", nonce="2a932bfb1f9a748a7b5ee590d0cf99e0", qop=auth, opaque="2d09668631b42bff8375523e7b27e45e"
内容长度:0
连接:保持事件状态

A1 然后被计算为 user:me@kennethreitz.com:passwd 并散列为 4de666b60f91e2444f549243bed5fa4b 我将称之为HA1。A2 计算为 GET:/digest-auth/auth/user/passwd 并散列为 b44272ea65ee4af7fb26c5dba58f6863,我将其称为 HA2。

根据此信息,响应计算为 HA1:nonce:1:ac3yyj:auth:HA2,其中 HA1HA2 是我们刚刚计算的值和随机数取自上面的服务器响应,总计为:4de666b60f91e2444f549243bed5fa4b:2a932bfb1f9a748a7b5ee590d0cf99e0:1:ac3yyj:auth:b44272ea65ee4af7fb26c5dba58f.6863.其哈希值是 55f292e183ead0810528bb2a13b98e00

结合所有这些信息应该足以使用摘要身份验证建立 http 连接。但是,以下请求被服务器拒绝并用另一个 HTTP/1.1 401 进行应答。

GET/digest-auth/auth/user/passwd HTTP/1.1
主机:httpbin.org
授权:Digest username="user", realm="me@kennethreitz.com",nonce="2a932bfb1f9a748a7b5ee590d0cf99e0",uri="/digest-auth/auth/user/passwd",qop=auth,nc=1,cnonce= "ac3yyj",response="55f292e183ead0810528bb2a13b98e00",opaque="2d09668631b42bff8375523e7b27e45e"

请注意,格式不显示请求的结构。从 Authorization 到 opaque 的 block 实际上是一行。

请随意重新进行 md5 计算 - 但我手动重新进行了计算并获得了与我的程序相同的哈希值。我使用该工具 ( http://md5-hash-online.waraxe.us/ ) 进行手动计算。

我是否遗漏了一些明显的东西,可能在某种程度上误解了标准?为什么我无法获得授权?

最佳答案

终于明白了。身份验证本身是完全正确的。

服务器要求设置一个 cookie。显然,还必须在响应中显示该 cookie。这解释了为什么 firefox(作为浏览器)可以正确验证,而 curl 和 lwp-request 不能遵守标准——RFC 对 cookie 只字未提。为什么我们有没有人关心的标准?

无论如何,将 Cookie: fake=fake_value 附加到 header 即可解决问题。

关于c++ - 如何获得正确的摘要认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733760/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com