MCPcopy Index your code
hub / github.com/dasniko/keycloak-extensions-demo

github.com/dasniko/keycloak-extensions-demo @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
914 symbols 2,147 edges 150 files 34 documented · 4%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Keycloak Extensions Demo

Demos, examples and playground for Keycloak extensions, providers, SPI implementations, etc.

CI build GitHub Last Commit License
Keycloak Version Java Version GitHub Stars GitHub Forks

Provided AS-IS - no warranties, no guarantees.
Just for demonstration purposes only!

This repository contains the following extensions, and probably (most likely 😉) more...

Extension Modules

Authentication & Authorization

  • MagicLink Authenticator - Passwordless authentication via magic link sent to user's email
  • Authenticators - Collection of various demo authenticators including:
  • CAPTCHA integration
  • Deny/block authenticator
  • MFA implementations
  • MFA enrollment flows
  • Redirect authenticators
  • Registration enhancements
  • Conditional Authenticators - Conditional logic for authentication flows based on:
  • HTTP headers and values (or negated values)
  • Authentication session notes and values
  • Custom conditions

User Management

  • Flintstones User Provider - Demo user storage provider with HTTP-based API, supporting read/write operations with the Flintstones family members
  • Required Actions - Custom required actions (e.g., MobileNumberRequiredAction for enforcing mobile phone number updates)
  • Validators - Custom validation providers for user attributes and forms

Event Processing

  • Event Listeners - Multiple event listener implementations:
  • Highlander - Session restrictor allowing only the last session to survive (single session per user) - deprecated, Keycloak can do this ootb since v23
  • LastLoginTime - Stores most recent login timestamp in user attributes

Protocol & Tokens

  • Token Mappers - Custom OIDC protocol token mappers (e.g., LuckyNumberMapper)
  • Action Tokens - Custom action token implementations for special-purpose links

APIs & Integrations

  • REST Endpoint - Custom REST resources within Keycloak with both public and authenticated endpoints
  • Custom SMS SPI - Custom SMS provider service provider interface

Administration & Operations

  • Admin UI Extensions - Custom Admin Console UI components and extensions
  • Initializer - Realm initialization and configuration automation, including scheduled tasks
  • Scheduled Tasks - Background task scheduling and cron-based operations

Communication

  • Email Provider - Custom email templates and senders:
  • JSON format templates for external service processing
  • AWS SES integration instead of SMTP
  • Vendor-specific email protocols

Security & Policies

  • Passwords - Password policy extensions and custom password validators

Utilities

  • Utils - Shared utilities and helper classes used across extensions
  • Various - Miscellaneous extension examples and experimental features

Demo Docker Compose Environment

A docker-compose.yml is provided for local development and testing with Keycloak. The setup includes:

  • Keycloak running in development mode with preview features enabled
  • Remote debugging available on port 8787
  • All extension modules automatically mounted into Keycloak's providers directory
  • Persistent data volume for Keycloak data

Quick Start

Build all extensions and start Keycloak:

./mvnw clean package -DskipTests && docker compose up

Access

  • Keycloak Admin Console: http://localhost:8080
  • Admin Credentials: username admin, password admin
  • Remote Debug Port: 8787

Included Extensions

All 18 extension modules are automatically loaded: - actiontoken, admin-ui, authenticators, conditional-authenticators - custom-sms-spi, email, event-listener, flintstones-userprovider - initializer, magiclink, passwords, requiredaction - rest-endpoint, scheduled-task, tokenmapper, utils - validators, various

Note: No warranties or support provided - use at your own risk for demonstration purposes only!

Extension points exported contracts — how you extend this code

SmsProviderFactory (Interface)
(no doc) [32 implementers]
custom-sms-spi/src/main/java/dasniko/keycloak/sms/SmsProviderFactory.java
InitializerProviderFactory (Interface)
(no doc) [30 implementers]
initializer/src/main/java/dasniko/keycloak/initializer/InitializerProviderFactory.java
DefaultServerInfoAware (Interface)
(no doc) [2 implementers]
utils/src/main/java/de/keycloak/provider/DefaultServerInfoAware.java
ScheduledTaskProvider (Interface)
(no doc) [1 implementers]
scheduled-task/src/main/java/dasniko/keycloak/timer/ScheduledTaskProvider.java
SmsProvider (Interface)
(no doc) [1 implementers]
custom-sms-spi/src/main/java/dasniko/keycloak/sms/SmsProvider.java
ThrowingConsumer (Interface)
(no doc)
utils/src/main/java/de/keycloak/util/ThrowingConsumer.java
ThrowingFunction (Interface)
(no doc)
utils/src/main/java/de/keycloak/util/ThrowingFunction.java

Core symbols most depended-on inside this repo

get
called by 74
utils/src/main/java/de/keycloak/util/BuildDetails.java
verify
called by 33
passwords/src/main/java/de/keycloak/credential/hash/SHA1HashProvider.java
create
called by 31
initializer/src/main/java/dasniko/keycloak/initializer/InitializerProviderFactory.java
getUsername
called by 25
flintstones-userprovider/src/main/java/dasniko/keycloak/user/flintstones/FlintstoneUserAdapter.java
getConfig
called by 24
utils/src/main/java/de/keycloak/util/AuthenticatorUtil.java
getId
called by 19
flintstones-userprovider/src/main/java/dasniko/keycloak/user/flintstones/repo/FlintstonesApiResourceProvider.java
getName
called by 19
initializer/src/main/java/dasniko/keycloak/initializer/InitializerSpi.java
getName
called by 18
custom-sms-spi/src/main/java/dasniko/keycloak/sms/SmsSpi.java

Shape

Method 761
Class 141
Interface 10
Enum 2

Languages

Java100%

Modules by API surface

identityprovider/src/test/java/dasniko/keycloak/broker/oidc/mapper/ClaimToGroupRoleSyncMapperTest.java32 symbols
flintstones-userprovider/src/main/java/dasniko/keycloak/user/flintstones/FlintstonesUserStorageProvider.java26 symbols
flintstones-userprovider/src/main/java/dasniko/keycloak/user/flintstones/FlintstoneUserAdapter.java25 symbols
flintstones-userprovider/src/main/java/dasniko/keycloak/user/flintstones/FlintstonesApiClient.java22 symbols
identityprovider/src/main/java/dasniko/keycloak/broker/oidc/mapper/ClaimToGroupRoleSyncMapper.java21 symbols
authenticators/src/main/java/dasniko/keycloak/authentication/registration/RegistrationCode.java19 symbols
authenticators/src/main/java/dasniko/keycloak/authentication/deny/DoNotLogin.java18 symbols
flintstones-userprovider/src/main/java/dasniko/keycloak/user/flintstones/repo/FlintstonesRepository.java17 symbols
authenticators/src/main/java/dasniko/keycloak/authentication/registration/CustomRegistrationPage.java14 symbols
requiredaction/src/main/java/dasniko/keycloak/requiredaction/MfaEnrollmentAction.java13 symbols
magiclink/src/main/java/dasniko/keycloak/magiclink/MagicLinkAuthenticatorFactory.java13 symbols
authenticators/src/main/java/dasniko/keycloak/authentication/mfaenrollment/MfaEnrollmentAuthenticatorFactory.java13 symbols

For agents

$ claude mcp add keycloak-extensions-demo \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page