Как сохранить учетные данные OAuth с помощью Gnome Keyring

Я пытаюсь создать простое приложение Vala/Gtk Twitter, и мне удалось отправить твиты; однако пользователь должен каждый раз проходить аутентификацию, что влечет за собой переход по URL-адресу, нажатие кнопки, чтобы дать моему приложению разрешение на публикацию, копирование ПИН-кода и вставку указанного ПИН-кода в мое приложение. За каждый твит.

Я хотел бы сохранить эту информацию для аутентификации в связке ключей GNOME; однако я почти ничего не знаю об OAuth и ничего не знаю о связке ключей.

Как я могу хранить данные OAuth в связке ключей Gnome? Я приму ответы на любом языке, хотя за ответы Vala будут начисляться бонусные баллы. :)


person weberc2    schedule 19.05.2012    source источник


Ответы (1)


Вы можете использовать библиотеку libsecret, которая связывается с «Секретной службой» через протокол Dbus.

Сначала вам нужно определить схему пароля, которая будет использоваться позже для хранения/извлечения токенов.

Пример Вала:

var example_schema = new Secret.Schema ("org.yor_schema.name",Secret,SchemaFlags.NONE,
    "number", Secret.SchemaAttributeType.INTEGER,
    "string", Secret.SchemaAttributeType.STRING);

Теперь вы должны сохранить свой токен:

var attributes = new GLib.HashTable<string,string> ();
attributes["number"] = "18";
attributes["string"] = "Hello";

Secret.password_storev.begin(example_schema,attributes,Secret.COLLECTION_DFAULT,
    "Label","Token",null,(obj,async_res) => {
        bool res = Secret.password_store.end(async_res);
        /* Password has been stored - do something ... */
});

Чтобы извлечь сохраненный токен:

var attributes = new GLib.HashTable<string,string> ();
attributes["number"] = "18";
attributes["string"] = "Hello";

Secret.password_lookupv.begin(example_schema,attributes,null,(obj,async_res) => {
    String token = Secret.password_lookup.end(async_res);
});

Имя пакета называется libsecret-1 .

Для компиляции добавьте следующий флаг в make-файл.

AM_VALAFLAGS = \
    --pkg=libsecret-1
person Alexander    schedule 13.01.2013
comment
Извините, я давно отказался от этого проекта (это было скорее учебное упражнение, а соотношение выгод и времени недостаточно велико, чтобы заслуживать дальнейших вложений). На первый взгляд все выглядит правильно, поэтому я +1, но я не могу оправдать время, чтобы проверить ваше решение. - person weberc2; 14.01.2013