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的主要内容,如果未能解决你的问题,请参考以下文章