如何配置Python Keyring从Windows 7的凭据管理器中获取凭据?

8
我花了很多时间研究钥匙扣包,试图让一个简单的例子工作起来。我正在使用Windows 7-x64机器上的Python 2.7。我已经安装了该软件包,并确认文件位于我的Lib/site-packages文件夹中。
在安装文档中的此代码片段中,“system”应填写什么内容?
import keyring
keyring.get_password("system", "username")

当我运行代码时,出现以下错误:

运行时错误:没有可推荐的后端。如果您想使用非推荐后端,请安装keyrings.alt软件包。

看起来它没有将Windows识别为后端。我觉得我缺少了一个简单的步骤。任何帮助都将不胜感激,包括从Windows凭据管理器中提取通用凭据的简单代码示例。


我有同样的问题。Windows 7。Python 3.6。从conda安装,如果我没记错的话。你解决了吗? - Shaun
3个回答

15

终于让它正常工作了。Shaun 的信息指引我正确安装了 pywin32。从那里开始,我使用 Windows 凭据管理器创建测试凭据并测试 Python 密钥环函数,进行试错调试。

我只能在通用凭据中使其工作,这对我的目的来说是可以接受的。我将 Internet 或网络地址设置为 "test"。用户名设置为 "test_user"。密码设置为 "test123"。(这里包括引号仅供说明,请输入时不要包含引号。)

print keyring.get_password("test","test_user") 

返回了结果"test123"

希望这些信息能够帮助其他人。感谢Shaun提供的解决方向。


9
您可能需要安装pywin32包。这样做对我而言解决了问题。
使用conda
conda install -e environment_name_here pywin32 使用pip
pip install pywin32 顺便说一下,由于某种原因,代码吞噬了Windows凭据管理器类本应抛出的异常,以提醒您存在此问题。 这里是异常这里是被捕获并丢弃的位置

非常感谢您的回复!我没想到我会得到答案。我安装了pywin32,按照您的描述解决了异常错误。但是,我仍然不清楚在keyring.get_password中使用的参数。您能否快速提供一个示例,说明您如何在Windows凭据管理器中创建凭据以及如何使用keyring提取密码?我尝试了以下操作: keyring.get_password("Windows", "test_user") keyring.get_password("Generic", "test_user")我的日志输出结果都显示“None”。 - Brian J
@BrianJ,非常感谢您。标记为已回答? - Shaun

0

我不知道你是否能够这样做,但是你可以使用以下命令要求用户提供其凭据:

import admin
if not admin.isUserAdmin():
    admin.runAsAdmin()

1
感谢您的回复。实际上,我需要在Windows凭据管理器中设置通用凭据,并将其传递给脚本,以便在Web爬取应用程序中使用而无需任何用户输入。看起来keyring可以提供此功能,但我似乎无法将其与Windows后端配合使用。 - Brian J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接