feat: 实现登录失败锁定功能
新增了登录失败次数统计和临时锁定机制,包括: 1. 定义登录锁定数据结构和数据库表结构 2. 实现租户级别的锁定状态持久化接口 3. 添加登录速率限制安全策略配置 4. 在登录流程中加入锁定前置检查和失败计数逻辑 5. 提供管理员手动解锁的内部API接口 6. 新增中文本地化的锁定提示文案
This commit is contained in:
@@ -55,7 +55,7 @@ func recordSessionLoginSuccess(s *Session, rec *auth.Rec, scheme, suppliedAccoun
|
||||
}
|
||||
}
|
||||
|
||||
func recordSessionLoginFailure(s *Session, scheme string, secret []byte, rec *auth.Rec, requestID string, cause error, at time.Time) {
|
||||
func recordSessionLoginFailure(s *Session, scheme string, secret []byte, rec *auth.Rec, requestID string, cause error, at time.Time, riskActionOverride ...string) {
|
||||
if s == nil || !s.tenantID.IsValid() {
|
||||
return
|
||||
}
|
||||
@@ -71,6 +71,13 @@ func recordSessionLoginFailure(s *Session, scheme string, secret []byte, rec *au
|
||||
}
|
||||
accountType, account := loginAuditAccount(scheme, suppliedAccount, credential)
|
||||
failureType, reason, riskLevel, riskAction := classifyLoginFailure(scheme, cause)
|
||||
for _, override := range riskActionOverride {
|
||||
if strings.TrimSpace(override) == "" {
|
||||
continue
|
||||
}
|
||||
riskAction = strings.TrimSpace(override)
|
||||
riskLevel = "high"
|
||||
}
|
||||
event := &types.LoginFailureEvent{
|
||||
UserID: uid, AccountType: accountType, AccountHash: hashLoginAccount(account), AccountMask: maskLoginAccount(account),
|
||||
FailureType: failureType, Reason: reason, Detail: truncateAuditValue(loginFailureDetail(cause), 500),
|
||||
|
||||
Reference in New Issue
Block a user