我使用Gtk3中的GnomeKeyring和Python 2.7,但几乎所有的方法都被弃用了[1]。所以我尝试使用SecretSecret.Collection [2]
import gi
gi.require_version('Secret', '1.0')
from gi.repository import Secret
>> ValueError: Namespace Secret not available
我找到了包“python-secretstorage”[3],现在可以访问密钥环了:
import secretstorage
bus = secretstorage.dbus_init()
collection = secretstorage.get_default_collection(bus) ## login keyring
但是如何通过标签找到我要搜索的密钥,以便我不必迭代所有项目?
items = collection.get_all_items()
for item in items:
if item.get_label() == "most_wanted_key":
return item
这是我尝试过的,但它不适用于标签,只适用于属性。
found_items = collection.search_items({"label": "most_wanted_key"})
更新
https://specifications.freedesktop.org/secret-service/ch05.html 第5章查找属性 在查找期间,通过区分大小写的字符串相等性来匹配属性名称和值。 ... 要搜索项目,请使用Service接口的SearchItems()方法。 https://specifications.freedesktop.org/secret-service/re01.html#org.freedesktop.Secret.Service.SearchItems
答案 0 :(得分:1)
我还没有弄清楚如何搜索标签,但是AFAICT,标签是由GUI的一个属性设置的。这似乎有助于我找到网站凭据:
import secretstorage
bus = secretstorage.dbus_init()
collection = secretstorage.get_default_collection(bus) ## login keyring
search={u'action_url': u'https://testapp.example.com:8443/login'}
items = collection.search_items(search)
for item in items:
print item.get_label()
print item.get_secret()
事实上,打印的标签与我搜索的标签相同,我认为这是使用API的预期方式。当然,扭曲在于确定要搜索的确切属性;对于另一个网站,识别URL存储在“origin_url”下。