Автоматический NTLM с питоном в Windows

Как я могу использовать автоматическую аутентификацию NTLM из Python в Windows?

Я хочу иметь возможность доступа к TFS REST API из Windows без жесткого кодирования моего пароля, так же, как я делаю из веб-браузера (например, firefox network.automatic-ntlm-auth.trusted-uris).

См. также:  Как я могу вызвать функцию RefreshCache с помощью Lambda?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 3
  1. liorda

    Учетные данные NTLM основаны на данных, полученных в процессе интерактивного входа в систему, и включают односторонний хэш пароля. Вы должны предоставить учетные данные.

    Python имеет библиотеку requests_ntlm, которая позволяет использовать HTTP-аутентификацию NTLM.

    Вы можете ссылаться на эту статью, чтобы получить доступ к TFS REST API: Сценарий Python для доступа к Rest API Team Foundation Server (TFS)

    Если вы используете TFS 2017 или VSTS, вы можете попробовать использовать Personal Access Token в HTTP-заголовке Basic Auth вместе с вашим запросом REST.

    Спасибо @ Andy-MSFT, но в приведенном вами примере имя пользователя и пароль жестко запрограммированы, чего я пытаюсь избежать. person liorda; 02.08.2017

    Учетные данные @liorda NTLM основаны на данных, полученных в процессе интерактивного входа в систему, и включают односторонний хэш пароля. Вы должны предоставить учетные данные. person liorda; 02.08.2017

    Итак, как Firefox может аутентифицировать себя при доступе к веб-странице TFS? Я никогда явно не входил в систему и не вводил свой пароль. person liorda; 02.08.2017

    также stackoverflow.com/questions/32479243/ person liorda; 02.08.2017

    Это, безусловно, должно быть возможно, я думаю, вы бы начали с вызова AcquireCredentialsHandle. Firefox имеет открытый исходный код, так что вы можете посмотреть и увидеть, что они сделали. Однако делать это из Python может быть неудобно, если только кто-то еще не создал для вас решение. person liorda; 03.08.2017

  2. liorda

    Я нашел этот ответ, который мне подходит, потому что:

    1. Я собираюсь запускать его только из Windows, поэтому переносимость не проблема
    2. Ответ представляет собой простой документ json, поэтому нет необходимости хранить открытый сеанс.

    Он использует COM-объект WinHTTP.WinHTTPRequest.5.1 для внутренней обработки аутентификации:

    import win32com.client
    URL = 'https://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? это говорит, что не найдено подходящего распределения. Мой питон 3.8 person liorda; 12.08.2020

    @anandhu pip установить pypiwin32 person liorda; 13.05.2021

  3. liorda

    Вы можете сделать это с помощью https://github.com/requests/requests-kerberos. Под капотом он использует https://github.com/mongodb-labs/winkerberos. Последний помечен как Beta, я не уверен, насколько он стабилен. Но у меня есть запросы-kerberos в использовании какое-то время без каких-либо проблем.

    Возможно, более стабильным решением было бы https://github.com/brandond/requests-negotiate-sspi, который использует реализацию SSPI в pywin32.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: