Throttling Authentication Attempts
Capacity Throttling
CAS is able to support request rate-limiting based on the token-bucket algorithm, via the Bucket4j project. This
means that authentication requests that reach a certain configurable capacity within a time window may either be blocked or throttled to slow down. This is done to
protect the system from overloading, allowing you to introduce a scenario to allow CAS 120
authentication requests per minute with a refill rate of 10
requests per
second that would continually increase in the capacity bucket. Please note that the bucket allocation strategy is specific to the client IP address.
Enable the following module in your configuration overlay:
1
2
3
4
5
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-throttle-bucket4j</artifactId>
<version>${cas.version}</version>
</dependency>
1
implementation "org.apereo.cas:cas-server-support-throttle-bucket4j:${project.'cas.version'}"
1
2
3
4
5
6
7
8
9
dependencyManagement {
imports {
mavenBom "org.apereo.cas:cas-server-support-bom:${project.'cas.version'}"
}
}
dependencies {
implementation "org.apereo.cas:cas-server-support-throttle-bucket4j"
}
1
2
3
4
5
6
7
8
9
10
dependencies {
/*
The following platform references should be included automatically and are listed here for reference only.
implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}")
implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
*/
implementation "org.apereo.cas:cas-server-support-throttle-bucket4j"
}
The following settings and properties are available from the CAS configuration catalog:
cas.authn.throttle.bucket4j.bandwidth[0].capacity=120
Number of tokens/requests that can be used within the time window.
|
cas.authn.throttle.bucket4j.bandwidth[0].duration=PT60S
Time window in which capacity can be allowed. This settings supports the
|
cas.authn.throttle.bucket4j.bandwidth[0].initial-tokens=
By default initial size of bucket equals to capacity. But sometimes, you may want to have lesser initial size, for example for case of cold start in order to prevent denial of service.
|
cas.authn.throttle.bucket4j.bandwidth[0].refill-count=10
The number of tokens that should be used to refill the bucket given the specified refill duration.
|
cas.authn.throttle.bucket4j.bandwidth[0].refill-duration=PT30S
Duration to use to refill the bucket. This settings supports the
|
cas.authn.throttle.bucket4j.bandwidth[0].refill-strategy=GREEDY
Describes how the bucket should be refilled. Specifies the speed of tokens regeneration. Available values are as follows:
|
cas.authn.throttle.bucket4j.bandwidth=
Describe the available bandwidth and the overall limitations. Multiple bandwidths allow for different policies per unit of measure. (i.e. allows 1000 tokens per 1 minute, but not often then 50 tokens per 1 second).
|
cas.authn.throttle.bucket4j.blocking=true
Whether the request should block until capacity becomes available. Consume a token from the token bucket. If a token is not available this will block until the refill adds one to the bucket.
|