【发布时间】:2017-08-02 06:59:58
【问题描述】:
如何在 Windows 上使用来自 python 的自动 NTLM 身份验证?
我希望能够从 Windows 访问 TFS REST API,而无需对我的密码进行硬编码,就像我从 Web 浏览器(例如,firefox 的 network.automatic-ntlm-auth.trusted-uris)所做的一样。
【问题讨论】:
如何在 Windows 上使用来自 python 的自动 NTLM 身份验证?
我希望能够从 Windows 访问 TFS REST API,而无需对我的密码进行硬编码,就像我从 Web 浏览器(例如,firefox 的 network.automatic-ntlm-auth.trusted-uris)所做的一样。
【问题讨论】:
我发现 this answer 非常适合我,因为:
它使用 WinHTTP.WinHTTPRequest.5.1 COM 对象来本地处理身份验证:
import win32com.client
URL = 'http://bigcorp/tfs/page.aspx'
COM_OBJ = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1')
COM_OBJ.SetAutoLogonPolicy(0)
COM_OBJ.Open('GET', URL, False)
COM_OBJ.Send()
print(COM_OBJ.ResponseText)
【讨论】:
您可以使用https://github.com/requests/requests-kerberos 做到这一点。在引擎盖下它使用https://github.com/mongodb-labs/winkerberos。后者被标记为 Beta,我不确定它有多稳定。但是我有一段时间使用 requests-kerberos 没有任何问题。
也许更稳定的解决方案是https://github.com/brandond/requests-negotiate-sspi,它使用pywin32的SSPI实现。
【讨论】:
NTLM 凭据基于交互式登录过程中获得的数据,并包含密码的单向哈希。您必须提供凭证。
Python 具有允许 HTTP NTLM 身份验证的 requests_ntlm 库。
您可以参考这篇文章来访问 TFS REST API: Python Script to Access Team Foundation Server (TFS) Rest API
如果您使用的是 TFS 2017 或 VSTS,您可以尝试在基本身份验证 HTTP 标头中使用 Personal Access Token 以及您的 REST 请求。
【讨论】: