Как настроить Python Keyring для получения учетных данных из Windows Credential Manager в Windows 7?

Я потратил много времени на изучение пакета ключей, пытаясь заставить работать простой пример. Я использую Python 2.7 на машине с Windows 7-x64. Я установил пакет и подтвердил, что файлы находятся в моей папке Lib/site-packages.

В этом фрагменте кода из установочной документации, что должно идти в "системе"?

import keyring
keyring.get_password("system", "username")

Когда я запускаю код, я получаю следующую ошибку:

RuntimeError: рекомендуемый бэкэнд недоступен. Установите пакет keyrings.alt, если вы хотите использовать нерекомендованные бэкэнды.

Похоже, что он не признает Windows в качестве бэкэнда. Я чувствую, что упускаю простой шаг. Мы ценим любую помощь, включая простой пример кода получения общих учетных данных из диспетчера учетных данных Windows.

3 ответа

Решение

Наконец-то все заработало. Информация от Шона указала мне правильное направление с установкой pywin32. Оттуда я сделал метод проб и ошибок, создав тестовые учетные данные в Windows Credential Manager и протестировав функцию набора ключей Python.

Я работал только с Generic Credentials, что хорошо для моих целей. Я установил интернет или сетевой адрес на "тест". Имя пользователя было установлено на "test_user". Пароль был установлен на "test123". (Цитаты включены здесь для инструкции, не включайте при их вводе.

print keyring.get_password ("test", "test_user") вернул результат "test123"

Надеюсь, эта информация поможет кому-то еще. Спасибо Шон за направление, необходимое для решения этой проблемы.

Возможно, вам придется установить pywin32 пакет. Это решило проблему для меня.

С помощью conda:
conda install -e environment_name_here pywin32

С помощью pip:
pip install pywin32

По касательной: по какой-то причине код проглатывает исключение, которое в противном случае вывел бы класс диспетчера учетных данных Windows, чтобы предупредить вас об этой проблеме. Вот исключение, и вот где его ловят и выбрасывают.

Я не знаю, можете ли вы сделать это, но вместо этого вы можете попросить пользователя предоставить свои учетные данные, используя следующие команды

import admin
if not admin.isUserAdmin():
    admin.runAsAdmin()
Другие вопросы по тегам