Python 请求 - HTTPDigest:在摘要授权中将哈希算法设置为 SHA-512

Posted

技术标签:

【中文标题】Python 请求 - HTTPDigest:在摘要授权中将哈希算法设置为 SHA-512【英文标题】:Python requests - HTTPDigest: Setting the hash algorithm to SHA-512 in Digest authorization 【发布时间】:2020-04-04 11:38:06 【问题描述】:

我正在尝试编写一个小的 Python 函数来连接到一个使用带有 SHA-512 算法的 HTTP Digest 授权的站点。 我试图实现这一点的代码是:

headers = 
     'Content-Type': 'application/json',
     'Encoding': 'utf-8',


s = requests.Session()
s.headers.update(headers)
s.auth = HTTPDigestAuth(self.username, self.passw)

r = requests.Request(
     url=self.api_url,
     method='POST',
     json=data
)

prepped = s.prepare_request(r)
r = s.send(prepped)

问题是我收到了 401 作为响应。我能够验证用户名/密码/地址参数并且它们是正确的,如果我“破解”授权标头以包含 SHA-512 编码 值,然后我收到 502 错误(这有点正确,因为消息的其余部分将不正确)

如果我没看错,HTTPDigestAuth 使用的基本哈希算法是 MD5。我找不到将其更改为 SHA-512 的方法,即使它在技术上也受支持。谁能帮我解决这个问题?快把我逼疯了。

【问题讨论】:

think 请求期望从服务器发送的www-authenticate 标头中获取算法,因此该过程对于客户端来说是不透明的。但我不是专家...... 同时我也得出了同样的结论。显然服务器不符合 RFC2617(奇怪,因为它是一个普通的 ASP.NET Web 服务),所以在这种情况下请求无法帮助我。据我所见,我有两个选项可以让它工作: - 使用 pyCurl 让一切手动工作(很多工作,但应该工作) - 手动计算哈希并在与服务器通信时使用它跨度> 【参考方案1】:

事实证明,尽管文档服务器正在使用 Digest 身份验证,但他们无法实现这一点,并且只需要在 POST 数据中传递用户名和密码字段。 502 错误是由于 auth 服务器在尝试解析 Authorization 标头时崩溃导致的,因为该处理程序未实现。

在某种程度上,案件已经结案。

【讨论】:

以上是关于Python 请求 - HTTPDigest:在摘要授权中将哈希算法设置为 SHA-512的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何支持 HTTP Digest 的 Ruby 库?

API安全设计

寻找一种从传入的 http 请求中获取 HTTP Digest Authentication 标头的方法

使用 jQuery 可以进行摘要身份验证吗?

烧瓶上的 HTTP 摘要身份验证对我不起作用

批量检测GoAhead系列服务器中Digest认证方式的服务器弱口令