后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载CAS 提供了一套内建的登录失败限流机制用于限制连续失败的登录尝试从而缓解密码猜测password guessing等暴力破解场景。本指南以 Apereo CAS 官方文档《Throttling Authentication Attempts - Failure》为骨架结合当前仓库中的cas-server-support-throttle与cas-server-support-throttle-core模块源码系统讲解失败限流的核心概念、配置属性、内置策略与高可用部署注意点帮助你在自己的 CAS 部署中正确开启并调优登录失败限流。概述为什么要限制失败的登录尝试公开部署的 CAS 服务几乎必然面临自动化密码猜测攻击。攻击者以固定的频率反复提交登录请求逐一尝试弱口令或常见口令。CAS 的限流throttling机制就是针对这一场景设计的它记录失败的认证尝试并根据预设的失败速率判断当前请求是否来自自动化攻击若是则直接拒绝放行。CAS 提供两种基于内存的跟踪策略Source IP源 IP限制来自同一 IP 地址、针对任意用户名的连续失败登录。Source IP and username源 IP 用户名限制来自同一 IP 地址、针对某个特定用户的连续失败登录。在源码层面这两类策略分别由InMemoryThrottledSubmissionByIpAddressHandlerInterceptorAdapter和InMemoryThrottledSubmissionByIpAddressAndUsernameHandlerInterceptorAdapter实现对应测试见 InMemoryThrottledSubmissionByIpAddressHandlerInterceptorAdapterTests.java测试中以cas.authn.throttle.failure.range-seconds5作为示例配置。核心概念失败阈值速率Failure Threshold Rate所有随 CAS 发行的登录限流组件都通过限制超过阈值的连续失败登录尝试来工作。这个阈值本质上是一个时间速率由两个属性共同定义属性含义threshold允许的失败登录尝试次数数量rangeSeconds上述失败次数所对应的时间窗口秒官方给出的经验值失败速率超过每 3 秒 1 次通常就提示存在自动化认证尝试可以作为限流策略的合理基准。不过文档同时强调制定策略时必须权衡安全性与可用性——过于严苛的策略可能会把合法的认证尝试也挡在门外。阈值速率的计算方式threshold / rangeSeconds。例如threshold1、rangeSeconds3时失败速率即为0.333333。判定某个认证尝试是否应被限流需要比较请求提交速率当前时间与上一次提交时间之差换算成的速率是否超过该失败阈值速率。这一计算逻辑在 AbstractThrottledSubmissionHandlerInterceptorAdapter.java 的afterPropertiesSet()中落地this.thresholdRate (double) throttle.getThreshold() / throttle.getRangeSeconds();。而速率比较发生在calculateFailureThresholdRateAndCompare(...)同文件 L116-L130取最近两次失败记录的时间差换算为每秒速率若大于阈值速率则判定超限。启用限流模块限流功能位于独立的模块中需要在你的配置 overlay 中加入以下依赖implementation org.apereo.cas:cas-server-support-throttle模块的自动装配入口是 CasThrottlingAutoConfiguration.java它通过ConditionalOnFeatureEnabled(feature CasFeatureModule.FeatureCatalog.Throttling)控制装配并在CasThrottlingInterceptorConfiguration中检查配置当cas.authn.throttle.failure.range-seconds 0且threshold 0时注册一个ThrottledSubmissionHandlerInterceptor.noOp()即限流功能不生效。配置属性cas.authn.throttle限流相关配置统一位于cas.authn.throttle命名空间下。本指南聚焦失败限流对应的配置模型为 ThrottleProperties.java、ThrottleFailureProperties.java 与 ThrottleCoreProperties.java。失败限流属性cas.authn.throttle.failure.*属性默认值说明cas.authn.throttle.failure.codeAUTHENTICATION_FAILED写入审计日志的失败动作码一般表示一次认证失败事件cas.authn.throttle.failure.threshold-1阈值速率中的失败尝试次数-1表示未配置配合range-seconds为-1时功能不激活cas.authn.throttle.failure.range-seconds-1阈值速率中的时间窗口秒-1表示未配置cas.authn.throttle.failure.throttle-window-seconds0账号被锁定/限流后需等待多少秒才能继续尝试未指定时按失败阈值速率推算的窗口生效支持 Duration 格式如PT30Sthrottle-window-seconds的生效逻辑见 AbstractThrottledSubmissionHandlerInterceptorAdapter.java 的updateThrottledSubmission(...)当请求被判定为超限时会为该提交记录计算过期时间当前时间 窗口秒数并写回存储在过期前该 key 会一直保持已限流状态见 AbstractInMemoryThrottledSubmissionHandlerInterceptorAdapter.java 的exceedsThreshold(...)。核心属性cas.authn.throttle.core.*属性默认值说明cas.authn.throttle.core.username-parameter空用于从请求中提取用户名的参数名缺省回退为username见源码getUsernameParameterFromRequest的StringUtils.defaultIfBlank(..., username)cas.authn.throttle.core.header-name空用于从请求头提取值的请求头名称cas.authn.throttle.core.app-codeCAS审计日志中标识本应用的代码写入AuditActionContext的appCode字段调度属性cas.authn.throttle.schedule.*限流记录需要定时清理由 CasThrottlingAutoConfiguration.java 中的throttleSubmissionCleaner任务执行对应InMemoryThrottledSubmissionCleaner。属性默认值在ThrottleProperties构造函数中初始化属性默认值说明cas.authn.throttle.schedule.enabledtrue是否启用清理调度任务cas.authn.throttle.schedule.start-delayPT10S启动后延迟10秒开始首次清理cas.authn.throttle.schedule.repeat-intervalPT30S每30秒执行一次清理配置示例# 失败限流阈值3 秒内允许 1 次失败速率 0.333333 cas.authn.throttle.failure.threshold1 cas.authn.throttle.failure.range-seconds3 # 被限流后锁定 30 秒 cas.authn.throttle.failure.throttle-window-secondsPT30S # 从请求参数 username 提取用户名 cas.authn.throttle.core.username-parameterusername cas.authn.throttle.core.app-codeCAS # 定时清理限流记录启动 10 秒后每 30 秒清理一次 cas.authn.throttle.schedule.enabledtrue cas.authn.throttle.schedule.start-delayPT10S cas.authn.throttle.schedule.repeat-intervalPT30SActuator 端点throttles启用限流模块后CAS 会暴露名为throttles的 Actuator 端点用于查看当前被限流的提交记录。端点实现在 ThrottledSubmissionHandlerEndpoint.java由 CasThrottlingAutoConfiguration.java 中的throttledSubmissionHandlerEndpointBean 装配通过ConditionalOnAvailableEndpoint按需启用。可通过以下方式访问# 查看当前被限流的提交记录 curl https://cas.example.org/cas/actuator/throttles内置限流策略Throttling StrategiesCAS 为不同的存储后端提供了多种限流策略各有对应的独立指南文档存储说明IP Address使用内存映射memory map防止同一 IP 地址的连续失败登录IP Address and Username使用内存映射防止同一 IP 地址下针对同一用户名的连续失败登录JDBC见 Configuring-Authentication-Throttling-JDBC.mdMongoDb见 Configuring-Authentication-Throttling-MongoDb.mdRedis见 Configuring-Authentication-Throttling-Redis.mdHazelcast见 Configuring-Authentication-Throttling-Hazelcast.md从源码结构看内存类策略均继承自 AbstractInMemoryThrottledSubmissionHandlerInterceptorAdapter.java其recordSubmissionFailure(...)以构造 keyIP 或 IP用户名→ 存入ThrottledSubmissionsStore→ 通知各ThrottledSubmissionReceiver的方式记录失败exceedsThreshold(...)则先检查已有提交是否仍处于限流窗口内再调用store.exceedsThreshold(key, getThresholdRate())判断是否超速。默认的存储实现是ConcurrentThrottledSubmissionsStore见 CasThrottlingAutoConfiguration.java即文档所说的memory map。限流在请求生命周期中的拦截逻辑理解限流的拦截时机有助于正确排查问题。从 AbstractThrottledSubmissionHandlerInterceptorAdapter.java 的拦截器生命周期可以看到完整链路preHandle(...)先判断请求是否被AuthenticationThrottlingExecutionPlan中的过滤器默认仅拦截 HTTP POST见ThrottledRequestFilter.httpPost()支持若throttleRequest(...)或exceedsThreshold(...)判定超限则调用ThrottledRequestResponseHandler.handle(request, response)拒绝请求返回false。postHandle(...)/afterCompletion(...)当响应状态不是201 CREATED、200 OK、302 FOUND时shouldResponseBeRecordedAsFailure见 L107-L111判定为失败并调用recordSubmissionFailure(request)记录一次失败提交。被限流时还会通过recordAuditAction(request, THROTTLED_LOGIN_ATTEMPT)写入审计日志常量ACTION_THROTTLED_LOGIN_ATTEMPT定义于 L41。对应的行为验证可参考 BaseThrottledSubmissionHandlerInterceptorAdapterTests.java 及 ConcurrentThrottledSubmissionsStoreTests.java。高可用部署注意事项官方明确说明所有限流组件都适用于满足推荐 HA 架构的 CAS 部署详见 High-Availability-Guide.md。但对于负载均衡器后方存在多个 CAS 节点的部署需要重点理解内存策略与分布式策略的差异配置了会话亲和session affinity的多节点部署由于负载均衡的会话亲和通常按源 IP 决定而限流策略同样以源 IP 为判定依据因此来自固定位置的攻击者会在连续多次认证尝试中被绑定到同一个 CAS 节点——此时无论是内存in-memory组件还是基于inspektr的组件都可以正常工作。分布式攻击场景如果连续的请求被不定向地路由到不同节点那么对于内存型组件而言尝试记录会被拆散到 N 个系统上跟踪会变得杂乱无章。不过由于分布式攻击的源 IP 本身就各不相同限流组件假定恒定源 IP作为跟踪前提此时即使精确统计也没有意义。最后需要特别强调的是登录限流组件不足以检测或阻止分布式密码暴力破解攻击。它只能针对恒定来源的自动化尝试如单 IP 的密码猜测提供有效防护对于来自海量分散 IP 的分布式攻击应配合其他安全手段如风控、验证码、外部 WAF 等综合应对。在制定限流策略时请始终权衡安全与可用——过度严苛的策略可能影响合法用户的正常登录。参考资料Configuring-Authentication-Throttling-Failure.md本指南原始文档Configuring-Authentication-Throttling-Capacity.mdConfiguring-Authentication-Throttling-JDBC.mdConfiguring-Authentication-Throttling-MongoDb.mdConfiguring-Authentication-Throttling-Redis.mdConfiguring-Authentication-Throttling-Hazelcast.md赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐ToolJet Table 组件条件样式实战用 cellValue 与 rowData 动态修改单元格文字与背景颜色ToolJet Table 组件条件样式实战用 cellValue 与 rowData 动态修改单元格文字与背景颜色 在 ToolJet 中构建业务仪表盘时后端认证鉴权单点登录LeetCode-Go 题解精讲1689. 拆分最少数量的十-二进制数Deci-Binary NumbersLeetCode Go 题解精讲1689. 拆分最少数量的十 二进制数Deci Binary Numbers 本篇围绕 LeetCode Go 仓库中第后端认证鉴权单点登录Apereo CAS 基于 Groovy 脚本的认证策略Authentication Policy配置指南Apereo CAS 基于 Groovy 脚本的认证策略Authentication Policy配置指南 导读 本文围绕 Apereo CAS 的 cas后端认证鉴权单点登录创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考