我的目标是通过带有 SSPI 的 NTLM 对使用 Python 3.5.2 中的请求库 (2.11.1) 的客户端进行身份验证,以便用户不必手动输入其域凭据(用于登录 PC) .
我发现了以下可能性,但没有一个对我有用:
HttpNtlmSspiAuth引发请求异常:
导入请求 从 requests_ntlm 导入 HttpNtlmAuth、HttpNtlmSspiAuth
requests.get(site_url, auth=HttpNtlmSspiAuth())
requests-sspi-ntlm总是得到 401:
导入请求 从 requests_sspi_ntlm 导入 HttpNtlmAuth
session = requests.Session() session.auth = HttpNtlmAuth() session.get("http://ntlm_protected_site.com ")
和requests-negotiate-sspi也会在请求中触发异常:
导入请求 从 requests_negotiate_sspi 导入 HttpNegotiateAuth
r = requests.get(' https://iis.contoso.com ', auth=HttpNegotiateAuth())
我做错了什么吗?
最佳答案
包裹requests-negotiate-sspi对我有用。
我可能对 PO 也有同样的问题,但我懒得尝试 PO 的解决方案并将 PO 的代码集成到我的解决方案中。谷歌帮助了我。如果有人遇到 sspi.py ValueError:year 30828 is out of range
引发的相同异常,这是 requests-negotiate-sspi 的 python 3.6 的一个已知问题。参见这里:Github-Issue
我通过使用 python 3.4 创建一个新的 conda 环境解决了这个问题。然后重新安装一些依赖项以及 requests-negotiate-sspi
,繁荣,一切正常。
关于python - 如何使用Python请求进行NTLM SSPI身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40407946/