Flutter密码管理插件bitwarden_secrets的使用

Flutter密码管理插件bitwarden_secrets的使用

示例

// 导入所需的库
import 'dart:ffi';
import 'dart:io';
import 'package:bitwarden_secrets/bitwarden_secrets.dart';

void main() {
  // 替换为你的访问令牌和组织ID
  var accessToken = "<your access token>";
  var organizationId = "<your organization id>";

  // 创建一个Bitwarden客户端
  var bws = BitwardenSecrets(organizationId, loadBitwardenLib());

  // 登录并授权
  bws.accessTokenLogin(accessToken);

  // 创建一个项目和一个秘密
  var project = bws.projectCreate("foo-project");
  var secret = bws.secretCreate("foo-api-Key", "xxxx-xxxx-xxxxxxx", project.id);

  // 列出所有的秘密
  List<SecretIdentifier> secrets = bws.secretList();

  // 列出所有的项目
  List<Project> projects = bws.projectList();

  // 使用给定的键查找秘密的值
  var fooApiKey = lookupByName(bws, "foo-api-key").value;
}

// 根据密钥查找秘密
Secret lookupByName(BitwardenSecrets bws, String key) {
  // 获取与给定键匹配的秘密标识符
  var header = bws.secretList().singleWhere((e) => e.key == key);
  // 返回该秘密的详细信息
  return bws.secretGet(header.id);
}

// 加载Bitwarden库
DynamicLibrary loadBitwardenLib() {
  // 根据操作系统加载不同的动态库文件
  if (Platform.isWindows) {
    return DynamicLibrary.open("native/bitwarden_c.dll");
  } else if (Platform.isAndroid || Platform.isLinux || Platform.isFuchsia) {
    return DynamicLibrary.open("native/bitwarden_c.so");
  } else if (Platform.isMacOS || Platform.isIOS) {
    return DynamicLibrary.open("native/bitwarden_c.dynlib");
  } else {
    throw Exception("Unsupported platform: ${Platform.operatingSystem}");
  }
}

依赖项

此包依赖于共享库 bitwarden_c,该库应与您的应用程序一起发布。您可以使用以下命令从Rust源代码构建 bitwarden_c

# 如果需要,安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

# 克隆仓库并进入目录
git clone https://github.com/bitwarden/sdk.git
cd sdk

# 构建
cargo build --release -p bitwarden-c

# 将库复制到项目目录
# 根据您的平台编辑扩展名(如dll用于Windows,dylib用于macOS等)和<my_project_path>。
cp target/release/bitwarden_c.so <my_project_path>/native/

更多关于Flutter密码管理插件bitwarden_secrets的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter密码管理插件bitwarden_secrets的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用bitwarden_secrets插件来管理密码的一个基本示例。bitwarden_secrets插件允许你与Bitwarden密码管理器进行交互,检索和存储敏感信息。

首先,你需要在你的pubspec.yaml文件中添加bitwarden_secrets依赖:

dependencies:
  flutter:
    sdk: flutter
  bitwarden_secrets: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你需要设置Bitwarden客户端。这通常涉及创建一个Bitwarden客户端实例,并配置它以使用你的Bitwarden账户。以下是一个基本的示例代码,展示了如何初始化Bitwarden客户端并检索一个条目:

import 'package:flutter/material.dart';
import 'package:bitwarden_secrets/bitwarden_secrets.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late BitwardenClient _client;
  String? _password;

  @override
  void initState() {
    super.initState();
    // 初始化Bitwarden客户端
    _client = BitwardenClient(
      clientId: '你的Bitwarden客户端ID',  // 替换为你的Bitwarden客户端ID
      clientSecret: '你的Bitwarden客户端密钥',  // 替换为你的Bitwarden客户端密钥
    );

    // 登录并检索密码(这通常是一个异步操作)
    _loginAndRetrievePassword();
  }

  Future<void> _loginAndRetrievePassword() async {
    try {
      // 登录到Bitwarden(假设你已经有了一个有效的登录会话)
      // 这里省略了实际的登录步骤,因为登录流程可能涉及多个步骤,如获取授权码、交换访问令牌等。
      // 你需要根据你的应用需求来处理登录流程。

      // 假设我们已经有了有效的访问令牌,现在检索一个条目
      final session = BitwardenSession(
        accessToken: '你的有效访问令牌',  // 替换为你的有效访问令牌
      );

      // 使用会话设置客户端
      _client.session = session;

      // 检索一个特定的条目(例如,通过UUID)
      final itemUuid = '你的条目UUID';  // 替换为你要检索的条目的UUID
      final item = await _client.getItemsByUuid(itemUuid);

      // 假设条目包含密码字段
      if (item != null && item.password != null) {
        setState(() {
          _password = item.password!;
        });
      } else {
        print('无法检索条目或条目不包含密码字段');
      }
    } catch (e) {
      print('检索密码时出错: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Bitwarden Secrets 示例'),
        ),
        body: Center(
          child: Text(
            _password ?? '加载中...',
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
    );
  }
}

注意

  1. 上面的代码示例假设你已经处理了Bitwarden的登录流程,并且已经有一个有效的访问令牌。实际的登录流程可能涉及多个步骤,如获取授权码、使用授权码交换访问令牌等。你需要根据你的应用需求来处理这些步骤。
  2. BitwardenClientBitwardenSessiongetItemsByUuid等方法和类是基于bitwarden_secrets插件的API。请查阅最新的插件文档以确保你使用的是正确的方法和类。
  3. 在实际应用中,不要将敏感信息(如客户端ID、客户端密钥或访问令牌)硬编码到你的代码中。考虑使用环境变量或安全存储来管理这些敏感信息。

这个示例提供了一个基本的框架,展示了如何在Flutter应用中使用bitwarden_secrets插件来检索存储在Bitwarden中的密码。根据你的具体需求,你可能需要扩展或修改这个示例。

回到顶部