在Windows上使用python的自动NTLM

2024-04-29 05:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在Windows上使用python的自动NTLM身份验证?

我希望能够从windows访问TFS REST API,而不必硬编码我的密码,就像我从web浏览器(例如firefox的network.automatic-ntlm-auth.trusted-uris)访问TFS REST API一样。


Tags: 身份验证restapiweb密码编码windows浏览器
3条回答

NTLM凭据基于交互登录过程中获得的数据,并包含密码的单向哈希。你必须提供证件。

Python有允许HTTP NTLM身份验证的requests_ntlm库。

您可以参考本文来访问TFS REST API: Python Script to Access Team Foundation Server (TFS) Rest API

如果您使用的是TFS 2017或VSTS,那么可以尝试在基本的Auth HTTP头中使用Personal Access Token以及REST请求。

你可以用https://github.com/requests/requests-kerberos来完成。在引擎盖下它使用https://github.com/mongodb-labs/winkerberos。后者被标记为Beta,我不确定它有多稳定。但是我已经请求kerberos使用一段时间了,没有任何问题。

也许更稳定的解决方案是https://github.com/brandond/requests-negotiate-sspi,它使用pywin32的SSPI实现。

我发现this answer对我很有用,因为:

  1. 我只在Windows下运行,所以可移植性不是问题
  2. 响应是一个简单的json文档,因此不需要存储打开的会话

它使用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)

相关问题 更多 >