【问题标题】:Automatic NTLM with python on Windows在 Windows 上使用 python 自动 NTLM
【发布时间】:2017-08-02 06:59:58
【问题描述】:

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

我希望能够从 Windows 访问 TFS REST API,而无需对我的密码进行硬编码,就像我从 Web 浏览器(例如,firefox 的 network.automatic-ntlm-auth.trusted-uris)所做的一样。

【问题讨论】:

    标签: python windows tfs ntlm


    【解决方案1】:

    我发现 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)
    

    【讨论】:

    • 如何安装win32.com?它说没有找到匹配的分布。我的python是3.8
    • @anandhu pip install pypiwin32
    【解决方案2】:

    您可以使用https://github.com/requests/requests-kerberos 做到这一点。在引擎盖下它使用https://github.com/mongodb-labs/winkerberos。后者被标记为 Beta,我不确定它有多稳定。但是我有一段时间使用 requests-kerberos 没有任何问题。

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

    【讨论】:

      【解决方案3】:

      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 请求。

      【讨论】:

      • 感谢@Andy-MSFT,但您提供的示例将用户名和密码硬编码,这是我试图避免的。
      • @liorda NTLM 凭据基于交互式登录过程中获得的数据,并包含密码的单向哈希。您必须提供凭据。
      • 那么 Firefox 在访问 TFS 网页时如何进行身份验证呢?我从未明确登录或提供我的密码。
      • 这当然是可能的,我想你应该先打电话给AcquireCredentialsHandle。 Firefox 是开源的,所以你可以看看他们做了什么。但是,从 Python 中执行此操作可能会很尴尬,除非有人已经为您构建了解决方案。
      猜你喜欢
      • 2020-09-20
      • 2012-01-26
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2020-07-17
      • 2011-06-30
      • 2011-02-24
      相关资源
      最近更新 更多