我正在尝试构建一个简单的 Vala/Gtk Twitter 应用程序,并且我已经成功地发送了推文;但是,用户每次都必须进行身份验证,这需要访问 URL、单击以授予我的应用程序发布权限、复制 PIN 并将所述 PIN 粘贴到我的应用程序中。对于每条推文。
我想将此身份验证信息存储在 GNOME 密钥环中;但是,我对 OAuth 几乎一无所知,对 Keyring 也一无所知。
如何将 OAuth 数据存储到 Gnome 密钥环中?我会接受任何语言的答案,但 Vala 的答案将获得奖励积分。:)
我正在尝试构建一个简单的 Vala/Gtk Twitter 应用程序,并且我已经成功地发送了推文;但是,用户每次都必须进行身份验证,这需要访问 URL、单击以授予我的应用程序发布权限、复制 PIN 并将所述 PIN 粘贴到我的应用程序中。对于每条推文。
我想将此身份验证信息存储在 GNOME 密钥环中;但是,我对 OAuth 几乎一无所知,对 Keyring 也一无所知。
如何将 OAuth 数据存储到 Gnome 密钥环中?我会接受任何语言的答案,但 Vala 的答案将获得奖励积分。:)
您可以使用通过 Dbus 协议与“秘密服务”通信的libsecret库。
首先,您需要定义一个密码模式,稍后将用于令牌存储/提取。
瓦拉示例:
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
.
要编译,请将以下标志添加到您的 makefile 中。
AM_VALAFLAGS = \
--pkg=libsecret-1