apereo/cas · warning
Client IP [ ] is banned
Error message
Client IP [{}] is banned What it means
isIpAddressRejected consults the configured ipAddressIntelligenceService; if it returns null or a result flagged isBanned(), the client IP is treated as banned and authentication is refused with this warning. It is a deliberate IP-reputation-based block, not an internal failure.
Solutions
- Have the client disconnect from VPN/proxy or obtain a different IP
- Whitelist the IP or adjust the IP intelligence service configuration so the address is no longer banned
- Check why the service returns null (connectivity/auth to the risk API); a null result is conservatively treated as banned
Defensive patterns
Strategy: validation
Validate before calling
IPIntelligenceResult r = ipIntel.examine(ctx, ip); if (r == null || r.isBanned()) { /* route to support / use different network */ } Type guard
boolean isIpAllowed(IPAddressIntelligenceService svc, RequestContext ctx, String ip) { var r = svc.examine(ctx, ip); return r != null && !r.isBanned(); } Prevention
- Monitor the IP intelligence service health so null results are rare
- Document a whitelist process for shared NAT IPs
- Alert users about VPN/proxy restrictions
When it happens
Trigger: ipAddressIntelligenceService.examine(requestContext, clientIp) returns null, or returns an IPIntelligenceResult whose isBanned() is true, during isAuthenticationRequestAllowed.
Common situations: Client IP on a threat-intel blacklist (botnet, proxy, Tor exit node); shared corporate/NAT IP with bad reputation; misconfigured IP intelligence service returning null for every address; risk-service outage producing null results conservatively interpreted as banned.
Understand the failure class
Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.
Related errors
- Client [ ] is rejected for authentication based on country…
- No client IP or user-agent was provided. Skipping adaptive…
- Client IP [ ] is rejected for authentication
- User agent [ ] is rejected for authentication
- Client IP [ ] is rejected for authentication because…
AI-assisted analysis of apereo/cas@e7288fc434 (2026-09-08).
Data as JSON: /api/errors/742298c629defb2c.
Report an issue: GitHub.
Appendix: source
Thrown at core/cas-server-core-authentication-api/src/main/java/org/apereo/cas/authentication/adaptive/DefaultAdaptiveAuthenticationPolicy.java:85
}
private boolean isGeoLocationCountryRejected(final GeoLocationResponse finalLoc) {
val rejectCountries = this.adaptiveAuthenticationProperties.getPolicy().getRejectCountries();
return StringUtils.isNotBlank(rejectCountries)
&& RegexUtils.find(rejectCountries, finalLoc.build());
}
private boolean isUserAgentRejected(final String userAgent) {
val rejectBrowsers = this.adaptiveAuthenticationProperties.getPolicy().getRejectBrowsers();
return StringUtils.isNotBlank(rejectBrowsers)
&& RegexUtils.find(rejectBrowsers, userAgent);
}
private boolean isIpAddressRejected(final RequestContext requestContext, final String clientIp) throws Throwable {
LOGGER.trace("Located client IP address as [{}]", clientIp);
val ipResult = ipAddressIntelligenceService.examine(requestContext, clientIp);
if (ipResult == null || ipResult.isBanned()) {
LOGGER.warn("Client IP [{}] is banned", clientIp);
return true;
}
if (ipResult.isRanked()) {
val threshold = adaptiveAuthenticationProperties.getRisk().getCore().getThreshold();
if (ipResult.getScore() >= threshold) {
LOGGER.warn("Client IP [{}] is rejected for authentication because intelligence score [{}] is higher than the configured risk threshold [{}]",
clientIp, ipResult.getScore(), threshold);
return true;
}
}
return false;
}
}
View on GitHub (pinned to e7288fc434)