12 KiB
账户安全策略
**本文档中引用的文件** - [IdentitySettingNames.cs](file://aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain.Shared/LINGYUN/Abp/Identity/Settings/IdentitySettingNames.cs) - [SettingAppService.cs](file://aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs) - [UserSettingAppService.cs](file://aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/UserSettingAppService.cs) - [AccountAppService.cs](file://aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs) - [SecurityLogManager.cs](file://aspnet-core/framework/auditing/LINGYUN.Abp.AuditLogging.EntityFrameworkCore/LINGYUN/Abp/AuditLogging/EntityFrameworkCore/SecurityLogManager.cs) - [MySecurityLogAppService.cs](file://aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/MySecurityLogAppService.cs) - [DefaultTotpService.cs](file://aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/DefaultTotpService.cs)目录
引言
本文档详细阐述了ABP框架中的账户安全策略实现机制。系统提供了全面的安全功能,包括密码强度验证、账户锁定、双因素认证、安全审计等,旨在保护用户账户免受未经授权的访问和攻击。通过灵活的配置选项,管理员可以根据业务需求调整安全策略,确保系统既安全又易于使用。
密码强度策略
系统实现了严格的密码强度策略,通过多维度验证确保用户密码的安全性。密码策略包含长度要求、字符类型要求以及唯一字符数量要求等多个方面。
flowchart TD
Start([开始设置密码]) --> LengthCheck["检查密码长度 ≥ 8"]
LengthCheck --> DigitCheck["检查是否包含数字"]
DigitCheck --> LowercaseCheck["检查是否包含小写字母"]
LowercaseCheck --> UppercaseCheck["检查是否包含大写字母"]
UppercaseCheck --> SpecialCharCheck["检查是否包含特殊字符"]
SpecialCharCheck --> UniqueCharCheck["检查唯一字符数量 ≥ 1"]
UniqueCharCheck --> PeriodicChange["检查是否需要定期更改密码"]
PeriodicChange --> End([密码设置成功])
LengthCheck --> |不满足| Error1[提示: 密码长度不足]
DigitCheck --> |不满足| Error2[提示: 需包含数字]
LowercaseCheck --> |不满足| Error3[提示: 需包含小写字母]
UppercaseCheck --> |不满足| Error4[提示: 需包含大写字母]
SpecialCharCheck --> |不满足| Error5[提示: 需包含特殊字符]
UniqueCharCheck --> |不满足| Error6[提示: 唯一字符数量不足]
Error1 --> End
Error2 --> End
Error3 --> End
Error4 --> End
Error5 --> End
Error6 --> End
图源
- SettingAppService.cs
本节来源
- SettingAppService.cs
- IdentitySettingNames.cs
账户锁定机制
系统实现了智能的账户锁定机制,防止暴力破解攻击。当用户连续多次输入错误密码时,账户将被临时锁定,增加攻击者破解账户的难度。
stateDiagram-v2
[*] --> Active
Active --> FailedAttempt : 登录失败
FailedAttempt --> FailedAttempt : 连续失败
FailedAttempt --> Locked : 达到最大失败次数
Locked --> Unlocked : 锁定时间到期
Unlocked --> Active : 自动解锁
Active --> Success : 登录成功
FailedAttempt --> Success : 登录成功
Success --> Active : 继续活动
note right of Locked
锁定期间所有登录尝试均失败
防止暴力破解攻击
end note
图源
- SettingAppService.cs
本节来源
- SettingAppService.cs
- IdentitySettingNames.cs
双因素认证
系统支持基于TOTP(基于时间的一次性密码)算法的双因素认证机制,为账户提供额外的安全层。用户在登录时除了输入密码外,还需要提供通过身份验证应用程序生成的动态验证码。
sequenceDiagram
participant User as 用户
participant System as 系统
participant Authenticator as 身份验证器
User->>System : 输入用户名和密码
System->>System : 验证凭据
System-->>User : 请求双因素验证码
Authenticator->>User : 生成6位动态码
User->>System : 提交动态验证码
System->>System : 使用TOTP算法验证验证码
alt 验证成功
System-->>User : 允许登录
else 验证失败
System-->>User : 拒绝登录
end
图源
- DefaultTotpService.cs
- AccountAppService.cs
本节来源
- DefaultTotpService.cs
- AccountAppService.cs
密码重置流程
系统提供了安全的密码重置流程,通过手机号验证来确认用户身份,确保只有合法用户才能重置密码。该流程结合了短信验证码和TOTP算法,提高了安全性。
flowchart TD
A([请求密码重置]) --> B["输入注册手机号"]
B --> C["生成TOTP验证码"]
C --> D["发送短信验证码"]
D --> E["用户输入收到的验证码"]
E --> F["验证验证码有效性"]
F --> G{"验证成功?"}
G --> |是| H["生成密码重置Token"]
G --> |否| I["拒绝重置请求"]
H --> J["允许用户设置新密码"]
J --> K["更新用户密码"]
K --> L["记录安全日志"]
L --> M([密码重置完成])
I --> M
图源
- AccountAppService.cs
本节来源
- AccountAppService.cs
- SecurityTokenCacheItem.cs
安全审计日志
系统集成了全面的安全审计日志功能,记录所有与安全相关的操作,包括登录尝试、密码更改、双因素认证状态变更等。这些日志可用于安全分析、故障排除和合规性审计。
classDiagram
class SecurityLogInfo {
+string ApplicationName
+string Identity
+string Action
+Guid? UserId
+string UserName
+string ClientId
+string ClientIpAddress
+string CorrelationId
+DateTime CreationTime
}
class SecurityLog {
+Guid Id
+string ApplicationName
+string Identity
+string Action
+Guid? UserId
+string UserName
+string ClientId
+string ClientIpAddress
+string CorrelationId
+DateTime CreationTime
}
class IdentitySecurityLogRepository {
+Task InsertAsync(IdentitySecurityLog log)
+Task GetListAsync(...)
+Task GetCountAsync(...)
+Task DeleteAsync(Guid id)
}
class SecurityLogManager {
+Task SaveAsync(SecurityLogInfo info)
+Task GetListAsync(...)
+Task GetCountAsync(...)
+Task DeleteAsync(Guid id)
}
SecurityLogInfo --> SecurityLog : 映射
SecurityLog --> IdentitySecurityLogRepository : 存储
SecurityLogManager --> IdentitySecurityLogRepository : 依赖
SecurityLogManager --> SecurityLogInfo : 创建
图源
- SecurityLogManager.cs
- MySecurityLogAppService.cs
本节来源
- SecurityLogManager.cs
- MySecurityLogAppService.cs
会话管理与并发登录控制
系统提供了会话管理功能,支持对用户并发登录行为的控制。管理员可以配置策略,限制同一用户在不同设备上的同时登录数量,增强账户安全性。
本节来源
- IdentitySettingNames.cs
异常登录检测
系统通过安全审计日志和账户锁定机制实现异常登录检测。当检测到短时间内大量失败的登录尝试时,系统会自动触发保护机制,锁定相关账户以防止暴力破解攻击。
本节来源
- SecurityLogManager.cs
- SettingAppService.cs
配置选项与默认值
系统提供了丰富的安全策略配置选项,允许管理员根据组织的安全需求进行定制。以下是主要安全配置项及其默认值:
| 配置项 | 描述 | 默认值 | 类型 |
|---|---|---|---|
| Abp.Identity.Password.RequiredLength | 密码最小长度 | 8 | 数字 |
| Abp.Identity.Password.RequireDigit | 是否需要包含数字 | true | 布尔值 |
| Abp.Identity.Password.RequireLowercase | 是否需要包含小写字母 | true | 布尔值 |
| Abp.Identity.Password.RequireUppercase | 是否需要包含大写字母 | true | 布尔值 |
| Abp.Identity.Password.RequireNonAlphanumeric | 是否需要包含特殊字符 | true | 布尔值 |
| Abp.Identity.Password.RequiredUniqueChars | 所需唯一字符的最小数量 | 1 | 数字 |
| Abp.Identity.Lockout.AllowedForNewUsers | 新用户是否允许被锁定 | true | 布尔值 |
| Abp.Identity.Lockout.MaxFailedAccessAttempts | 最大失败访问尝试次数 | 5 | 数字 |
| Abp.Identity.Lockout.LockoutDuration | 锁定持续时间(分钟) | 5 | 数字 |
| Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword | 是否强制用户定期更改密码 | false | 布尔值 |
| Abp.Identity.Password.PasswordChangePeriodDays | 密码更改周期(天) | 90 | 数字 |
本节来源
- IdentitySettingNames.cs
- SettingAppService.cs
合规性扩展
系统设计考虑了合规性需求,提供了可扩展的安全策略框架。通过自定义安全日志管理器和事件处理程序,可以集成到SIEM(安全信息和事件管理)系统,满足GDPR、HIPAA等法规的审计要求。
本节来源
- SecurityLogManager.cs
- DefaultSecurityLogManager.cs