Bitwarden 贡献文档
⮐ Bitwarden Contributing Documentation我的博客联系我
  • 关于
  • 入门
    • 概述
    • 工具
    • 服务器
      • 设置指南
      • 高级服务器设置
      • 数据库
        • MSSQL
        • 实体框架
      • 事件日志
      • Ingress 隧道
      • SCIM
      • 自托管指南
      • 系统管理门户
      • 单点登录 (SSO)
        • 本地 IdP
        • Okta
      • 故障排除
      • 用户机密
      • 公共 API
    • 网页客户端
      • 网页密码库
        • WebAuthn
      • 浏览器端
        • 生物识别解锁
        • Firefox 隐私模式
      • 桌面端
        • Mac App Store Dev
        • Microsoft Store
        • Native Messaging Test Runner
        • 更新测试
      • CLI
      • 故障排除
    • 移动端
      • Android
        • F-Droid
      • iOS
      • .NET MAUI (legacy)
        • Android
        • iOS
        • watchOS
    • SDK
      • 内部 SDK
      • Secrets Manager
        • Integrations
          • Kubernetes
    • 业务 App
      • 目录连接器
        • JumpCloud
        • OpenLDAP Docker 服务器
      • Key Connector
      • Splunk App
  • 贡献
    • 贡献
    • 代码样式
      • =Android & Kotlin
      • Angular & TypeScript
      • C#
      • =Rust
      • T-SQL
      • =Swift
      • Tailwind
    • 数据库迁移
      • 进化数据库设计
    • 提交签名
    • 拉取请求
      • =贡献审查程序
      • 分支
      • 代码审查
      • UI 审查 - Chromatic
    • 无障碍
    • 依赖管理
    • 功能标记
    • 模板存储库
    • 测试
      • =数据库集成测试
      • 负载测试
      • 单元测试
        • 命名约定
        • 测试结构
    • 修改用户机密
  • 架构
    • 架构
    • 架构决策记录 (ADR)
      • 0001 - Angular Reactive Forms
      • 0002 - Public API for modules
      • 0003 - Adopt Observable Data Services for Angular
      • 0004 - Refactor State Service
      • 0005 - Refactor Api Service
      • 0006 - Clients: Use Jest Mocks
      • 0007 - Manifest V3 sync Observables
      • 0008 - Server: Adopt CQRS
      • 0009 - Composition over inheritance
      • 0010 - Angular Modules
      • 0011 - Scalable Angular Clients folder structure
      • 0012 - Angular Filename convention
      • 0013 - Avoid layered folder structure for request/response models
      • 0014 - Adopt Typescript Strict flag
      • 0015 - Short Lived Browser Services
      • 0016 - Move Decryption and Encryption to Views
      • 0017 - Use Swift to build watchOS app
      • 0018 - Feature management
      • 0019 - Adoption of Web Push
      • 0020 - Observability with OpenTelemetry
      • 0021 - Logging to Standard Output
      • =0022 - Authorization
      • =0023 - Identifying Integrated Clients
    • 移动客户端架构
      • =Android
      • =iOS
        • =推送通知故障排除提示
      • =.NET MAUI (legacy)
        • =概述
        • watchOS
    • =SDK 架构
      • =数据模型
      • =依赖
      • Password Manager
        • Web
          • =互操作性
      • =Secrets Manager
      • =服务器绑定
      • =版本控制和破坏性更改
    • 网络客户端架构
      • 概述
      • 数据模型
      • 表示层
        • Angular
        • CLI
      • =依赖注入
      • 服务层
        • Vision
        • 实现
    • 服务器架构
    • 深度剖析
      • 身份验证
        • 双重身份验证
      • =授权
      • =浏览器自动填充
        • 收集页面详细信息
        • 生成并执行填充脚本
        • 表单提交检测
        • Shadow DOM
        • =内联自动填充菜单
      • Captcha
      • =只读数据库副本
      • 事件日志
      • =FIDO2 和通行密钥
        • =凭据
        • =操作
        • =命名惯例
        • =实现
          • =提供程序
            • =浏览器扩展
          • =依赖方
            • =用于解密的通行密钥
        • =术语表
      • 推送通知
        • 移动端推送通知
        • 其他客户端推送通知
      • =SSH 密钥和代理
        • =SSH 代理
      • =状态提供程序框架
        • =派生状态
    • =安全
      • =定义
      • =原则
        • =P01 - 锁定的密码库是安全的
        • =P02 - 半受损设备密码库的有限安全性
        • =P03 - 完全损坏的系统没有安全性
        • =P04 - 控制密码库数据的访问权限
        • =P05 - 将安全漏洞的影响降至最低
      • =要求
由 GitBook 提供支持
在本页
  • 事件类型
  • 编写事件
  • 云托管
  • 自托管
  • 查询事件
  • 云托管
  • 自托管
  1. 架构
  2. 深度剖析

事件日志

上一页=只读数据库副本下一页=FIDO2 和通行密钥

最后更新于1年前

对应的

Bitwarden 事件日志用于团队和企业组织捕获组织内发生的事件的带时间戳的记录。有关如何查看事件的文档,请参阅。

事件类型

根据事件触发的位置,我们记录的事件可以分为两种不同的类型:

触发位置
描述

服务器

服务器端操作的用户操作,通常是与组织管理相关的任何操作。

客户端

用户对本地同步数据的交互不会导致服务器端操作。它们通常带有 Client_ 前缀。例如 Cipher_ClientAutofill,它记录组织项目的自动填充。

只要有可能,我们更喜欢使用服务器端事件,因为它们会产生较少的网络流量,并且无法通过修改客户端来规避。

编写事件

客户端上的事件通过 JavaScript 客户端的 和 以及移动客户端的 进行处理。这些服务将事件排队到存储在客户端的集合中,并定期上传到服务器,目前间隔为 60 秒。日志也会在注销时上传,因此集合中没有孤立的事件。

已上传的事件日志通过对事件服务上的 /collect 端点的 POST 请求发送到服务器,该端点由 CollectController 处理。控制器在将事件传递到 EventService 之前执行一些基本映射。

服务器端事件直接发送到 EventService,完全绕过事件服务。

云实例和自托管实例的 EventService 实现有区别。它由 IEventWriteService 处理。

云托管

对于云托管实例,我们使用 实现,它将事件写入 globalSettings.Events.ConnectionString 配置设置中指定的 Azure 队列。

然后,Azure 队列中的事件由 Bitwarden 云托管实例中运行的 EventsProcessor 服务进行处理。EventsProcessor 正在运行的 将事件日志从 Azure 队列中出列,并使用 将它们写入 Azure 表存储。

自托管

查询事件

与编写事件一样,事件的查询根据 Bitwarden 实例使用的托管方法而有所不同。由于事件记录到不同的位置(Azure 表存储和 Bitwarden SQL 数据库),因此对这些事件的查询也必须有所不同。

云托管

自托管

在自托管 Bitwarden 实例上,EventsController 将使用 IEventRepository 查询 Events 数据库表中的事件日志。

在自托管实例上, 使用 EventRepository 直接将事件日志写入 Events 数据库表。

通过 Bitwarden API 上的 查询事件日志。

我们通过 Api 项目中的依赖注入来实现这一点。根据托管环境和使用的数据库提供程序, 将具有不同的实现。

对于云托管的 Bitwarden 实例,EventsController 将通过实现 IEventRepository 的 类查询 Azure 表存储以查找事件日志。

官方页面地址
帮助中心
EventCollectionService
EventUploadService
EventService
AzureQueueEventWriteService
AzureQueueHostedService
EventRepository
RepositoryEventWriteService
EventsController
IEventRepository
Bit.Core.Repositories.TableStorage.EventRepository