这是基于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.
 
 
 
 
 
 

16 KiB

认证服务架构

**本文档中引用的文件** - [AuthServerModule.cs](file://aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs) - [appsettings.json](file://aspnet-core/services/LY.MicroService.AuthServer/appsettings.json) - [Program.cs](file://aspnet-core/services/LY.MicroService.AuthServer/Program.cs) - [AuthServerMigrationsEntityFrameworkCoreModule.cs](file://aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerMigrationsEntityFrameworkCoreModule.cs) - [yarp.json](file://gateways/web/LY.MicroService.ApiGateway/yarp.json) - [appsettings.Development.json](file://aspnet-core/services/LY.MicroService.AuthServer/appsettings.Development.json) - [AuthServerModule.Configure.cs](file://aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs)

目录

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

简介

本文档详细描述了基于ABP框架的微服务架构中的认证服务(AuthServer)的设计与实现。该认证服务作为整个微服务生态系统的安全中心,负责用户身份验证、令牌管理、权限控制等核心安全功能。通过OpenIddict实现OAuth 2.0和OpenID Connect协议,为其他微服务提供统一的身份认证和授权服务。

项目结构

认证服务模块遵循ABP框架的分层架构设计,包含数据种子、本地化资源、UI品牌化、静态资源库等组件。服务通过模块化设计,实现了功能的解耦和可扩展性。

graph TD
subgraph "AuthServer"
A[AuthServerModule] --> B[DataSeeder]
A --> C[Localization]
A --> D[Ui/Branding]
A --> E[wwwroot/libs]
A --> F[AuthServerModule.Configure.cs]
A --> G[AuthServerModule.Seeder.cs]
A --> H[Program.cs]
A --> I[appsettings.json]
end

图表来源

  • AuthServerModule.cs
  • appsettings.json

本节来源

  • AuthServerModule.cs
  • appsettings.json

核心组件

认证服务的核心组件包括AuthServerModule、配置文件、程序入口点和数据库迁移模块。这些组件协同工作,确保认证服务的正常运行和可维护性。

本节来源

  • AuthServerModule.cs
  • Program.cs
  • appsettings.json

架构概述

认证服务在微服务生态系统中扮演着身份提供者(Identity Provider)的角色,通过OpenIddict实现OAuth 2.0和OpenID Connect协议。其他微服务通过API网关访问认证服务,实现统一的身份认证和授权。

graph LR
subgraph "客户端"
A[Web应用] --> B[API网关]
C[移动应用] --> B
D[第三方应用] --> B
end
subgraph "API网关"
B --> E[认证服务]
B --> F[其他微服务]
end
subgraph "认证服务"
E --> G[OpenIddict]
E --> H[Identity]
E --> I[数据库]
E --> J[Redis]
end
subgraph "其他微服务"
F --> E
end

图表来源

  • AuthServerModule.cs
  • yarp.json

详细组件分析

AuthServer模块分析

AuthServer模块是认证服务的核心,通过[DependsOn]特性声明了对多个ABP模块的依赖,包括身份认证、审计日志、缓存、事件总线等。

模块依赖关系

classDiagram
class AuthServerModule {
+PreConfigureServices()
+ConfigureServices()
+OnApplicationInitialization()
}
AuthServerModule --> AbpSerilogEnrichersApplicationModule : "依赖"
AuthServerModule --> AbpSerilogEnrichersUniqueIdModule : "依赖"
AuthServerModule --> AbpAspNetCoreSerilogModule : "依赖"
AuthServerModule --> AbpAccountApplicationModule : "依赖"
AuthServerModule --> AbpAccountHttpApiModule : "依赖"
AuthServerModule --> AbpAccountWebOpenIddictModule : "依赖"
AuthServerModule --> AbpCachingStackExchangeRedisModule : "依赖"
AuthServerModule --> AbpIdentityAspNetCoreSessionModule : "依赖"
AuthServerModule --> AbpOpenIddictAspNetCoreSessionModule : "依赖"
AuthServerModule --> AuthServerMigrationsEntityFrameworkCoreModule : "依赖"
AuthServerModule --> AbpDataDbMigratorModule : "依赖"
AuthServerModule --> AbpAuditLoggingElasticsearchModule : "依赖"
AuthServerModule --> AbpLocalizationCultureMapModule : "依赖"
AuthServerModule --> AbpAspNetCoreMvcWrapperModule : "依赖"
AuthServerModule --> AbpAspNetCoreHttpOverridesModule : "依赖"
AuthServerModule --> AbpTelemetrySkyWalkingModule : "依赖"
AuthServerModule --> AbpExporterMiniExcelModule : "依赖"
AuthServerModule --> AbpEmailingPlatformModule : "依赖"
AuthServerModule --> AbpSmsPlatformModule : "依赖"
AuthServerModule --> AbpCAPEventBusModule : "依赖"

图表来源

  • AuthServerModule.cs

服务初始化流程

sequenceDiagram
participant Program as "Program"
participant Host as "Host"
participant App as "Application"
Program->>Host : CreateBuilder()
Host->>Host : AddAppSettingsSecretsJson()
Host->>Host : UseAutofac()
Host->>Host : ConfigureAppConfiguration()
Host->>Host : UseSerilog()
Host->>Host : AddApplicationAsync<AuthServerModule>()
Host->>App : Build()
App->>App : InitializeApplicationAsync()
App->>App : RunAsync()

图表来源

  • Program.cs

本节来源

  • AuthServerModule.cs
  • Program.cs

配置文件分析

appsettings.json文件包含了认证服务的关键配置项,这些配置直接影响服务的行为和安全性。

关键配置项

配置项 描述 影响
App.Branding.AppName 应用名称 在UI中显示的品牌名称
App.SslFile SSL证书文件 用于HTTPS通信的证书
App.SslPassword SSL证书密码 证书文件的访问密码
Clock.Kind 时钟类型 时间处理方式(Local/UTC)
Forwarded.ForwardedHeaders 转发头 处理代理服务器转发的请求头
StringEncryption.DefaultPassPhrase 字符串加密密钥 用于数据加密的默认密钥
StringEncryption.InitVectorBytes 初始化向量 加密算法的初始化向量
StringEncryption.DefaultSalt 盐值 密码哈希的盐值
SkyWalking.Enable SkyWalking启用 分布式追踪功能开关
Serilog.MinimumLevel 日志级别 日志记录的最低级别

本节来源

  • appsettings.json
  • appsettings.Development.json

服务注册与发现机制

认证服务通过API网关进行访问,API网关使用YARP(Yet Another Reverse Proxy)实现服务路由和负载均衡。

API网关路由配置

graph TD
subgraph "API网关"
A[客户端请求] --> B{路由匹配}
B --> |/api/account/**| C[accountCluster]
B --> |/api/identity/**| D[identityCluster]
B --> |/api/identity-server/**| E[identityServerCluster]
B --> |/api/feature-management/**| F[feature-management-cluster]
B --> |/api/permission-management/**| G[permission-management-cluster]
B --> |/api/setting-management/**| H[setting-management-cluster]
B --> |/api/localization/**| I[localization-management-cluster]
end
subgraph "服务集群"
C --> J[http://10.21.15.28:44385]
D --> K[http://10.21.15.28:30015]
E --> L[http://10.21.15.28:44385]
F --> M[https://localhost:44353]
G --> N[https://localhost:44353]
H --> O[https://localhost:44353]
I --> P[https://localhost:44353]
end

图表来源

  • yarp.json

内部网关认证配置

graph TD
subgraph "内部网关"
A[AuthServer配置] --> B[Authority: http://127.0.0.1:44385/]
A --> C[ApiName: lingyun-abp-application]
A --> D[SwaggerClientId: ApigatewayHostClient]
A --> E[SwaggerClientSecret: 1q2w3e*]
A --> F[ApiSocpes: lingyun-abp-application]
end
subgraph "字符串加密"
G[StringEncryption] --> H[DefaultPassPhrase: s46c5q55nxpeS8Ra]
G --> I[InitVectorBytes: s83ng0abvd02js84]
G --> J[DefaultSalt: sf&5)s3#]
end

图表来源

  • appsettings.json

本节来源

  • yarp.json
  • appsettings.json

服务启动流程

认证服务的启动流程包括模块预配置、服务配置和应用初始化三个阶段。

启动流程图

flowchart TD
Start([服务启动]) --> PreConfigureServices["预配置服务"]
PreConfigureServices --> PreConfigureWrapper["配置包装器"]
PreConfigureServices --> PreConfigureFeature["配置特性"]
PreConfigureServices --> PreForwardedHeaders["配置转发头"]
PreConfigureServices --> PreConfigureAuthServer["配置认证服务"]
PreConfigureServices --> PreConfigureApp["配置应用"]
PreConfigureServices --> PreConfigureCAP["配置CAP"]
PreConfigureServices --> PreConfigureCertificate["配置证书"]
PreConfigureServices --> ConfigureServices["配置服务"]
ConfigureServices --> ConfigureBranding["配置品牌"]
ConfigureServices --> ConfigureBlobStoring["配置Blob存储"]
ConfigureServices --> ConfigureCaching["配置缓存"]
ConfigureServices --> ConfigureIdentity["配置身份"]
ConfigureServices --> ConfigureVirtualFileSystem["配置虚拟文件系统"]
ConfigureServices --> ConfigureFeatureManagement["配置特性管理"]
ConfigureServices --> ConfigureSettingManagement["配置设置管理"]
ConfigureServices --> ConfigureLocalization["配置本地化"]
ConfigureServices --> ConfigureDataSeeder["配置数据种子"]
ConfigureServices --> ConfigureUrls["配置URLs"]
ConfigureServices --> ConfigureTiming["配置时间"]
ConfigureServices --> ConfigureAuditing["配置审计"]
ConfigureServices --> ConfigureAuthServer["配置认证服务"]
ConfigureServices --> ConfigureMultiTenancy["配置多租户"]
ConfigureServices --> ConfigureJsonSerializer["配置JSON序列化"]
ConfigureServices --> ConfigureMvc["配置MVC"]
ConfigureServices --> ConfigureCors["配置CORS"]
ConfigureServices --> ConfigureDistributedLocking["配置分布式锁"]
ConfigureServices --> ConfigureSeedWorker["配置种子工作器"]
ConfigureServices --> ConfigureSecurity["配置安全"]
ConfigureServices --> OnApplicationInitialization["应用初始化"]
OnApplicationInitialization --> UseForwardedHeaders["使用转发头"]
OnApplicationInitialization --> UseMapRequestLocalization["使用请求本地化映射"]
OnApplicationInitialization --> UseDeveloperExceptionPage["使用开发人员异常页面"]
OnApplicationInitialization --> UseHsts["使用HSTS"]
OnApplicationInitialization --> UseCookiePolicy["使用Cookie策略"]
OnApplicationInitialization --> UseCorrelationId["使用相关性ID"]
OnApplicationInitialization --> MapAbpStaticAssets["映射ABP静态资源"]
OnApplicationInitialization --> UseRouting["使用路由"]
OnApplicationInitialization --> UseCors["使用CORS"]
OnApplicationInitialization --> UseAuthentication["使用认证"]
OnApplicationInitialization --> UseAbpOpenIddictValidation["使用ABP OpenIddict验证"]
OnApplicationInitialization --> UseMultiTenancy["使用多租户"]
OnApplicationInitialization --> UseAbpSession["使用ABP会话"]
OnApplicationInitialization --> UseUnitOfWork["使用工作单元"]
OnApplicationInitialization --> UseDynamicClaims["使用动态声明"]
OnApplicationInitialization --> UseAuthorization["使用授权"]
OnApplicationInitialization --> UseAuditing["使用审计"]
OnApplicationInitialization --> UseAbpSerilogEnrichers["使用ABP Serilog增强器"]
OnApplicationInitialization --> UseConfiguredEndpoints["使用配置的端点"]
OnApplicationInitialization --> End([服务运行])

图表来源

  • AuthServerModule.cs
  • Program.cs

本节来源

  • AuthServerModule.cs
  • Program.cs

依赖关系分析

认证服务依赖于多个外部组件和服务,包括数据库、缓存、消息队列和分布式追踪系统。

graph TD
subgraph "AuthServer"
A[AuthServer] --> B[MySQL]
A --> C[Redis]
A --> D[RabbitMQ]
A --> E[Elasticsearch]
A --> F[CAP]
A --> G[SkyWalking]
end
subgraph "数据库"
B --> H[AuthServer-v70]
B --> I[Platform-v70]
end
subgraph "缓存"
C --> J[Database 10]
C --> K[Database 13]
end
subgraph "消息队列"
D --> L[Exchange: LINGYUN.Abp.Application]
end
subgraph "日志"
E --> M[Index: abp.dev.auditing]
end

图表来源

  • appsettings.Development.json
  • AuthServerMigrationsEntityFrameworkCoreModule.cs

本节来源

  • appsettings.Development.json
  • AuthServerMigrationsEntityFrameworkCoreModule.cs

性能考虑

认证服务在设计时考虑了性能优化,包括缓存策略、数据库连接优化和分布式锁机制。

  • 缓存策略:使用Redis作为分布式缓存,配置了30天的滑动过期时间和60天的绝对过期时间。
  • 数据库连接:使用MySQL作为主数据库,通过Entity Framework Core进行数据访问。
  • 分布式锁:使用Redis实现分布式锁,确保在分布式环境下的数据一致性。
  • 日志记录:使用Serilog将日志输出到控制台和文件,便于问题排查和性能分析。

故障排除指南

当认证服务出现问题时,可以按照以下步骤进行排查:

  1. 检查日志文件:查看Logs目录下的日志文件,特别是Error和Fatal级别的日志。
  2. 检查数据库连接:确保MySQL数据库服务正常运行,连接字符串正确。
  3. 检查Redis服务:确保Redis服务正常运行,连接配置正确。
  4. 检查SSL证书:确保SSL证书文件存在且密码正确。
  5. 检查API网关配置:确保yarp.json中的路由配置正确。
  6. 检查OpenIddict配置:确保OpenIddict的应用程序配置正确。

本节来源

  • appsettings.json
  • appsettings.Development.json
  • yarp.json

结论

认证服务作为微服务生态系统的核心安全组件,通过OpenIddict实现了OAuth 2.0和OpenID Connect协议,为整个系统提供了统一的身份认证和授权服务。服务通过模块化设计、合理的配置管理和完善的依赖关系,确保了系统的可维护性和可扩展性。通过API网关的路由配置,实现了服务的统一访问和负载均衡。未来可以进一步优化性能,增强安全性,并完善监控和告警机制。