{"id":28751224,"url":"https://github.com/dasniko/keycloak-extensions-demo","last_synced_at":"2026-03-13T02:39:11.834Z","repository":{"id":41265390,"uuid":"429087362","full_name":"dasniko/keycloak-extensions-demo","owner":"dasniko","description":"Demos, examples and playground for Keycloak extensions, providers, SPI implementations, etc.","archived":false,"fork":false,"pushed_at":"2026-02-12T15:15:37.000Z","size":706,"stargazers_count":407,"open_issues_count":1,"forks_count":128,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-02-12T23:14:51.632Z","etag":null,"topics":["examples","extensions","iam","java","keycloak","oidc","spi","sso"],"latest_commit_sha":null,"homepage":"http://keycloak-experte.de","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dasniko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":"https://paypal.me/dasniko"}},"created_at":"2021-11-17T14:52:13.000Z","updated_at":"2026-02-12T15:38:42.000Z","dependencies_parsed_at":"2023-12-08T14:57:08.942Z","dependency_job_id":"ed65e924-0a6c-4579-8c59-b3af43893029","html_url":"https://github.com/dasniko/keycloak-extensions-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dasniko/keycloak-extensions-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasniko%2Fkeycloak-extensions-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasniko%2Fkeycloak-extensions-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasniko%2Fkeycloak-extensions-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasniko%2Fkeycloak-extensions-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dasniko","download_url":"https://codeload.github.com/dasniko/keycloak-extensions-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasniko%2Fkeycloak-extensions-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30456117,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T02:22:12.178Z","status":"ssl_error","status_checked_at":"2026-03-13T02:06:49.475Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["examples","extensions","iam","java","keycloak","oidc","spi","sso"],"created_at":"2025-06-16T22:32:11.492Z","updated_at":"2026-03-13T02:39:11.809Z","avatar_url":"https://github.com/dasniko.png","language":"Java","funding_links":["https://paypal.me/dasniko"],"categories":["Java"],"sub_categories":[],"readme":"# Keycloak Extensions Demo\n\nDemos, examples and playground for [Keycloak](https://www.keycloak.org) extensions, providers, SPI implementations, etc.\n\n[![CI build](https://github.com/dasniko/keycloak-extensions-demo/actions/workflows/maven.yml/badge.svg)](https://github.com/dasniko/keycloak-extensions-demo/actions/workflows/maven.yml)\n![GitHub Last Commit](https://img.shields.io/github/last-commit/dasniko/keycloak-extensions-demo)\n![License](https://img.shields.io/github/license/dasniko/keycloak-extensions-demo?label=License)  \n[![Keycloak Version](https://img.shields.io/badge/Keycloak-999.0.0\u0026dash;SNAPSHOT-blue)](https://www.keycloak.org)\n![Java Version](https://img.shields.io/badge/Java-21-f89820)\n[![GitHub Stars](https://img.shields.io/github/stars/dasniko/keycloak-extensions-demo)](https://github.com/dasniko/keycloak-extensions-demo/stargazers)\n[![GitHub Forks](https://img.shields.io/github/forks/dasniko/keycloak-extensions-demo)](https://github.com/dasniko/keycloak-extensions-demo/forks)\n\n\u003eProvided _AS-IS_ - no warranties, no guarantees.  \n\u003eJust for demonstration purposes only!\n\nThis repository contains the following extensions, and probably (most likely 😉) more...\n\n## Extension Modules\n\n### Authentication \u0026 Authorization\n\n- **[MagicLink Authenticator](./magiclink)** - Passwordless authentication via magic link sent to user's email\n- **[Authenticators](./authenticators)** - Collection of various demo authenticators including:\n  - CAPTCHA integration\n  - Deny/block authenticator\n  - MFA implementations\n  - MFA enrollment flows\n  - Redirect authenticators\n  - Registration enhancements\n- **[Conditional Authenticators](./conditional-authenticators)** - Conditional logic for authentication flows based on:\n  - HTTP headers and values (or negated values)\n  - Authentication session notes and values\n  - Custom conditions\n\n### User Management\n\n- **[Flintstones User Provider](./flintstones-userprovider)** - Demo user storage provider with HTTP-based API, supporting read/write operations with the Flintstones family members\n- **[Required Actions](./requiredaction)** - Custom required actions (e.g., MobileNumberRequiredAction for enforcing mobile phone number updates)\n- **[Validators](./validators)** - Custom validation providers for user attributes and forms\n\n### Event Processing\n\n- **[Event Listeners](./event-listener)** - Multiple event listener implementations:\n  - **Highlander** - Session restrictor allowing only the last session to survive (single session per user) - _deprecated_, Keycloak can do this ootb since v23\n  - **LastLoginTime** - Stores most recent login timestamp in user attributes\n\n### Protocol \u0026 Tokens\n\n- **[Token Mappers](./tokenmapper)** - Custom OIDC protocol token mappers (e.g., LuckyNumberMapper)\n- **[Action Tokens](./actiontoken)** - Custom action token implementations for special-purpose links\n\n### APIs \u0026 Integrations\n\n- **[REST Endpoint](./rest-endpoint)** - Custom REST resources within Keycloak with both public and authenticated endpoints\n- **[Custom SMS SPI](./custom-sms-spi)** - Custom SMS provider service provider interface\n\n### Administration \u0026 Operations\n\n- **[Admin UI Extensions](./admin-ui)** - Custom Admin Console UI components and extensions\n- **[Initializer](./initializer)** - Realm initialization and configuration automation, including scheduled tasks\n- **[Scheduled Tasks](./scheduled-task)** - Background task scheduling and cron-based operations\n\n### Communication\n\n- **[Email Provider](./email)** - Custom email templates and senders:\n  - JSON format templates for external service processing\n  - AWS SES integration instead of SMTP\n  - Vendor-specific email protocols\n\n### Security \u0026 Policies\n\n- **[Passwords](./passwords)** - Password policy extensions and custom password validators\n\n### Utilities\n\n- **[Utils](./utils)** - Shared utilities and helper classes used across extensions\n- **[Various](./various)** - Miscellaneous extension examples and experimental features\n\n## Demo Docker Compose Environment\n\nA `docker-compose.yml` is provided for local development and testing with Keycloak. The setup includes:\n\n- **Keycloak** running in development mode with preview features enabled\n- **Remote debugging** available on port 8787\n- **All extension modules** automatically mounted into Keycloak's providers directory\n- **Persistent data** volume for Keycloak data\n\n### Quick Start\n\nBuild all extensions and start Keycloak:\n\n```bash\n./mvnw clean package -DskipTests \u0026\u0026 docker compose up\n```\n\n### Access\n\n- **Keycloak Admin Console**: http://localhost:8080\n- **Admin Credentials**: username `admin`, password `admin`\n- **Remote Debug Port**: 8787\n\n### Included Extensions\n\nAll 18 extension modules are automatically loaded:\n- actiontoken, admin-ui, authenticators, conditional-authenticators\n- custom-sms-spi, email, event-listener, flintstones-userprovider\n- initializer, magiclink, passwords, requiredaction\n- rest-endpoint, scheduled-task, tokenmapper, utils\n- validators, various\n\n\u003e **Note**: No warranties or support provided - use at your own risk for demonstration purposes only!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdasniko%2Fkeycloak-extensions-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdasniko%2Fkeycloak-extensions-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdasniko%2Fkeycloak-extensions-demo/lists"}