#credentials #platform #cross-platform #search #user-service #store #secret

keyring-search

基于keyring-rs的跨平台库,用于搜索特定平台的凭证存储

10个版本 (6个稳定版本)

1.2.1 2024年6月27日
1.2.0 2024年6月25日
0.2.2 2024年5月22日
0.1.0 2024年5月21日

#106 in 认证

Download history 366/week @ 2024-05-20 1/week @ 2024-05-27 10/week @ 2024-06-03 291/week @ 2024-06-10 330/week @ 2024-06-17 283/week @ 2024-06-24 68/week @ 2024-07-01 45/week @ 2024-07-29 20/week @ 2024-08-05

每月65次下载
konpeito 中使用

MIT/Apache

81KB
1.5K SLoC

Keyring-search v1

build dependencies crates.io docs.rs

用法

要在项目中使用此库,请将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
keyring-search = "1"

这是一个跨平台的库,用于搜索特定平台的密钥库。

目前支持的平台有Linux、Windows、macOS和iOS。

设计

这个crate原本计划作为keyring的一个功能,提供了基于用户提供的搜索参数对特定平台密钥库的广泛搜索。

Windows

Windows机器可以选择按'用户'、'服务'或'target'进行搜索。

use keyring_search::{Search, Limit, List};

let result = Search::new()
    .expect("ERROR")
    .by_user("test-user");
let list = List::list_credentials(result, Limit::All)
    .expect("Error");

println!("{}", list);

Linux - Secret Service

如果使用Linux Secret Service平台,密钥库存储为HashMap,因此可以更自由地搜索密钥。使用不同的搜索函数将搜索这些密钥,但by_target搜索application密钥除外。要更精确地控制by参数,请调用特定平台的search_items

use keyring_search::{Search, Limit, List};

let result = Search::new()
    .expect("ERROR")
    .by_user("test-user");
let list = List::list_credentials(result, Limit::All)
    .expect("Error");

println!("{}", list);

Linux - Keyutils

如果使用Linux Keyutils平台,密钥库是非持久的,更多用作安全缓存。要利用对任何密钥环的搜索,请直接调用此函数。通用平台无关搜索默认为session密钥环,并忽略by参数。要自定义对除session以外的其他密钥环的搜索,请使用keyutils模块中的search_by_keyring

use keyring_search::{Search, Limit, List};

let result = Search::new()
    .expect("ERROR")
    .by_user("test-user@test-service");
let list = List::list_credentials(result, Limit::All)
    .expect("Error");

println!("{}", list);

MacOS

MacOS机器可以选择按'帐户'、'服务'或'label'进行搜索。by_user按帐户搜索,by_target按label搜索,by_service按服务搜索

use keyring_search::{Search, Limit, List};

let result = Search::new()
    .expect("ERROR")
    .by_user("test-user");
let list = List::list_credentials(result, Limit::All)
    .expect("Error");

println!("{}", list);

错误

SearchError由于在创建或执行搜索过程中遇到任何错误而返回,无论是正则表达式、格式化还是搜索构建。当没有找到结果时返回NoResults。当向函数传递或从函数返回意外参数时返回Unexpected。

示例

在示例中捆绑了一个可工作的命令行应用程序:默认:cargo run --example cli(默认为当前目标,启动时需要输入查询)由用户

cargo运行 --示例cli ----user test-user

由服务提供

cargo运行 --示例cli ----service test-service

由目标指定

cargo运行 --示例cli ----target test-target

在以下任何一个命令后添加子命令 limit 并跟一个数字,将结果限制到该数量。

cargo运行 --示例cli ----target test-target limit 2

如果没有使用 limit 参数,默认显示所有结果,尽管传递 all 也会得到相同的结果。

cargo运行 --示例cli ----target test-target all

iOS模块不搜索用于存储密码的iCloud密钥链。相反,它搜索用于凭证的应用容器。要为iOS构建库,请使用

cargolipo --manifest-pathexamples/ios/rs/Cargo.toml --发布

在项目目录中。这应该在项目中已经链接。虽然文章较旧,并非所有概述的架构仍在使用中,但有关在iOS上构建Rust的信息可以在以下位置找到:[rust on ios](https://mozilla.github.io/firefox-browser-architecture/experiments/2017-09-06-rust-on-ios.html)。值得注意的是,iOS应用程序仅通过在按下搜索按钮时创建凭证来模拟凭证搜索。要获取结果,选择“用户”并输入“testAccount”,然后按搜索按钮(“服务”和“testService”也会工作)以查看此功能。

客户端测试

对搜索平台的基线测试。

平台

MacOS、Windows、iOS、Linux-Keyutils/Secret Service

许可证

根据您的要求,许可如下

  • Apache License,版本2.0,[LICENSE-APACHE](https://github.com/wiimmers/keyring-search/blob/bdf116fa5db911947a4a967864a3c7442425c15f/LICENSE-APACHE) 或 [https://apache.ac.cn/licenses/LICENSE-2.0](https://apache.ac.cn/licenses/LICENSE-2.0)
  • MIT许可证 ([LICENSE-MIT](https://github.com/wiimmers/keyring-search/blob/bdf116fa5db911947a4a967864a3c7442425c15f/LICENSE-MIT) 或 [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT))

依赖项

~0-13MB
~161K SLoC