Как я могу использовать автоматическую аутентификацию NTLM из Python в Windows?
Я хочу иметь возможность доступа к TFS REST API из Windows без жесткого кодирования моего пароля, так же, как я делаю из веб-браузера (например, firefox network.automatic-ntlm-auth.trusted-uris).
Учетные данные 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
Я нашел этот ответ, который мне подходит, потому что:
Он использует COM-объект WinHTTP.WinHTTPRequest.5.1 для внутренней обработки аутентификации:
Как установить win32.com? это говорит, что не найдено подходящего распределения. Мой питон 3.8 — person liorda; 12.08.2020
@anandhu pip установить pypiwin32 — person liorda; 13.05.2021
Вы можете сделать это с помощью https://github.com/requests/requests-kerberos. Под капотом он использует https://github.com/mongodb-labs/winkerberos. Последний помечен как Beta, я не уверен, насколько он стабилен. Но у меня есть запросы-kerberos в использовании какое-то время без каких-либо проблем.
Возможно, более стабильным решением было бы https://github.com/brandond/requests-negotiate-sspi, который использует реализацию SSPI в pywin32.