如何通过secretstorage集合中的标签查找密钥

时间:2017-06-21 13:20:58

标签: python gtk3

我使用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"})
  1. https://lazka.github.io/pgi-docs/GnomeKeyring-1.0/functions.html
  2. https://lazka.github.io/pgi-docs/Secret-1/classes/Collection.html
  3. https://secretstorage.readthedocs.io/en/latest/
  4. 更新

    https://specifications.freedesktop.org/secret-service/ch05.html 第5章查找属性 在查找期间,通过区分大小写的字符串相等性来匹配属性名称和值。 ... 要搜索项目,请使用Service接口的SearchItems()方法。 https://specifications.freedesktop.org/secret-service/re01.html#org.freedesktop.Secret.Service.SearchItems

1 个答案:

答案 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”下。