Apereo CAS 认证失败限流(Authentication Throttling)配置指南
后端认证鉴权单点登录【免费下载链接】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),仅供参考

相关新闻

共模电感与差模电感怎么区分?实物观察加接线判断,5分钟学会

共模电感与差模电感怎么区分?实物观察加接线判断,5分钟学会

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:14:29 阅读更多 →
Flutter鸿蒙适配实战:为蓝牙插件补全OpenHarmony原生实现

Flutter鸿蒙适配实战:为蓝牙插件补全OpenHarmony原生实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:13:28 阅读更多 →
恒比定时甄别器CFD原理与工程实现:从公式推导到PCB布局调测全解析

恒比定时甄别器CFD原理与工程实现:从公式推导到PCB布局调测全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:10:26 阅读更多 →

最新新闻

PostGraphile Refs 完全指南:用 @ref 与 @refVia 智能标签为 GraphQL 类型扩展跨表关系

PostGraphile Refs 完全指南:用 @ref 与 @refVia 智能标签为 GraphQL 类型扩展跨表关系

后端API网关 【免费下载链接】crystal 🔮 Graphiles Crystal Monorepo; home to Grafast, PostGraphile, pg-introspection, pg-sql2 and much more! 项目地址: https://gitcode.com/gh_mirrors/cry/crystal 点击查看 免费下载 PostGraphile 会为数据库…

2026/9/24 8:58:08 阅读更多 →
香橙派Armbian镜像慢?国内高速下载与换源配置全攻略

香橙派Armbian镜像慢?国内高速下载与换源配置全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:58:08 阅读更多 →
x32dbg/x64dbg逆向之反向分析还原c语言代码2

x32dbg/x64dbg逆向之反向分析还原c语言代码2

x32dbg/x64dbg逆向之反向分析还原c语言代码2 1) 反向分析还原c语言函数代码1 咱们接着看下一个哦,记好每次新的知识x64中为啥取值变化了??? rbpE0 rbpE8 rbpF0怎么来的? 0xE8(开辟空间)-0x20(修正值)0x10(2个Push)0x…

2026/9/24 8:58:08 阅读更多 →
国产codex技术发展解析:自主研发智能编码工具的应用前景与突破方向

国产codex技术发展解析:自主研发智能编码工具的应用前景与突破方向

每次找到心仪的外国文献,却被付费墙冷冷地挡在外面,是不是感觉科研的热情瞬间被浇灭?作为学生党,我太懂这种无力感了。但好消息是,通过几个合法且免费的“通道”和技巧,我们完全能实现“文献自由”。今天分…

2026/9/24 8:58:08 阅读更多 →
数据中心建设与方案汇报:从容量计算到评审答辩的全流程避坑指南

数据中心建设与方案汇报:从容量计算到评审答辩的全流程避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:58:08 阅读更多 →
CS1237电子秤AD值乱跳?五个硬件设计避坑指南

CS1237电子秤AD值乱跳?五个硬件设计避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 8:57:07 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →