这是基于vue-vben-admin 模板适用于abp vNext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

13 KiB

ASP.NET Core 审计

**本文档中引用的文件** - [AbpAspNetCoreAuditingModule.cs](file://aspnet-core/framework/auditing/LINGYUN.Abp.AspNetCore.Auditing/LINGYUN/Abp/AspNetCore/Auditing/AbpAspNetCoreAuditingModule.cs) - [AspNetCoreRecordHeaderAuditLogContributor.cs](file://aspnet-core/framework/auditing/LINGYUN.Abp.AspNetCore.Auditing/LINGYUN/Abp/AspNetCore/Auditing/AspNetCoreRecordHeaderAuditLogContributor.cs) - [AbpAspNetCoreAuditingHeaderOptions.cs](file://aspnet-core/framework/auditing/LINGYUN.Abp.AspNetCore.Auditing/LINGYUN/Abp/AspNetCore/Auditing/AbpAspNetCoreAuditingHeaderOptions.cs) - [AbpAuditLoggingModule.cs](file://aspnet-core/framework/auditing/LINGYUN.Abp.AuditLogging/LINGYUN/Abp/AuditLogging/AbpAuditLoggingModule.cs) - [DefaultAuditLogManager.cs](file://aspnet-core/framework/auditing/LINGYUN.Abp.AuditLogging/LINGYUN/Abp/AuditLogging/DefaultAuditLogManager.cs) - [AuditLogManager.cs](file://aspnet-core/framework/auditing/LINGYUN.Abp.AuditLogging.EntityFrameworkCore/LINGYUN/Abp/AuditLogging/EntityFrameworkCore/AuditLogManager.cs) - [AuditLogAppService.cs](file://aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.Application/LINGYUN/Abp/Auditing/AuditLogs/AuditLogAppService.cs) - [AuditLogController.cs](file://aspnet-core/modules/auditing/LINGYUN.Abp.Auditing.HttpApi/LINGYUN/Abp/Auditing/AuditLogs/AuditLogController.cs) - [README.md](file://aspnet-core/framework/auditing/LINGYUN.Abp.AspNetCore.Auditing/README.md)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概述
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

LINGYUN.Abp.AspNetCore.Auditing 模块是 ABP 框架中用于 ASP.NET Core 应用程序的审计功能扩展。该模块专注于在审计日志中记录 HTTP 请求头信息,为开发者提供了一种灵活的方式来监控和分析应用程序的 HTTP 通信。通过该模块,开发者可以配置哪些 HTTP 请求头需要被记录,并在审计日志中查看这些信息,从而更好地理解客户端与服务器之间的交互。

项目结构

该模块位于 aspnet-core/framework/auditing 目录下,主要包含 ASP.NET Core 审计相关的功能实现。模块通过 AbpAspNetCoreAuditingModule 类进行注册和配置,利用 AspNetCoreRecordHeaderAuditLogContributor 贡献者来收集 HTTP 请求头信息。审计数据的存储和管理由 AbpAuditLogging 模块负责,该模块提供了多种数据存储选项,包括 Entity Framework Core 和 Elasticsearch。

graph TD
subgraph "审计模块"
A[AbpAspNetCoreAuditingModule]
B[AspNetCoreRecordHeaderAuditLogContributor]
C[AbpAspNetCoreAuditingHeaderOptions]
end
subgraph "审计日志模块"
D[AbpAuditLoggingModule]
E[DefaultAuditLogManager]
F[AuditLogManager]
end
A --> B
B --> C
D --> E
D --> F
B --> D

图源

  • AbpAspNetCoreAuditingModule.cs
  • AspNetCoreRecordHeaderAuditLogContributor.cs
  • AbpAspNetCoreAuditingHeaderOptions.cs
  • AbpAuditLoggingModule.cs
  • DefaultAuditLogManager.cs
  • AuditLogManager.cs

节源

  • AbpAspNetCoreAuditingModule.cs
  • AbpAuditLoggingModule.cs

核心组件

LINGYUN.Abp.AspNetCore.Auditing 模块的核心组件包括 AbpAspNetCoreAuditingModuleAspNetCoreRecordHeaderAuditLogContributorAbpAspNetCoreAuditingHeaderOptionsAbpAspNetCoreAuditingModule 是模块的主类,负责在应用程序启动时注册审计功能。AspNetCoreRecordHeaderAuditLogContributor 是一个审计日志贡献者,它在审计日志创建前收集 HTTP 请求头信息。AbpAspNetCoreAuditingHeaderOptions 则提供了配置选项,允许开发者指定哪些 HTTP 请求头需要被记录。

节源

  • AbpAspNetCoreAuditingModule.cs
  • AspNetCoreRecordHeaderAuditLogContributor.cs
  • AbpAspNetCoreAuditingHeaderOptions.cs

架构概述

该模块的架构设计遵循了 ABP 框架的模块化原则。AbpAspNetCoreAuditingModule 依赖于 AbpAspNetCoreModule,确保在 ASP.NET Core 应用程序中正确集成审计功能。AspNetCoreRecordHeaderAuditLogContributor 实现了 AuditLogContributor 接口,通过 PreContribute 方法在审计日志创建前收集 HTTP 请求头信息。这些信息随后被存储在 AuditLogInfo 对象的 ExtraProperties 中,最终由 AbpAuditLogging 模块处理和存储。

sequenceDiagram
participant App as 应用程序
participant Module as AbpAspNetCoreAuditingModule
participant Contributor as AspNetCoreRecordHeaderAuditLogContributor
participant Options as AbpAspNetCoreAuditingHeaderOptions
participant Audit as AbpAuditLoggingModule
App->>Module : 启动
Module->>Module : 配置服务
Module->>Audit : 添加贡献者
Audit->>Contributor : 创建实例
loop 每个HTTP请求
App->>Contributor : 开始审计
Contributor->>Options : 获取配置
Contributor->>App : 获取HTTP上下文
Contributor->>Contributor : 收集请求头
Contributor->>Audit : 设置审计信息
end

图源

  • AbpAspNetCoreAuditingModule.cs
  • AspNetCoreRecordHeaderAuditLogContributor.cs
  • AbpAspNetCoreAuditingHeaderOptions.cs
  • AbpAuditLoggingModule.cs

详细组件分析

AspNetCoreRecordHeaderAuditLogContributor 分析

AspNetCoreRecordHeaderAuditLogContributor 是该模块的核心实现类,负责收集 HTTP 请求头信息。它通过 IHttpContextAccessor 获取当前 HTTP 上下文,并根据 AbpAspNetCoreAuditingHeaderOptions 的配置决定是否记录请求头。如果配置允许,它会遍历指定的请求头名称,从 HttpRequest.Headers 中获取相应的值,并将它们存储在审计信息的 ExtraProperties 中。

flowchart TD
Start([开始]) --> CheckEnabled["检查是否启用"]
CheckEnabled --> |否| End([结束])
CheckEnabled --> |是| GetContext["获取HTTP上下文"]
GetContext --> CheckContext["检查上下文是否存在"]
CheckContext --> |否| End
CheckContext --> |是| CheckProperty["检查是否已存在属性"]
CheckProperty --> |是| End
CheckProperty --> |否| CollectHeaders["收集请求头"]
CollectHeaders --> StoreData["存储数据到审计信息"]
StoreData --> End

图源

  • AspNetCoreRecordHeaderAuditLogContributor.cs
  • AbpAspNetCoreAuditingHeaderOptions.cs

节源

  • AspNetCoreRecordHeaderAuditLogContributor.cs

配置选项分析

AbpAspNetCoreAuditingHeaderOptions 类提供了两个主要的配置选项:IsEnabledHttpHeadersIsEnabled 是一个布尔值,用于控制是否在审计日志中记录 HTTP 请求头,默认值为 trueHttpHeaders 是一个字符串列表,用于指定需要记录的 HTTP 请求头名称。开发者可以通过依赖注入在应用程序中配置这些选项,从而灵活地控制审计日志的内容。

节源

  • AbpAspNetCoreAuditingHeaderOptions.cs

依赖分析

该模块依赖于 ABP 框架的核心模块 AbpAspNetCoreModule,以确保在 ASP.NET Core 应用程序中正确集成。同时,它还依赖于 AbpAuditLogging 模块来处理审计日志的存储和管理。AspNetCoreRecordHeaderAuditLogContributor 依赖于 IHttpContextAccessor 来获取 HTTP 上下文,以及 IOptions<AbpAspNetCoreAuditingHeaderOptions> 来获取配置信息。这些依赖关系通过构造函数注入实现,确保了组件之间的松耦合。

graph TD
A[AbpAspNetCoreAuditingModule] --> B[AbpAspNetCoreModule]
A --> C[AbpAuditLoggingModule]
D[AspNetCoreRecordHeaderAuditLogContributor] --> E[IHttpContextAccessor]
D --> F[IOptions<AbpAspNetCoreAuditingHeaderOptions>]
C --> G[DefaultAuditLogManager]
C --> H[AuditLogManager]

图源

  • AbpAspNetCoreAuditingModule.cs
  • AspNetCoreRecordHeaderAuditLogContributor.cs
  • AbpAuditLoggingModule.cs

节源

  • AbpAspNetCoreAuditingModule.cs
  • AspNetCoreRecordHeaderAuditLogContributor.cs
  • AbpAuditLoggingModule.cs

性能考虑

该模块在设计时考虑了性能影响。首先,它只在配置启用时才收集 HTTP 请求头信息,避免了不必要的性能开销。其次,它只收集指定的请求头,而不是所有请求头,进一步减少了数据量。最后,审计日志的存储和处理由 AbpAuditLogging 模块异步完成,不会阻塞主请求处理流程。然而,开发者仍需注意,记录大量请求头信息可能会增加数据库存储和网络传输的负担,因此应根据实际需求谨慎配置。

故障排除指南

如果审计日志中没有记录预期的 HTTP 请求头信息,首先应检查 AbpAspNetCoreAuditingHeaderOptions 的配置是否正确,特别是 IsEnabled 是否为 true 以及 HttpHeaders 是否包含需要记录的请求头名称。其次,确保 AbpAspNetCoreAuditingModule 已在应用程序模块中正确引用。如果问题仍然存在,可以启用详细的日志记录来调试 AspNetCoreRecordHeaderAuditLogContributor 的执行过程。

节源

  • AbpAspNetCoreAuditingHeaderOptions.cs
  • AspNetCoreRecordHeaderAuditLogContributor.cs

结论

LINGYUN.Abp.AspNetCore.Auditing 模块为 ABP 框架的 ASP.NET Core 应用程序提供了一个灵活且高效的 HTTP 请求头审计解决方案。通过简单的配置,开发者可以轻松地记录和分析应用程序的 HTTP 通信,从而提高系统的可观察性和安全性。该