Cloudflare's WAF inspects the POST body of Keycloak's login form and injects an Exposed-Credential-Check header. A custom Keycloak authenticator plugin reads that header — after Keycloak has validated the credentials — and denies the login if the password is breached.
Try a scenario
Exposed-Credential-Check: 1 or 4Why post-credentials check? Denying only after Keycloak confirms the credentials match a real account avoids leaking which usernames exist via the breach check. Wrong passwords fail at the normal step; valid-but-breached passwords fail at the plugin.