Update Keycloak packages to v26.8.1 #18

Open
renovate wants to merge 1 commit from renovate/keycloak-packages into main
Member

This PR contains the following updates:

Package Type Update Change Age Confidence
quay.io/keycloak/keycloak minor 26.6.0 → 26.8.1 age confidence
org.keycloak:keycloak-parent (source) import minor 26.6.0 → 26.8.1 age confidence

Release Notes

keycloak/keycloak (org.keycloak:keycloak-parent)

v26.8.1

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​50945 [CVE-2026-15943] OIDC identity provider update reuses masked client secret after token URL changes identity-brokering
  • #​51381 [CVE-2026-18569] OIDC broker backchannel logout accepts unsigned forged logout tokens when signature validation is disabled oidc
  • #​52321 [CVE-2026-82968] Persistent wrong-account linking through null / GitHub identity provider identity-brokering
  • #​53057 [CVE-2026-94001] Admin credential DELETE bypasses denied reset-password permission admin/fine-grained-permissions
  • #​53060 [CVE-2026-94000] A delegated admin with only `manage-users` can become `realm-admin` by joining (or being created into) a group that maps an admin role admin/fine-grained-permissions
  • #​53070 [CVE-2026-94218] 2FA setup enforcement bypass via /realms/{realm}/login-actions/restart — #YWH-PGM40475-254 authentication
  • #​53071 [CVE-2026-94215] Cross-realm realm resource read/write via per-request session-level cache in RealmCacheSession admin/api
  • #​53072 [CVE-2026-94213] Missing user view authorization in the Authorization Services policy evaluation endpoint, possible incomplete fix of CVE-2026-37978 authorization-services
  • #​53073 [CVE-2026-94217] UMA scope merge across resource owners via name collision in resolveResourcePermission authorization-services
  • #​53111 [CVE-2026-96446] Security vulnerability in Keycloak 26.7.3 — PAR single-use bypass via prompt=none oidc
  • #​53112 [CVE-2026-96445] Conditional OTP trusts skip headers on untrusted proxy paths authentication
  • #​53158 [CVE-2026-97177] Generic user update bypasses denied reset-password permission admin/fine-grained-permissions
  • #​53159 [CVE-2026-95503] Potential KDC spoofing attack when Kerberos password authentication is enabled authentication
  • #​53160 [CVE-2026-97311] Broken access control in Admin REST API: roles/{role-name}/groups discloses groups the caller cannot view (incomplete fix of the 26.7.2 hardening) admin/api
  • #​53187 [CVE-2026-97846] Standard Token Exchange bypasses required mTLS certificate binding and issues an active bearer token when no client certificate is supplied token-exchange/standard
  • #​53338 [CVE-2026-101333] Unbounded metric series creation via idp tag on broker login endpoint observability
  • #​53388 CVE-2026-91777 com.fasterxml.jackson.core:jackson-databind dependencies
  • #​53393 Multiple CVEs in tools.jackson.core:jackson-databind dependencies
  • #​53419 [CVE-2026-103884] Path traversal via X.509 CRL Distribution Point - client-supplied CRL path escapes $KC_HOME/conf authentication
  • #​53582 Multiple CVEs in simple-git dependencies
  • #​53659 Flaky test: initial-access.spec.ts 'Initial access token' fails with TypeError on table data read admin/ui
  • #​53674 [CVE-2026-107121] SMTP starttls=true permits plaintext credential and message downgrade admin/api

Weaknesses

  • #​49009 DockerEndpoint does not validate invalidRequestMessage after parsing authorization request oidc
  • #​49786 Organizations: Invitation link can be used by multiple users due to missing single-use check organizations
  • #​51312 refresh-vs-revoke race in strict mode (revokeRefreshToken=true) defeats token revocation oidc
  • #​51887 Username enumeration via empty-password timing authentication
  • #​52063 Ensure max consumed respone size is respected for OCSP and CRLs authentication
  • #​52680 Kerberos TRACE logging records complete SPNEGO credentials authentication
  • #​52982 Non-critical X.509 KeyUsage mismatch bypasses authentication policy authentication
  • #​52984 SimpleHttpResponse connection pool leak in identity brokering flows identity-brokering
  • #​53079 Dynamic client registration self-enables privileged SSF event access oidc
  • #​53116 SAML SLO: unauthenticated arbitrary session termination via LogoutRequest (SessionIndex) saml
  • #​53354 SAML broker HTTP-Redirect binding: query-string signature is verified over a different SAMLResponse than the one processed (';' parameter separator) - unauthenticated login as an arbitrary user (ANT-2026-HQ54RPF9) identity-brokering
  • #​53417 FGAP v2 custom role injection via oidc-hardcoded-role-mapper bypasses removeTransientAdminRoles (incomplete fix for CVE-2026-4629) admin/fine-grained-permissions
  • #​53430 Rotated-out client JWKS key and CRL stays valid on all but one node (keys cache invalidation event has no listener) storage
  • #​53494 SimpleHttpResponse: connection pool leak on invalid charset and case-sensitive Content-Encoding check core
  • #​53693 FGAP v2: non-imported LDAP users returned in search results for query-users-only delegated admins admin/fine-grained-permissions

Bugs

  • #​51268 Group members endpoint sometimes returns 200 and empty list instead of 500 when DB is down admin/api
  • #​52139 Client sessions attached to offline user sessions via token exchange are created with OFFLINE_FLAG=0, causing orphaned OFFLINE_CLIENT_SESSION rows token-exchange
  • #​52362 HttpServerUtil.sendResponse drops the headers it is given core
  • #​52449 Organization invite: link in the plain-text part of the email is HTML-escaped and unusable organizations
  • #​52792 Authenticator Reference is incorrectly masked after CVE-2026-16104 fix authentication
  • #​52927 Admin Console "Sign out" on one user session unexpectedly logs out a different, unrelated session for the same user authentication
  • #​53029 Token introspection omits act claim for token-exchange delegation tokens token-exchange
  • #​53142 Realm settings - security defenses admin/ui
  • #​53370 RoleSelect lost its undefined guard on form values, so Permissions → Evaluation crashes when Roles is selected admin/ui
  • #​53467 Flaky Admin UI E2E: 'should add OIDC mapper of type Attribute Importer' times out waiting for navigation ci
  • #​53471 Regression with Trust Email when the userinfo endpoint is used identity-brokering
  • #​53505 Broken link to FIPS documentation docs
  • #​53567 Broken link to vault documentation in downstream docs
  • #​53569 Fix broken link to migrating the database in downstream docs
  • #​53571 Broken link in Operator Guide docs
  • #​53624 Multiple link issues including incorrect names and upstream only coding docs
  • #​53653 Flaky test: Admin UI E2E flows.spec.ts 'sets as default in action menu' fails on Firefox with strict mode violation admin/ui
  • #​53660 Flaky test: main.spec.ts 'Enable/disable help mode in desktop mode' fails with help label still visible admin/ui
  • #​53665 Flaky test: PauseTest.testPause times out on slow runners — no wait for operator readiness ci
  • #​53757 Broken EntityManager API link fails ExternalLinksTest testsuite
  • #​53824 JGroups certificate reload blocks the view handling thread and hides task failures infinispan
  • #​53825 JGroups TCP sends to healthy nodes are blocked by an unreachable node when virtual threads are disabled infinispan
  • #​53856 JsonFileImport198MigrationTest fails: realm certificate expired on 2026-10-12 ci

v26.8.0

Compare Source

Highlights

This release features new capabilities for users and administrators of Keycloak. The highlights of this release are:

  • Issue and verify digital wallet credentials with OID4VCI and OID4VP

  • Automate user provisioning across identity systems with the SCIM API

  • Run multi-cluster deployments without an external cache using stateless mode (now supported)

  • Simpler administration with automatic index creation, reduced memory usage, and enhanced HTTP performance

  • Token exchange delegation for AI agents and automation with consent and FGAP authorization

Read on to learn more about each new feature. If you are upgrading from a previous release, also review the changes listed in the upgrading guide.

Security and Standards

Verifiable Credential Issuance promoted to preview with credential management and revocation

The OpenID for Verifiable Credential Issuance (OID4VCI) feature has been promoted from experimental to preview. It can now be enabled with --features=preview or --features=oid4vc-vci.

Credential lifecycle management now includes revocation when refresh tokens are revoked, and a new Application Initiated Action (AIA) lets users request credential issuance within an authenticated session. Key attestation is configurable in the admin console with hardened x5c certificate validation following the HAIP profile. This release also adds experimental support for the mdoc format, provided by the new experimental feature oid4vc-mdoc. Integration guides for the Lissi and Valera wallets are available, along with documentation for SD-JWT signing key setup, credential management, and revocation.

Example applications are provided in this release (for illustration, not officially supported):

The attestation-based client authentication (client-auth-abca), pre-authorized code grant (oid4vc-vci-preauth-code), REST credential offer endpoint (oid4vc-vci-rest-credential-offer), and OpenID4VP (oid4vc-vp) remain experimental features.

Verify credentials with OID4VP (experimental)

Organizations adopting verifiable credentials need a way to accept credential presentations from digital wallets as part of login flows, without requiring a traditional password.

Keycloak can now act as an OID4VP verifier, enabling authentication flows where users present verifiable credentials from their wallets. The verifier supports cross-device presentation flows and the direct_post.jwt encrypted response mode. Trust material for credential verification can be delegated to an external identity provider by alias, and SD-JWT User Attribute and Session mappers are available to extract claims from presented credentials.

Thanks to Dominik Schlosser for this contribution.

React to account status changes with Shared Signals Framework (experimental)

The experimental Shared Signals Framework (SSF) support now emits RISC account-disabled and account-enabled event types when a user is enabled or disabled, extending coverage beyond the CAEP session and credential events that shipped in 26.7. Additionally, the event structure has been revised for better alignment with the CAEP and RISC specifications, and the admin event store no longer receives unvalidated payloads to prevent PII leakage.

For more details, see the Shared Signals Framework guide.

Parameterized (formerly dynamic) scopes preview support (preview)

Parameterized scopes (formerly known as dynamic scopes) allow clients to pass a parameter value along with the scope name in an OAuth 2.0 authorization request. This is especially useful when a scope represents an entity with a large or dynamic set of values (for example a project name like project:12345), preventing the need to pre-define countless individual client scopes in Keycloak.

Parameterized scopes have officially moved from experimental to preview status.

For more details about the feature, see the Server Administration Guide.

Applications such as AI agents and automation tools need limited, consent-based access to act on behalf of a user without requiring administrator privileges or exposing sensitive credentials.

Users can now delegate access to a client application through OAuth consent using the new delegation:client:<client-id> parameterized scope. The resulting token includes an act claim identifying the client as the actor. Unlike admin-user delegation, client delegation does not grant Admin API access even if the client holds service account credentials, ensuring that a leaked delegation token cannot escalate privileges. The delegation:user and delegation:client client scopes are now auto-created as Optional scopes in all realms, and delegation authorization is controlled exclusively through Fine-Grained Admin Permissions V2 using the delegate and delegate-members scopes. Delegation audit events now include the client identity, and standard token exchange rejects subject tokens carrying delegation claims to prevent bypass. A new client policy executor allows administrators to restrict the may_act claim in access tokens, giving per-client control over which clients can participate in delegation.

Token exchange delegation support status is now preview.

For more details, see the Token exchange delegation section.

Track impersonation across token lifecycle and downstream services

When an administrator impersonates a user, downstream resource servers and audit systems had no reliable way to identify that a token was issued under impersonation or who the impersonator was.

Token lifecycle events (CODE_TO_TOKEN, REFRESH_TOKEN, and others) are now enriched with impersonator and impersonator_id details, providing a complete audit trail across all token operations performed under impersonation. Additionally, tokens issued from impersonation sessions now include the act (actor) claim (RFC 8693 Section 4.1) in both access tokens and ID tokens, allowing downstream resource servers to identify the impersonator. The claim is always present and cannot be disabled.

Secure client cluster node registration

A new client policy executor, secure-client-node-hostname, is available to protect against server-side request forgery (SSRF) via the legacy adapter cluster node registration endpoint (/clients-managements/register-node). A confidential client could previously register an attacker-chosen hostname, which Keycloak would later use as the destination for management callbacks such as logout propagation and push-revocation.

When the executor is attached to a client policy, node hostnames are validated against an administrator-configured list of regex patterns before being persisted. Registrations that do not match any pattern are rejected.

This protection is opt-in and must be explicitly configured to take effect.

Administrators managing deployments that use the legacy adapter node registration feature should add the secure-client-node-hostname executor to a client policy and configure the allowed hostname patterns. Hostname patterns match against DNS hostnames and IPv4 addresses. Port suffixes are always rejected. Patterns are matched against the bare hostname or IP address.

Administration

Declarative client management with Admin API v2 (preview)

The Client Admin API v2, introduced as an experimental feature in Keycloak 26.7, has been promoted to preview. It can now be enabled with --features=preview or --features=client-admin-api:v2.

The API provides strict validation, declarative configuration, and an accurate OpenAPI specification for managing OIDC and SAML clients. It can be consumed through a Java client, an auto-generated JavaScript client, and a CLI, and the Keycloak Operator uses it to manage clients declaratively via the KeycloakOIDCClient and KeycloakSAMLClient custom resources.

The Operator&#​8217;s KeycloakOIDCClient and KeycloakSAMLClient custom resources were also promoted to Preview.

For more details, see the Admin API v2 guide and the Managing Keycloak Clients operator guide. Feedback is welcome!

Client Secret Rotation (supported)

Rotating client secrets in production without downtime required manual coordination and risked service interruptions if the old secret was invalidated before all consumers switched to the new one.

Client Secret Rotation allows confidential clients to rotate their secrets through client policies, keeping up to two concurrently active secrets for seamless rotation without downtime. Administrators can plan the rotation schedule and anticipate when applications need to adopt the new secret, reducing the risk of secret leakage.

In this release, Client Secret Rotation is promoted from preview to supported. For more details, see the Server Administration Guide.

Invite users automatically with workflows

Sending invitation emails to newly created users previously required external automation or a call to the Admin REST API&#​8217;s execute-actions-email endpoint.

The new invite-user workflow step sends an action-token email automatically when a user is created, without requiring external tooling or a custom workflow step provider. Administrators can configure which required actions the user must complete (defaulting to password update and email verification), and optionally specify a client and redirect URI for the post-completion flow.

For details, see the Defining Steps guide.

Thanks to bilkoua for this contribution.

Protocol mapper allow-list for Admin REST API

Client Policies now provide the allowed-protocol-mappers executor to restrict protocol mapper types that can be created or updated through the dedicated Admin REST API protocol mapper endpoints.

SCIM API (supported)

The SCIM (System for Cross-domain Identity Management) API provides a standards-based interface for managing users and groups within a realm. It enables seamless integration with identity management systems and applications that support the SCIM protocol.

In this release, the SCIM API is promoted from preview to supported. The SCIM API received extensive improvements including support for multivalued user attributes, User Profile permissions, Fine-Grained Admin Permissions in search filters, and improved performance for large user bases. For more details, see the Managing users and groups through SCIM documentation.

Configuring and Running

Multi-cluster v2 (supported)

Multi-cluster v2 enables connecting two or more Keycloak clusters without an external Infinispan cluster by using the stateless feature. Session data is stored in the database, simplifying the deployment architecture compared to multi-cluster v1.

In this release, multi-cluster v2 and the stateless feature are promoted from preview to supported. The feature is disabled by default and can be enabled with --features=stateless. A new deployment guide for bare-metal and VM environments is now available alongside the existing Kubernetes guide. For more details, see <@​links.ha id="multi-cluster-v2-introduction" />.

Multi-cluster v1 (deprecated)

Multi-cluster v1 (the multi-site feature) is deprecated and will be removed in a future major release. Multi-cluster v2, which uses the stateless feature, is the recommended replacement. It simplifies the deployment architecture by eliminating the external Infinispan cluster and its cross-site replication.

If you are using --features=multi-site, migrate to --features=stateless. For migration instructions, see Migrating from multi-cluster v1 to v2 in the High Availability Guide.

Support for encrypted PEM files for TLS certificate and private key

Deploying Keycloak with encrypted private keys previously required converting them to an unencrypted format or using a keystore, adding operational complexity.

Keycloak now supports encrypted PKCS#8 private keys in PEM format for HTTPS configuration. Use the new --https-certificate-key-file-password option to provide the decryption password. The management interface also supports this via --https-management-certificate-key-file-password. For details, see <@​links.server id="enabletls"/>.

Login failures now stored in the database

Brute force detection data is now persisted in the database by default, so temporarily locked-out users remain locked out across cluster restarts. Deployments using the multi-site or clusterless features continue to store login failures in the external Infinispan cluster. The previous in-memory behavior is available as login-failures:v1 but is deprecated. For details, see the Upgrading Guide.

First-class CLI options for cluster and node name

The embedded cache cluster name and node name can now be configured with the new --cache-embedded-cluster-name and --cache-embedded-node-name CLI options, replacing the low-level SPI options that were previously required.

By default, the node name is a random value generated on each start, making it difficult to correlate metrics, logs, and JGroups diagnostics across restarts. Setting a stable node name is especially useful for observability tools such as Grafana dashboards and log aggregation.

When deploying with the Keycloak Operator, the node name is now automatically set to the Kubernetes pod name (for example, keycloak-0). For standalone deployments on Kubernetes, set KC_CACHE_EMBEDDED_NODE_NAME using the downward API to inject the pod name. For non-Kubernetes deployments, pass --cache-embedded-node-name=<name> with a value that uniquely identifies each node.

Automatic non-blocking index creation for large tables

When upgrading Keycloak with large database tables, index creation was previously skipped during schema migration to avoid blocking startup. Operators had to create the missing indexes manually.

Keycloak now automatically creates skipped indexes in the background after startup using non-blocking index creation on PostgreSQL, Oracle, MySQL/MariaDB, and supported Microsoft SQL Server editions. Invalid PostgreSQL indexes left by failed previous attempts are detected and recreated automatically. On databases without non-blocking support, Keycloak continues to log the SQL for manual execution.

Vert.x-based outbound HTTP client (experimental)

Keycloak uses the Apache HTTP Client for all outgoing connections to external services such as identity providers, OCSP responders, and backchannel logout endpoints. As Keycloak already runs on Vert.x/Netty for inbound traffic, using a separate HTTP stack for outbound connections adds unnecessary complexity and dependency overhead.

Keycloak now provides an experimental Vert.x-based HTTP client that replaces the Apache HTTP Client with Vert.x/Netty for all outgoing connections. To enable it, start Keycloak with --features=http-client:v2.

When enabled, all outgoing HTTP traffic uses the Vert.x HTTP client. Existing configuration options work the same way.

For more details, see the Configuring outgoing HTTP requests guide.

Helm Chart Operator install (experimental)

Keycloak now releases an experimental Helm chart to install the Operator.

For installation instructions, see the Operator Guide.

Organizations

Shared identity providers across organizations

Identity providers can now be linked to multiple organizations, enabling scenarios such as a single corporate identity provider serving users across different business units or subsidiaries, each represented as a separate organization. Each identity provider link carries its own auto-membership and membership type configuration, allowing fine-grained control over how users are onboarded per organization.

Domain routing has been moved from the identity provider to the domain entity. Each domain can independently specify which identity provider handles authentication and whether users are auto-redirected. The domain gate ensures cross-organization isolation&#​8201;&#​8212;&#​8201;a user is only auto-added to an organization that claims their email domain, even when multiple organizations share the same identity provider.

New identity provider links created after upgrading default to the Unmanaged membership type. Existing links are migrated with the Managed type to preserve previous behavior.

For setup instructions and common configuration patterns, see Common setup recipes in the Server Administration Guide. For migration details, see the Upgrading Guide.

Themes

Redesigned identity provider buttons on the login page

The social identity provider section on the login page has been refreshed with updated icons, a new divider layout, and improved button labels.

If you have a custom login theme, see the Upgrading Guide for details on what changed.

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​50444 [CVE-2026-12388] IdP mapper admin role escalation identity-brokering
  • #​50618 [CVE-2026-14781] OIDC broker applies id_token email_verified to userinfo email, marking unverified addresses as verified oidc
  • #​51865 [CVE-2026-19608] Name-only group claims let same-name groups satisfy path-specific group policies authorization-services
  • #​52168 CVE-2026-54515 CVE-2026-59889 com.fasterxml.jackson.core:jackson-databind 2.22.0 dist/quarkus
  • #​52169 CVE-2026-59903 io.netty:netty-codec-http:4.1.136.Final dist/quarkus

Weaknesses

  • #​47295 LDAP bind credentials sent to new server when connection URL is changed ldap
  • #​49022 SAML ECP endpoint returns inconsistent Content-Type on error responses saml
  • #​49220 Client GET endpoints return raw client secrets to view-clients role holders admin/rbac
  • #​49239 Stop storing client private keys in the database and deprecate generate endpoints admin/rbac
  • #​49242 SMTP masked credential substitution does not verify destination fields haven't changed admin/api
  • #​49610 Document trust boundaries for attribute-based conditions with self-registration enabled workflows
  • #​49784 UserInfo Endpoint: Add null-check for SignatureProvider when validating JWT bearer tokens oidc
  • #​49785 UserInfo Endpoint: Handle malformed Content-Type header gracefully oidc
  • #​50123 Client baseUrl URI-scheme validation missing during realm and partial import admin/api
  • #​50124 OIDC: Inverted return value in `compareSessionIdWithSessionCookie()` backwards-compatibility path oidc
  • #​50131 Client Policies: `allowed-protocol-mappers` enforcement missing for Admin REST API protocol mapper operations admin/api
  • #​50135 OIDC: PAR request URIs stored in single-use cache without realm binding oidc
  • #​50368 OID4VCI: Account API delete endpoint for issued verifiable credentials missing ownership validation oid4vc
  • #​50468 Parameterized Scopes: Pre-authentication username enumeration via username/delegation scope types
  • #​50469 Parameterized Scopes: First-match prefix resolution allows permissive scope to shadow stricter scope
  • #​50470 Parameterized Scopes: CustomRegexScopeType applies admin regex to unbounded attacker input without length cap
  • #​50471 SCIM: Missing lower-bound validation on count parameter in list operations scim
  • #​50473 SCIM: Groups endpoint members operations do not enforce isAdminUser check scim
  • #​50475 SCIM: PATCH operations list has no size limit — missing maxOperations enforcement scim
  • #​50489 Client API v2: Temporary client creation via addClient() shim bypasses realm-level authorization admin/api-v2
  • #​50493 Client API v2: Operator disables TLS hostname verification for admin connection admin/api-v2
  • #​50517 OID4VCI: key_attestations_required not enforced when key_attestation header absent from proof JWT oid4vc
  • #​50518 OID4VCI: Key attestation x5c chain validated against system cacerts with no EKU or revocation oid4vc
  • #​50520 OID4VCI: Unbounded expire parameter on /create-credential-offer allows indefinite pre-auth codes oid4vc
  • #​50521 OID4VCI: getAttestationRequirements() hardcodes proof-type key to jwt ignoring other types oid4vc
  • #​50523 OID4VCI: LD-VC signer fetches remote @​context URLs over HTTP with no allowlist or cache oid4vc
  • #​50524 OID4VCI: User-editable did attribute used as credential subject with realm-local uniqueness only oid4vc
  • #​50533 Identity Broker v2: Wrong-IdP token returned after account-linking due to un-namespaced session note oidc
  • #​50602 Handling HTTP/2 connection coalescing issues originating from wildcard certificates dist/quarkus
  • #​50749 OID4VC JWT proof JWK claim type confusion crashes proof validation oid4vc
  • #​50934 Credential request decryption accepts RSA1_5 for RSA-OAEP-256 encryption keys oid4vc
  • #​50965 URI client-policy executors omit OIDC front-channel logout URI oidc
  • #​50985 SCIM Users filter leaks hidden group membership under FGAP scim
  • #​50986 SCIM Groups filter leaks hidden user membership under FGAP scim
  • #​50987 SCIM reads and filters bypass user-profile view permissions for mapped attributes scim
  • #​50988 Workflow group membership events confuse slash-named groups with nested paths workflows
  • #​50989 Workflow role grant events match client and realm roles by bare name workflows
  • #​50991 SCIM user writes bypass user-profile edit permissions for custom attributes scim
  • #​50999 Same-second refresh-token rotation allows stale token replay oidc
  • #​51109 SD-JWT verification accepts signatures whose algorithm differs from the JWS header oidc
  • #​51127 Persistent User Sessions: cache-miss unconditionally re-hydrates cache from DB, resurrecting deleted sessions storage
  • #​51139 Server info exposes database operational details to view-realm administrators dist/quarkus
  • #​51158 User partial filters ignore ancestor group membership denies admin/fine-grained-permissions
  • #​51211 SAML: Add signature verification for inbound LogoutResponse messages saml
  • #​51212 JOSE: Base64Url decoder throws unchecked exception on padding-only input oidc
  • #​51241 Client update admin events retain private-key attributes admin/api
  • #​51242 Registration access token regeneration stores live bearer tokens in admin events admin/api
  • #​51243 RP-initiated logout can suppress upstream broker logout with forged initiating_idp oidc
  • #​51276 Unrestricted Class.forName() on query parameter in ComponentResource.getSubcomponentConfig admin/api
  • #​51311 Unauthenticated NullPointerException (HTTP 500) on OIDC Dynamic Client Registration PUT via the "scope" field (CWE-476) oidc
  • #​51328 Client type read-only client properties can be bypassed during registration oidc
  • #​51535 Admin API v2 client update does not clean up stale rotated secret attributes admin/api-v2
  • #​51699 Missing security headers on root-path redirect when http-relative-path is configured dist/quarkus
  • #​52013 [OID4VCI] unauthenticated RSA1_5 padding oracle in OID4VCI credential requests oid4vc
  • #​52058 Add warning about dynamic urls to reflect the danger of hostname pollution docs
  • #​52105 OID4VC issued credential deletion not scoped to path user or realm oid4vc
  • #​52106 SAML metadata key cache is not invalidated on client updates saml
  • #​52398 Concurrent completion of one WebAuthn registration ceremony persists multiple passwordless credentials authentication/webauthn
  • #​52400 LDAP password-policy response control parser defects — warning/error tag collision (forced-password-change forgery and suppression) plus uncaught NumberFormatException login failure ldap
  • #​52598 SCIM membership PATCH events omit the changed relationship from audit trail scim
  • #​52599 SCIM legacy query roles infer cross-resource memberships when FGAP is disabled scim
  • #​52640 SCIM Group DELETE bypasses administrative-resource protection through cascade
  • #​52642 SCIM user deletion skips security-state cleanup
  • #​52644 Absence-based completion predicate cannot distinguish consumed from never-persisted events
  • #​52645 Bulk HQL executeUpdate bypasses AsyncCommitIntegrator security classification
  • #​52646 Concurrent failures at brute-force reset boundary can erase newly recorded attempts
  • #​52650 LoginFailureEntity async commit classification can discard failure counters after failover infinispan
  • #​52651 Multi-Cluster v2 RPO "No data loss" conflicts with default async commit of ephemeral data docs
  • #​52664 Password denylist can be bypassed under Turkish locale authentication
  • #​52665 Same-name client role authorizes victim-targeted credential offers via role namespace confusion oid4vc
  • #​52666 Reusing a rotated OID4VCI refresh token repeatedly reissues credential authority oid4vc
  • #​52667 User-editable mapped attribute can extend an SD-JWT credential beyond the issuer-configured lifetime oid4vc
  • #​52668 Credential issuance ignores the administrator-approved attribute snapshot docs
  • #​52669 Unauthenticated credential requests trigger private-key JWE decryption before bearer authentication oid4vc
  • #​52670 Refreshing a stolen targeted offer lets another user bypass offer-required issuance oid4vc
  • #​52671 OID4VCI SD-JWT issuance makes array claims all-or-nothing disclosures oid4vc
  • #​52681 kcadm preserves world-readable permissions on existing config files admin/api-v2
  • #​52684 SCIM search writes raw filter values to debug logs scim
  • #​52691 Token exchange provider routing allows delegation tokens to bypass actor validation via standard exchange token-exchange
  • #​52696 Recovered sites can enforce stale security configuration for up to one hour storage
  • #​52732 [OID4VCI] Make sure that OID4VCI access token usable just for credential endpoint oid4vc
  • #​52919 OID4VCI: Preventing memory leak and adding decompression limit oid4vc
  • #​53166 Realm import resets organization-IdP link policy to permissive defaults identity-brokering
  • #​53307 Identity-provider reads disclose organization links outside the caller's scope identity-brokering

Deprecated features

  • #​44062 Should Kerberos Credential delegation be deprecated?
  • #​51921 Deprecate legacy OIDC client switches from 'OpenID Connect Compatibility Modes' oidc
  • #​52121 Deprecate volatile sessions and allow opting out of session caching
  • #​52923 Deprecate 'Full scope allowed' client switch oidc
  • #​53219 Deprecate other client registration providers than OIDC

Removed features

  • #​51897 Deprecate route from AUTH_SESSION_ID cookie for sticky sessions
  • #​52130 Deprecate clusterless feature
  • #​52480 EOL Keycloak Realm Operator

New features

  • #​16738 Supported client secret rotation
  • #​48899 SSF: Add support for RiscAccountPurged event ssf
  • #​50644 [OID4VP] Support direct_post.jwt (encrypted) response mode authentication
  • #​50876 update admin client tests to use sort and filter

Enhancements

  • #​16947 group.spec.ts does not contain example of how to add attributes while creating groups admin/client-js
  • #​22524 Improve WebAuthn error messages translations
  • #​22962 SAML Responses with Invalid Signatures saml
  • #​27437 Accept encrypted PEM TLS certificate key
  • #​32080 Infinispan: LoginFailures cache should not be unbounded
  • #​40211 Add link to clients in UsedBy hint for auth-flows listing in admin ui admin/ui
  • #​40246 Selecting value in combobox not default listed admin/ui
  • #​43741 Parametrized client_id in the organization invite link and invite token organizations
  • #​44605 Infinispan metrics should not contain a dynamic node label
  • #​44963 PassKey "User verification requirement" error's are not translated translations
  • #​46555 Concurrent Index creation on PostgreSQL and other databases for DB migrations storage
  • #​47921 Account Console: Add per-application session termination on the Applications page account/ui
  • #​47945 Good proxy instructions for a production ready Keycloak setup
  • #​48063 refresh_expires_in is 0 for offline tokens when Offline Session Max Limited is disabled, but server enforces Offline Session Idle oidc
  • #​48216 KeyCloak Admin Client - Support Jackson 3 dist/quarkus
  • #​48349 Upgrade FreeMarker to the most recent version
  • #​48448 DNS Rebinding attacks to create bling SSRF docs
  • #​48847 Update Vale
  • #​49039 Signed JWT - Federated: support managed Kubernetes (EKS, GKE, AKS) via dynamic OIDC issuer discovery identity-brokering
  • #​49044 Better memory management with argon2 dist/quarkus
  • #​49056 Make the Roles field optional on the client Authorization Evaluate tab
  • #​49297 Add `invite-user` workflow step workflows
  • #​49493 [SAST] Restrict direct access to `issuedFor` variable
  • #​49549 Upgrade to Quarkus 3.40 LTS
  • #​49767 Refactor SSF to use keycloak-admin-client and react hook form
  • #​49874 How to create a JFR recording with JDK standard tools observability
  • #​49968 Switch internal HTTP client from Apache to Vert.x/Netty
  • #​50159 Make UuidUnmodified more generic so that we can use it on multiple fields admin/api-v2
  • #​50221 Add default non-endpoint methods to the admin api v2 interfaces as needed for typing
  • #​50695 [OID4VCI] Implement missing HAIP conformance tests oid4vc
  • #​50803 Document the Password Policy SPI in the Server Developer Guide
  • #​50911 Ensure consistent transaction rollback across all error response paths core
  • #​50948 Sorting Applications in Account Console
  • #​50970 Missing index on WORKFLOW_STATE.SCHEDULED_STEP_TIMESTAMP causes full filter scan in getDueScheduledSteps workflows
  • #​50992 Redesign identity provider buttons on the login page login/ui
  • #​51214 Improve runtime when building user representations via User Profile user-profile
  • #​51263 Organization group-by-path endpoint returns a brief representation instead of a full representation organizations
  • #​51273 Upgrade to Quarkus 3.37.4
  • #​51305 Token Exchange Delegation for Clients token-exchange
  • #​51310 Upgrade to Quarkus 3.38
  • #​51359 Complete Identity Provider support in the Test Framework Realm DSL test-framework
  • #​51400 SCIM user serialization creates ~200x more UserProfile instances than necessary
  • #​51402 SCIM search/list executes unconditional COUNT(*) query on every request
  • #​51403 SCIM filter string is parsed twice through ANTLR4 grammar per request
  • #​51413 [CIMD] Resource Indicators with CIMD
  • #​51428 Ensure consistent transaction rollback in SCIM error response paths scim
  • #​51432 Upgrade to Quarkus 3.38.1
  • #​51450 Unify QR code and divider components in the login theme login/ui
  • #​51451 [OID4VP] Improve cross-device login page layout oid4vc
  • #​51455 Unify OTP setup buttons to use shared `buttons` macro login/ui
  • #​51481 Introduce dedicated delegation permission for token exchange delegation token-exchange
  • #​51489 Add actor to impersonation tokens and details to event logs core
  • #​51506 Skip unnecessary provider initialization for non-server commands dist/quarkus
  • #​51528 Authentication events should distinguish primary vs rotated client secret
  • #​51537 Improve help text for admin permissions (FGAP) fields authorization-services
  • #​51676 Distinguish between Login Theme and Account Console for an already existing Mail in Keycloak
  • #​51685 SCIM should also return a forbidden response status for schemas and resourceTypes if the query is present in the request
  • #​51687 SCIM filtered search should leverage the Infinispan entity cache scim
  • #​51701 Store provider.jar mtime in seconds in keycloak-persisted.properties for Quarkus re-augmentation
  • #​51797 Keycloak with jdbc-ping stack failed to create a cluster after the MariaDB restore procedure infinispan
  • #​51808 Retarget quarkus-next to Quarkus 3.39 branch after 3.x branch was dropped
  • #​51851 Avoid contention on IDX_USER_SESSION_EXPIRATION_* indexes on MS SQL/MySQL
  • #​51854 Optimize index sizes for session storage in the database
  • #​51855 Client configuration changes are not propagated between sites infinispan
  • #​51900 Avoid updates to IDX_USER_SESSION_EXPIRATION_LAST_REFRESH on every token refresh
  • #​51938 Upgrade to Quarkus 3.39.0.CR1
  • #​51968 Don't wrap exceptions when running tests remotely in the new test framework
  • #​52012 Extend asynchronous commit optimization to SQL Server and Oracle
  • #​52126 Deprecate in-memory login failures and make persistent login failures the default
  • #​52127 Upgrade to Quarkus 3.39.1
  • #​52268 Organization authenticator drops the typed username when falling through to the default identity-provider-redirector (no login_hint)
  • #​52356 Upgrade to Quarkus 3.39.2 dist/quarkus
  • #​52722 Upgrade to Infinispan 16.0.15
  • #​52943 Upgrade to Quarkus 3.40.0.CR1
  • #​52988 Cache parsed theme resource declarations to avoid re-parsing them on every login page render login/ui
  • #​52992 Cache the resolved max-length configuration for OIDC request parameters oidc
  • #​52994 Avoid building the WebAuthn trust verifier on every login login/ui
  • #​53010 MCP Documentation for 26.8
  • #​53211 Add session bucket and coarse-grained timestamp to ROOT_AUTH_SESSION for reduced index contention storage
  • #​53242 SAML broker: IdP-initiated logout fails with HTTP 500 and is rolled back when the IdP has no single logout service URL identity-brokering

Bugs

  • #​41394 Flow steps back when changing locale or refreshing page (Regression of #​30520 / #​30644) authentication
  • #​41433 After update from 26.0 to 26.1 extent account theme keycloak.v3 is not working for custom components account/ui
  • #​44832 User creation problem with default groups defined, with identity provider and federated openldap ldap
  • #​47482 [quarkus-next] ConcurrentModificationException in parallel Quarkus build steps dist/quarkus
  • #​48043 [OID4VCI] c_nonce Replay oid4vc
  • #​48188 [OID4VCI] Issuance with Authorization Code Flow assumes same client_id for offer creation and redemption oid4vc
  • #​48858 'view-clients' bypasses 'view-users' restriction via 'client-scoped' endpoints admin/fine-grained-permissions
  • #​49077 NullPointerException in ResourceIndicatorsPostProcessor when access token audience is null oidc
  • #​49236 SSF: Client scopes ssf.read and ssf.manage not created when SSF enabled for existing realm ssf
  • #​49731 Creating a new realm from json using kcadm gives a PK violation on KEYCLOAK_ROLE despite it only being defined once in the JSON. storage
  • #​49891 [OID4VCI] CNF is not included in sd-jwt when number_of_decoys is not explicitly configured oid4vc
  • #​49964 Malformed Content-Type header causes HTTP 500 on token endpoints instead of RFC 6749 §5.2 compliant 400 authorization-services
  • #​50110 Keycloak doesn't honor `--https-trust-store-type` when automatically creating the Trust Store core
  • #​50178 Scope-based permission accepts a scope not associated with the selected resource (Admin REST API) authorization-services
  • #​50190 Admin Console: saving attributes fails when the attribute key is "constructor", "toString", or another Object.prototype name admin/ui
  • #​50209 LifeSciences Login does not work anymore in Keycloak version 26.6.3 authentication
  • #​50228 SearchQuery.getFields() exceptions admin/api
  • #​50362 [CIMD] Claude Desktop authentication rejected by Keycloak: jwt-bearer grant type incompatible with public client oidc
  • #​50535 Admin UI: Resource search does not work in Authorization Evaluate “Resources and Scopes - Key” selector admin/ui
  • #​50590 ConcurrentModificationException in OrganizationAdapter.setAttributes on concurrent PUT /organizations/{id} organizations
  • #​50596 User federation synchronizations will always evict all users of a realm from the users cache storage
  • #​50629 REVOKE_GRANT_ERROR prevents logout except when account console is open in another tab oidc
  • #​50684 SAML broker artifact binding fails to validate signed nested Response inside ArtifactResponse: Cannot resolve element with ID saml
  • #​50687 UI shows inherited role as non-inherited when the same role is also assigned manually admin/ui
  • #​50691 Email not lowercased in "Always Read Value From LDAP" delegate (incomplete fix from #​43254) ldap
  • #​50694 Nightly Conformance tests are failing oid4vc
  • #​50700 Exporting a realm with users says it needs file parameter, which is provided admin/cli
  • #​50720 Trusted SSF event emission persists verbatim event payload in admin events ssf
  • #​50788 Putting --optimized before command gives confusing error message dist/quarkus
  • #​50791 NPE thrown on null secret in AbstractOauth2IdentityProdivder authentication
  • #​50796 ClientManager.isInternalClient checks only for "master" realm core
  • #​50800 SCIM: query-users role returns empty Resources array despite correct totalResults scim
  • #​50807 Dynamic client registration: "scope" member in the request suppresses realm default client scopes on the created client oidc
  • #​50812 Synthetic SSF emit accepts mismatched user and tenant subjects when only the tenant is subscribed ssf
  • #​50813 Keycloak does not apply connect timeout when Oracle runs in XA mode dist/quarkus
  • #​50845 Duplicate of #​46382, #​46178, #​46433 : reporting because none were actually fixed for this case. admin/client-js
  • #​50854 NPE in executor configuration validation
  • #​50860 Empty or null description causes duplicate "Allowed field:" admin/api
  • #​50877 [DOC] FGAPv2: Clarify that manage scope on users and manage-members on group include creating users admin/fine-grained-permissions
  • #​50907 [kcw] `kcw dev` greps incorrect Keycloak version
  • #​50944 Flaky Admin UI E2E test: `initial-access.spec.ts` ci
  • #​50975 Admin UI E2E test failures - SSF Stream ssf
  • #​50994 Flaky admin UI tests admin/ui
  • #​51004 Legacy OIDC broker token exchange accepts ID tokens issued to a different audience identity-brokering
  • #​51018 Typo in "Integrating with Model Context Protocol (MCP)" (mcp-authz-server.adoc) docs
  • #​51064 Flaky test: org.keycloak.testsuite.forms.BrowserFlowTest#testUserWithOneAdditionalFactorOtpSuccess ci
  • #​51073 Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTestWithAuthSessionExpiredAndRequiredAction ci
  • #​51074 Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTestWithAuthSessionExpiredInTheMiddle ci
  • #​51075 Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTestWithAuthSessionExpiredAndRefreshInTab1 ci
  • #​51076 Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTest ci
  • #​51100 Recovery codes have numeric input field despite alphanumeric codes being generated login/ui
  • #​51113 Usage of second class configuration may not be masked in show-config dist/quarkus
  • #​51123 Logout fails when IdP is disabled identity-brokering
  • #​51128 PreparedStatement can have at most 65,535 parameters storage
  • #​51137 Token exchange and JWT grants ignore use-lightweight-access-token policy token-exchange
  • #​51146 Test Authentication fails after correcting LDAP connection URL until configuration is saved ldap
  • #​51153 SCIM filter parentPath not saved/restored in visitValuePath, breaks nested valuePath scim
  • #​51155 SCIM PATCH does not enforce attribute mutability scim
  • #​51156 SCIM PATCH NPE when request body contains "schemas": null scim
  • #​51169 Flaky test: org.keycloak.testsuite.forms.RecoveryAuthnCodesAuthenticatorTest#test09recoveryAuthnCodesWithThresholdConfigured ci
  • #​51187 [OID4VCI] Handling of realm optional client scopes oid4vc
  • #​51191 OID4VPVerifierTestBase failure in CI testsuite
  • #​51201 Labeler fails to set the version in the main branch ci
  • #​51213 Admin API v2: SAML string-attribute mapper does not remove attributes on explicit null or omission saml
  • #​51253 Do not pass the client for Delegation parameterized scope type admin/fine-grained-permissions
  • #​51256 Flaky test: org.keycloak.testsuite.webauthn.registration.passwordless.PwdLessOtherSettingsTest#apiInvalidStateErrorMessage ci
  • #​51262 Unable to select authorization scopes beyond the first 100 in Scope-Based Permissions admin/ui
  • #​51269 LDAP Enabled switch remains interactive for users with view-realm only admin/ui
  • #​51330 Account already existed page button has no gap and no hover on effect account/ui
  • #​51347 [OID4VCI] Incorrect metadata for key_attestations_required oid4vc
  • #​51352 Better server error message and handling if email sender is disabled in configuration admin/api
  • #​51361 InvalidPathException when running test cases in embedded mode on Windows dist/quarkus
  • #​51372 Admin Console: changing the search term while on a later page keeps the old page offset and shows no results admin/ui
  • #​51396 `truststore-paths` certificates are ignored by `FileTruststoreProviderFactory`: it silently falls back to the JDK `cacerts` because it is initialized before `TruststoreBuilder` dist/quarkus
  • #​51398 Pin resolved identity to prevent consent transfer on user recreation token-exchange
  • #​51401 SCIM filter predicates handle case-insensitive matching incorrectly scim
  • #​51415 Workflow add-required-action does not allow all available required actions workflows
  • #​51423 [UX] account console nav on mobile not closing after selecting a page account/ui
  • #​51437 Enabling parameterized-scopes breaks the built-in organization: scope oidc
  • #​51496 Deleting a user attribute deletes all custom message localizations of default language en admin/ui
  • #​51498 Admin console Realm Settings delete uses display name instead of realm name (regression from #​48084) admin/ui
  • #​51512 Flaky test: org.keycloak.testsuite.webauthn.registration.AuthAttachmentRegisterTest#authenticatorAttachmentPlatform ci
  • #​51525 SCIM filtered PATCH remove deletes all values for multivalued extension attributes scim
  • #​51527 Admin v2 API PATCH bypasses client secret rotation policy admin/api-v2
  • #​51531 Composite realm role mappings endpoint does not scale with the number of realm roles — the #​47157 fix was applied only to the client variant admin/api
  • #​51536 TypeError crash in Evaluation tab when selecting "Group" resource type authorization-services
  • #​51550 @​InjectSysLogServer from test-framework does not work with defaults anymore testsuite
  • #​51552 Refresh Token Introspection oidc
  • #​51559 SPNEGO mutual authentication response token is not returned after successful login authentication
  • #​51571 SSF: Missing event details during user logout trigger NPE ssf
  • #​51590 SCIM: organization groups exposed via the groups attribute on Users scim
  • #​51600 Flaky test: org.keycloak.testsuite.broker.KcOidcBrokerTest#loginWithExistingUserWithBruteForceEnabled testsuite
  • #​51614 SCIM Users groups filter does not exclude organization groups scim
  • #​51620 Migrate remaining login pages have no override in the keycloak.v2 theme account/ui
  • #​51674 Keycloak's password length policy isn't triggered when changing password in FIPS mode authentication
  • #​51682 Exceptions in Kubernetes federated-client-authentication signature verification are silently swallowed with no default-level log trace identity-brokering
  • #​51690 [OID4VCI] Labels for OID4VCI events missing in the admin console oid4vc
  • #​51692 [OID4VCI] Some error events not reported oid4vc
  • #​51757 Base implementation of AbstractModelSchema.getAttributeMappers is keyed by model attribute name scim
  • #​51769 Dutch translation for linkExpirationFormatter produces duplicated value ("12 12 uur") translations
  • #​51796 Scim complex type attributes are forced to be case-insenitive scim
  • #​51853 Keycloak Admin Client fails on JS CI testsuite
  • #​51913 [quarkus-next] Helm chart CI jobs fail due to missing Quarkus snapshot cache restore dist/quarkus
  • #​51934 EXECUTE_ACTION_TOKEN : event impossible to save workflows
  • #​51943 AdditionalHelmTemplateBuildItem class is sometimes missing thought to random order of Helm dependencies operator
  • #​52041 [OID4VCI] mdoc not properly configurable in admin console client scope tab oid4vc
  • #​52087 Regression: resource_access claim becomes empty {} when populated via User Attribute mapper with JSON value (since 26.7.1) core
  • #​52103 Log injection via unsanitized client_id in OIDC logout endpoint oidc
  • #​52147 SCIM resource ID phishing scim
  • #​52157 Organization invitation fails with invalid_redirect_uri when the organization has no Redirect URL configured organizations
  • #​52166 Client-side password policy validation does not treat underscore _ as a special character authentication
  • #​52167 Securing Client Cluster Node Registration via Client Policy Executor authentication
  • #​52181 Organization invitation is lost when the invitee signs up with a realm-level identity provider organizations
  • #​52186 Fix missing arguments in HardcodedLDAPRoleStorageMapper warning log ldap
  • #​52188 Fine-Grained Admin Permissions v2: Cannot view a user who belongs to a group without "view" permission on that group admin/fine-grained-permissions
  • #​52190 [OID4VCI] Cannot unset values when configuring OID4VCI credential scope oid4vc
  • #​52197 Admin API v2 returns plaintext client secret to view-clients role holders admin/api
  • #​52206 User Profile settings allow mapping multiple attributes to the same SCIM attribute scim
  • #​52207 User creation via SCIM API does not enforce User Profile "required" validation for core user schema attributes scim
  • #​52208 SCIM User Partial Update Allows Removing Required User Profile Attributes scim
  • #​52219 Duplicate English text in generateKeysDescription message key admin/ui
  • #​52223 SCIM API allows updating username even when the Edit username setting is disabled scim
  • #​52224 SCIM API allows removing username despite it being required scim
  • #​52229 SCIM API does not enforce User Profile validators scim
  • #​52230 Missing detailed audit information in group / relam role operatons admin/ui
  • #​52285 Unsafe workflow pattern in labeler ci
  • #​52287 Workflows: notify-user email template hardcodes English text, so notifications cannot be fully translated workflows
  • #​52338 DatabaseIndexCheckerTest.testDetectsAndRecreatesInvalidIndexOnPostgresql fails on Aurora testsuite
  • #​52378 Admin REST OpenAPI schema types groups-in-role responses as UserRepresentation admin/api
  • #​52396 Organization missing from the login form model on the invitation confirm-membership page organizations
  • #​52421 [OID4VCI] Server-side validations for "Supported proof types" and "Cryptographic binding methods" oid4vc
  • #​52441 DPoPBindEnforcerExecutor requires DPoP on client create/update, defeating its own refresh-token-only binding option oidc
  • #​52475 Admin console crashes with a raw TypeError when a group request returns 404 admin/ui
  • #​52491 Integer overflow in OIDC re-auth max_age comparison (OIDCLoginProtocol) oidc
  • #​52497 Flaky operator test: KeycloakDeploymentTest.testDeploymentDurability fails with "already exists" operator
  • #​52502 Flaky test: org.keycloak.testsuite.forms.BruteForceTest#testExceedMaxTemporaryLockouts authentication
  • #​52506 Operator CI jobs missing Maven cache restore — dependency download failures ci
  • #​52568 ResourceIndicatorsPostProcessor error does not log appropriate error event oidc
  • #​52574 Regression in 26.7.0: DefaultClientSessionContext.getScopeString() no longer attaches "openid" scope on token refresh when the client omits it from the request oidc
  • #​52580 ClosingStream does not close underlying stream when terminal operation throws an exception core
  • #​52583 HHH90010101 warning logged during SCIM concurrent requests due to orphaned Hibernate before-completion callbacks scim
  • #​52586 HHH100503 INFO message logged during concurrent SCIM requests after constraint violation core
  • #​52587 Organization group: removeMember should fail when user is not a member organizations
  • #​52610 Stateless JPA providers: race condition between INSERT ON CONFLICT DO NOTHING and concurrent DELETE storage
  • #​52611 Cluster event poller: uncaught ClassCastException on malformed event data storage
  • #​52612 JpaRevokedTokenProvider uses deprecated Time.currentTime() (int) instead of Time.currentTimeSeconds() (long) storage
  • #​52647 First cluster-readiness probe returns UP before asynchronous CP check completes
  • #​52654 Unable to re login after deleting the Identity Provider configurations identity-brokering
  • #​52659 BruteForceTest.testCacheExpiryForTemporaryLockout test is failing after switch to persistent login failures authentication
  • #​52673 SCIM Group PUT overwrites externalId despite schema declaring it immutable scim
  • #​52675 SCIM Groups endpoints expose and modify service-account membership scim
  • #​52676 CVE-2026-4633 User enumeration via identity-first login when Organizations feature is enabled organizations
  • #​52706 NO_PROXY entries with leading dots or spaces after commas silently fail dist/quarkus
  • #​52710 Test framework silently ignores database reuse when testcontainers reuse is not enabled test-framework
  • #​52714 Flaky operator tests: testDeploymentDurability and testDeploymentUpgrade fail with 409 due to leftover StatefulSet operator
  • #​52720 JWT Authorization Grant cannot be configured with Organization-linked IdPs admin/ui
  • #​52761 Consent screen returns HTTP 500 for a user in more than one organization (regression in 26.7.0) organizations
  • #​52767 Admin Console: Client scopes Evaluate tab does not refresh generated tokens when the user changes admin/ui
  • #​52785 Device flow does not throw error if scope parameter contains a scope not permitted for client oidc
  • #​52798 NullPointerException when POSTing null payload to /admin/realms/{realm}/groups admin/api
  • #​52804 Flaky test: org.keycloak.tests.webauthn.registration.passwordless.PwdLessOtherSettingsTest#apiNotAllowedErrorMessage authentication/webauthn
  • #​52831 Disabled organization set on session context during broker login callback organizations
  • #​52913 [quick-theme] Login Page Preview stylesheet URL omits the http-relative-path prefix admin/ui
  • #​52915 #​46367 regression in user provider sync behavior storage
  • #​52938 Admin UI: IdP organization login switches always persisted as false organizations
  • #​53002 Client roles are not displayed in "Effective role scope mappings" in Client Scope Evaluate admin/ui
  • #​53013 FGAP v2: creating a user into a group via manage-members + manage-membership also requires the undocumented "view" scope on that group docs
  • #​53034 GrantTypeCondition misses some event types authentication
  • #​53100 Organizations: malformed domain in login username (e.g. user@example;com) causes unhandled ModelValidationException ('Invalid domain format') organizations
  • #​53106 WARN [io.quarkus.deployment.index.IndexWrapper] (build-44) Failed to index void: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@66ce957f dist/quarkus
  • #​53107 SSF discovery document (.well-known/ssf-configuration) omits /realms/{realm} path when realm frontendUrl is set ssf
  • #​53117 signingCertificate handling in v2 admin/api
  • #​53138 MayAct executor rejects valid delegation when the scope parameter is not the exact stored username token-exchange
  • #​53140 Skips the ClientID binding checks when the claim is not a string token-exchange
  • #​53154 prompt=none returns login_required for organization members without local credentials when the broker has "Redirect when email domain matches" organizations
  • #​53163 Upgrade migration can attach a stale IdP route to another organization's domain identity-brokering
  • #​53176 Missing manage-organizations permission check for org group mappers organizations
  • #​53188 Single-valued organization mapper emits an attacker-selected non-member organization identity-brokering
  • #​53220 Admin Console user picker (UserSelect) sends username= contains search, producing leading-wildcard LDAP filters that time out on large directories admin/ui
  • #​53252 Admin UI IdP mapper tests are flaky: clickSaveMapper clicks Cancel before the save request is sent admin/ui
  • #​53253 IdentityProviderModel removed getOrganizationId() method organizations
  • #​53290 Organization group representations leak client/realm role metadata to unauthorized admins organizations
  • #​53335 SCIM user PUT/PATCH bypass the user cache: active=false via SCIM does not disable the user for logins scim

v26.7.5

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​50996 [CVE-2026-16103] Incomplete fix for CVE-2026-9798 (Keycloak CIBA brute-force lockout bypass at token redemption) oidc
  • #​51278 [CVE-2026-18206] Client policy source-host wildcard domains match non-subdomain suffixes oidc
  • #​51280 [CVE-2026-18203] Group policy child-extension matches sibling group path prefixes authorization-services
  • #​51281 [CVE-2026-18207] Source-group condition matches duplicate group names and can skip negative-logic enforcement oidc
  • #​51284 [CVE-2026-18208] Inactive out-of-audience introspection responses can include a signed JWT claim oidc
  • #​51285 [CVE-2026-18211] Secure-client-uris localhost exception accepts localhost-prefixed attacker domains oidc
  • #​51781 [CVE-2026-18217] SAML Redirect Binding Parameter Pollution saml
  • #​52531 CVE-2025-66021 com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer dependencies
  • #​52692 [CVE-2026-89298] Confidential client secret disclosed to view-clients role via Client Registration GET oidc
  • #​52783 [CVE-2026-88770] Device Authorization Grant issues tokens to brute-force-locked accounts (sibling of CVE-2026-9798) oidc
  • #​52888 CVE-2026-84939 org.freemarker:freemarker
  • #​52972 CVE-2026-8798 org.bouncycastle:bc-fips dependencies
  • #​52974 CVE-2026-13505 org.bouncycastle:bc-fips dependencies
  • #​53074 [CVE-2026-93999] Keycloak 26.7.2: token-exchange refresh continues issuing tokens for a disabled audience client token-exchange

Weaknesses

  • #​51340 DCR: Registration access token allows protocol switch from OIDC to SAML oidc
  • #​53024 check-licenses.sh: shell injection via source of dependency pom.properties

Enhancements

  • #​52357 Upgrade to Quarkus 3.33.4 dist/quarkus

Bugs

  • #​50739 keycloak 26.7.0 sha1 file is missing dist/quarkus
  • #​50903 Missing input length validation on username field causes outsized log generation in /login-actions/authenticate authentication
  • #​51065 Flaky test: org.keycloak.testsuite.oauth.ClientAuthPostMethodTest#testPostAuthenticationNotAllowedWhenBasicRequested ci
  • #​51067 Flaky test: org.keycloak.testsuite.oauth.ClientAuthPostMethodTest#testBasicAuthenticationNotAllowedWhenPostRequested ci
  • #​51304 Upgrade to 26.7.0 crashes under several tested scenarios. LazyInitializationException on non-deterministic getRealmsStream() order after DB dump/restore. infinispan
  • #​51761 PAR request URI lifespan is used as a hard cap on interactive login duration oidc
  • #​51778 [quarkus-next] BouncyCastle 1.85 breaks SAML client creation when client ID exceeds 64 characters dist/quarkus
  • #​52033 Improve retrieval of large read-only resources via admin API storage
  • #​52088 New Infinispan node joining the cluster becomes a command target/coordinator before its cache components are ready - ISPN000136 failures during Keycloak rolling restarts infinispan
  • #​52153 DEBUG logging breaks persistent client session locking storage
  • #​52193 Identity Provider Mappers - organization group targets do not resolve organizations
  • #​52257 Event listeners receive the wrong event type when an EventBuilder is reused (e.g. FEDERATED_IDENTITY_LINK is logged and emailed as LOGIN) core
  • #​52309 Admin Permissions filtering is applied to organization lookups during end-user authentication organizations
  • #​52327 surefire-junit-platform not cached, causing intermittent test failures in CI ci
  • #​52329 Flaky test: FlowTest.testRemoveExecutionSubflow fails with stale DELETE admin event testsuite
  • #​52331 Flaky SCIM FilterTest.testFilterGroupsByMetaTimestamps due to same-millisecond timing saml
  • #​52415 Flaky test: WebAuthnTransportLocaleTest.localizationTransportInternal fails with "Cannot logout user" testsuite
  • #​52423 Flaky test: MySQLDistTest fails with "process hasn't exited" on slow CI runners testsuite
  • #​52428 Flaky test: AttackDetectionResourceTest due to DefaultBlockingBruteForceProtector concurrent login blocking authentication
  • #​52433 Flaky test: registration-policies.spec.ts kebab menu "Delete" item not found after toggle click testsuite
  • #​52435 Flaky test: timeout.spec.ts fails with "fetch failed" due to server not ready and hardcoded port testsuite
  • #​52460 Remove azure-cli version pin after runner image update removes apt source ci
  • #​52487 Managing Identity Providers in the admin UI now requires client roles in the realm admin/ui
  • #​52490 Flaky Admin UI E2E test: "Should show items on next page" in scope.spec.ts ci
  • #​52493 AuroraDB IT - Create EC2 runner instance fails: RHEL 9.4 AMI deregistered ci
  • #​52712 WebAuthnPolicyComplianceTest.replayedCredentialRegistration is flaky due to missing sync point authentication
  • #​52716 Flaky CI: junit-jupiter-engine not in Maven cache causes transient test failures ci
  • #​52868 Flaky test: RecoveryAuthnCodesAuthenticatorTest#test07SetupRecoveryAuthnCodes on Chrome testsuite
  • #​53054 ServerConfigClassOrderer comparator violates Comparable contract causing flaky CI failures testsuite
  • #​53069 Format string mismatches in logging statements cause silent argument loss and potential MissingFormatArgumentException core

v26.7.4

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​52834 [CVE-2026-90997] Default MySQL/MariaDB row counts make stateless replay gates accept reused artifacts
  • #​52835 [CVE-2026-79651] Keycloak Unauthenticated Denial of Service via Unbounded Locale Caching
  • #​52836 [CVE-2026-74909] Incomplete fix: percent-encoded semicolon bypasses matrix parameter stripping in PathMatcher
  • #​52837 [CVE-2026-19607] Username Takeover Leading to Account Lockout
  • #​52838 [CVE-2026-17526] Privilege escalation: the "impersonation" role can impersonate a realm administrator
  • #​52839 [CVE-2026-18212] SAML Redirect DEFLATE helpers leak native zlib state

Enhancements

  • #​52354 Upgrade to Quarkus 3.33.3.2 dist/quarkus

Bugs

  • #​49635 Performance issue with 26.6.2 dist/quarkus
  • #​51102 Flaky test: org.keycloak.testsuite.oauth.AccessTokenTest#accessTokenRequest ci
  • #​52015 New links errors for https://quarkus.io/guides docs
  • #​52172 Cached `RealmAdapter.isUserManagedAccessAllowed()` returns `isEnabled()` infinispan
  • #​52173 `realm_client` is computed into a client's attributes and then persisted on save admin/api
  • #​52233 Oracle 19 full client OCI driver crashes on startup since 26.6.0 — SQLFeatureNotSupportedException on setNetworkTimeout dist/quarkus
  • #​52241 Clicking on a sub group in the admin console throws an exception admin/ui
  • #​52283 Flaky test SessionRestServiceTest.testGetDevicesSessions testsuite
  • #​52430 Flaky test: userprofile.spec.ts fails with timeout on "no-users-found-empty-action" in serial suite testsuite

v26.7.3

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​50785 CVE-2026-35563: LDAP client implementation in version 2.1.7 does not verify if the server certificate matches the intended LDAP hostname ldap
  • #​50997 [CVE-2026-16093] Required signed-JWT assertion policy can be bypassed with unsigned assertion headers oidc
  • #​50998 [CVE-2026-16072] Organization managers can create managed members through stored registration links without manage-users organizations
  • #​51001 [CVE-2026-16108] Realm default-group reads disclose hidden groups under FGAP v2 admin/fine-grained-permissions
  • #​51002 [CVE-2026-16105] Missing per-role authorization on RoleContainerResource composite endpoints admin/rbac
  • #​51003 [CVE-2026-16089] Authorization codes can be retargeted to another client session oidc
  • #​51005 [CVE-2026-16104] Authenticator config surfaces expose raw reCAPTCHA secrets admin/fine-grained-permissions
  • #​51112 [CVE-2026-16106] Incorrect authorization in admin role-composite deletion allows delegated admin to remove privileged child roles admin/fine-grained-permissions
  • #​51142 [CVE-2026-17059] Information disclosure: GET /roles/{role}/users returns user PII without the per-user view filter admin/fine-grained-permissions
  • #​51279 [CVE-2026-18218] Client not-before revocation is ignored when realm not-before is older but nonzero oidc
  • #​51282 [CVE-2026-18215] Microsoft external access-token exchange bypasses configured tenant token-exchange
  • #​51283 [CVE-2026-18201] Generic identity-provider creation can bind brokers to organizations without manage-organizations organizations
  • #​51286 [CVE-2026-18209] Incomplete fix for redirect_uri OIDC response-parameter injection: forbidden-parameter check (commit 18832bca) inspects only the query string, not the URL fragment oidc
  • #​51287 [CVE-2026-18214] Google external access-token exchange bypasses hosted-domain restriction token-exchange
  • #​51378 [CVE-2026-18571] FGAP V2: Group assignment bypass during user creation (POST /users) allows adding unpermitted groups admin/fine-grained-permissions
  • #​51379 [CVE-2026-18572] UMA claim token can override the authorization time-policy clock authorization-services
  • #​51380 [CVE-2026-18573] Client access-type condition evaluates updates against the old client type oidc
  • #​51382 [CVE-2026-18570] Full-scope-disabled client policy validation can be bypassed by omitting fullScopeAllowed oidc
  • #​51745 [CVE-2026-19729] Incomplete fix for CVE-2026-9083 — relative path traversal still enables filesystem probing in 26.6.4 core
  • #​52028 [CVE-2026-79652] Keycloak jwt-bearer authorization grant does not enforce consentRequired oidc

Weaknesses

  • #​50581 Admin API: User/group role-mapping endpoints disclose hidden client role metadata under FGAP v2 admin/fine-grained-permissions
  • #​50583 Admin API: Composite role endpoints do not filter child roles by FGAP v2 view permission admin/fine-grained-permissions
  • #​50990 Admin UI extension effective-role endpoints disclose hidden composite roles admin/fine-grained-permissions
  • #​51143 Aggregate policy partial evaluation diverges from runtime semantics under FGAP v2 admin/fine-grained-permissions
  • #​51144 Partial evaluation misses ancestor group policies with extendChildren admin/fine-grained-permissions
  • #​51202 Client-protocol condition can be bypassed on admin client creation by omitting protocol oidc

Bugs

  • #​50825 Creating an organization without a domain leads to an error organizations
  • #​50963 V1 token-exchange strips the DPoP sender-constraint from a bound access token token-exchange
  • #​51510 SQLGrammarException: The incoming request has too many parameters core
  • #​51523 Sustained high CPU on all nodes after upgrade admin/api
  • #​51554 Admin API per-request cost grows super-linearly with realm count since 26.7.1 admin/api
  • #​51589 NPE in RoleUtils.expandCompositeRoles when a cached client scope references a deleted role core
  • #​51602 Invalid redirect on https://access.redhat.com/products/red-hat-single-sign-on/ docs
  • #​51707 Lightweight access token role resolution resolves all roles across all realms on every admin API request core
  • #​51712 Logout URL does not allow OIDC response parameters in its redirect_url oidc
  • #​51780 SSSD CI job fails: FreeIPA container crashes on ubuntu-24.04 runner image 20260810.271 ci
  • #​51785 Multiple CVEs inherited from Apache DS used for testing
  • #​51790 Java Distribution IT/UT (windows-latest, temurin, 21) times out regularly ci
  • #​51792 AsyncCommitIntegrator Aurora detection logs "ERROR: function aurora_version() does not exist" in the PostgreSQL server log on every startup
  • #​51807 Client scope boundary bypassed when resolving admin roles via KeycloakIdentity admin/fine-grained-permissions
  • #​51902 Index modifiers are not logged if an index is not created due to a threshold core
  • #​51920 Error: 1020-HY000: Record has changed since last read in table OFFLINE_CLIENT_SESSION
  • #​51983 [26.7.2] Regression in UI in JS keycloak-admin-client
  • #​52017 SAML ECP faultstring discloses client existence, incomplete fix of CVE-2026-9794 saml
  • #​52038 Client session note removals are not persisted with persistent user sessions core

v26.7.2

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​49570 CVE-2026-45292 OpenTelemetry Java SDK has Unbounded Memory Allocation in W3C Baggage Propagation dependencies
  • #​50616 [CVE-2026-14613] Keycloak 26.6.3 Fine-Grained Admin Permissions Bypass via Role Groups Endpoint admin/fine-grained-permissions
  • #​50955 [CVE-2026-59888 and CVE-2026-59889] Upgrade jackson-databind to 2.21.5 to fix
  • #​50966 [CVE-2026-15945] Group hierarchy search discloses hidden parent groups under FGAP v2 admin/fine-grained-permissions
  • #​51145 [CVE-2026-17048] Keycloak Admin REST API Leaks Vault-Resolved Rotated Client Secrets oidc
  • #​51832 CVE-2026-15571 Predictable account-linking hash enables account takeover via malicious oidc client
  • #​51833 CVE-2026-18963 Unauthenticated account takeover via reset-credentials flow bypass

Weaknesses

  • #​50844 show-config prints the vault keystore password in cleartext dist/quarkus

Enhancements

Bugs

  • #​50751 Password denylist: false fpp warning on startup with large pre-computed .bloom file authentication
  • #​50849 Correct SCIM name.formated scim
  • #​50855 Rotated client secret remains valid when the feature is disabled oidc
  • #​51054 Invalid redirect URI on logout from pages with sub-tab hash fragments admin/ui
  • #​51061 Parameterized UserPropertyMapper exposes target user attributes without permission check core
  • #​51087 Passkey icons use wrong color variant when realm disables dark mode authentication/webauthn
  • #​51088 Verify email not working in incognito browser tab after Keycloak restart authentication
  • #​51131 Warning "Proactive closing of the session was missed - refinements are needed to TransactionSessionHandler related logic" appears core
  • #​51154 Upgrade to 26.7.0 fails with preview features as the stateless cluster provider captures a null NodeInfo before postInit infinispan
  • #​51164 WebAuthn tests are being skipped in Github workflows workflows
  • #​51182 Large HTTP/2 request headers are rejected with a bare 500 and no log; same request works over HTTP/1.1 dist/quarkus
  • #​51323 Custom realm-level role named admin cannot be updated in non-master realms after Keycloak 26.7.0 admin/rbac
  • #​51331 Adding org member fails with 500 with stateless:v1 feature enabled organizations
  • #​51407 The dist for Java API docs is empty docs
  • #​51449 Incorrect query parameter name for "max"
  • #​51476 Invalid link for https://www.ietf.org/rfc/rfc4559.txt docs

v26.7.1

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​49429 [CVE-2026-9793] JWE request object bypasses requestObjectSignatureAlg enforcement oidc
  • #​50445 [CVE-2026-4629] Privilege escalation via hardcoded role mapper injection in manage-clients admin/api
  • #​50569 [CVE-2026-14209] Keycloak Admin UI Extension `brute-force-user` User Disclosure via `search=id:` under FGAP v2 admin/fine-grained-permissions
  • #​50615 [CVE-2026-14614] Keycloak 26.6.3 Fine-Grained Admin Permissions Bypass in Client Scope Assignment admin/fine-grained-permissions
  • #​50617 [CVE-2026-14615] FGAP v2 parent group children endpoint bypasses per-child view permission filter admin/fine-grained-permissions
  • #​51467 CVE-2026-15573 Authorization bypass via unnormalized uri matching in pathmatcher
  • #​51468 CVE-2026-15572 DCR protocol mapper type-swap policy bypass allows privilege escalation
  • #​51469 CVE-2026-16100 Unbounded metric cardinality in user event metrics via request-controlled error text
  • #​51470 CVE-2026-16442 SAML idp-initiated broker login bypasses link-only restriction
  • #​51471 CVE-2026-16443 SAML broker metadata import disables response signature validation
  • #​51472 CVE-2026-16071 LDAP entry-dn user search bypasses configured users dn boundary
  • #​51473 CVE-2026-16102 Default DCR policy allows role forgery via user property mappers

Bugs

  • #​50719 WebAuthn authenticator attachment policy is bypassed when the client omits the attachment field authentication/webauthn
  • #​50750 Clustering test broken in 26.7 release branch ci
  • #​50836 Kustomize cluster-wide faulty Role&RoleBinding operator
  • #​50850 New Password is commited when multiple Password Reset is detected authentication
  • #​50882 500 when client requests `organization` scope with it already set to `Default` authentication
  • #​50928 IllegalFormatConversionException in LiquibaseDBLockProviderFactory and wrong time conversion core

v26.7.0

Compare Source

Highlights

This release features new capabilities for users and administrators of Keycloak. The highlights of this release are:

  • Automate user provisioning with the SCIM API (preview)

  • Simplified multi-cluster high availability without external caches (preview)

  • Enhanced reverse proxy guides with blueprints for HAProxy and Traefik

  • Step-up authentication for SAML clients

Read on to learn more about each new feature. If you are upgrading from a previous release, also review the changes listed in the upgrading guide.

Security and Standards

Stronger security for the Identity Brokering API

The Identity Brokering API allows applications to retrieve tokens obtained from external identity providers during federated login. Version 2 of this API replaces the legacy V1 with a more secure and standards-compliant design:

  • Client-level authorization — access to external tokens is controlled per client using dedicated settings (Allow retrieve external tokens and an identity provider allow list) instead of assigning broker roles to individual users.

  • Confidential clients only — public clients are rejected, ensuring that only authenticated clients can retrieve external tokens.

  • OAuth 2.0 compliant — the endpoint uses POST and returns standard JSON responses with access_token, error, and error_description fields.

  • Session-based token storage — a new Store token in session option keeps tokens in the user session for faster access, with automatic cleanup on session expiry. Database storage remains available for persistence across sessions.

V2 is now supported but disabled by default. V1 is deprecated but still enabled by default for backward compatibility. In a future release, V1 will be removed and V2 will become the default.

For more information, see the Identity Brokering APIs chapter in the Server Developer Guide.

Progress on Verifiable Credentials (OID4VCI) (experimental)

Verifiable Credentials (OID4VCI) allow organizations to issue tamper-proof, cryptographically signed credentials — such as employee badges, academic diplomas, or professional certifications — that users can store in a digital wallet and present to third parties without involving the issuer.

OID4VCI remains an experimental feature in Keycloak, but this release brings substantial improvements from both the core team and the community:

  • Polishing of existing functionality and improving configuration. Everything is now configurable in the admin UI in addition to the admin REST API.

  • Lots of bugs fixed. Improved specification compliance.

  • Conformance with the OpenID4VC High Assurance Interoperability Profile (HAIP). This work involves the introduction of the dedicated Keycloak experimental feature client-auth-abca for Attestation based client authentication (ABCA).

  • Management of verifiable credentials for individual users. This involves the ability for an administrator to create a verifiable credential for a user to indicate that this user can retrieve a verifiable credential, as well as the ability for users to start issuance of a verifiable credential from the Keycloak account console.

  • Pre-authorized code grant support is still experimental and was moved to the dedicated experimental feature oid4vc-vci-preauth-code

  • Support for credential refresh interval. Administrators can now configure a separate refresh interval (vc.refresh_interval_in_seconds) in the client scope settings that controls how often wallets must refresh the credential, independent of the credential lifetime. When not explicitly set, defaults to 7 days or the credential lifetime, whichever is smaller. This enables regular credential rotation for enhanced security while maintaining user convenience through automatic refresh using the refresh token. For more information, see the Create Client Scopes with Mappers section in the OID4VCI configuration guide.

  • Documentation updated and improved

Cross-domain token exchange with Identity Assertion JWT Grant (experimental)

When two organizations each run their own authorization server, users often need to re-authenticate when crossing between them — even though their identity was already verified. The Identity Assertion JWT Authorization Grant (ID-JAG) solves this by allowing one authorization server to present a signed identity assertion to another, which then issues an access token without requiring the user to log in again.

Keycloak provides partial experimental support for the Identity Assertion JWT Authorization Grant. It currently implements only the receiving authorization server role, accepting ID-JAG assertions at the token endpoint and issuing access tokens in return. Other parts of the ID-JAG specification are not yet implemented, so the complete flow is not currently supported.

To try it out, start Keycloak with the feature identity-assertion-jwt enabled.

Many thanks to Yutaka Obuchi for the contribution of this feature!

Automate user provisioning with the SCIM API (preview)

SCIM (System for Cross-domain Identity Management) is a standard protocol for reading and writing identity resources such as users and groups across multiple systems. It enables organizations to automate user provisioning and deprovisioning using widely available tooling — for example, integrating with identity governance platforms, HR systems, or other identity providers.

Keycloak has SCIM APIs for managing users and groups within a realm. The implementation covers full CRUD and PATCH operations, filtering and pagination, schema extensions including the Enterprise User extension, and schema discovery endpoints.

In this release, the SCIM API is being promoted to a preview feature. In the default profile it is disabled by default; to try it out, enable the scim-api feature.

For more details, see the Managing users and groups through SCIM documentation.

Real-time security signals to downstream applications (experimental)

When a user logs out, changes credentials, or gets disabled in Keycloak, downstream applications typically don&#​8217;t learn about it until the next token refresh — leaving a window where stale sessions remain active. The OpenID Shared Signals Framework (SSF) closes this gap by letting identity providers push security events to relying parties in near real time.

Keycloak can now act as an SSF Transmitter, delivering signed Security Event Tokens (SETs) to registered receivers. It supports CAEP 1.0 and RISC 1.0 event profiles with both push (RFC 8935) and poll (RFC 8936) delivery methods. Events are persisted to a durable outbox so that no signal is lost across restarts, and a cluster-aware background drainer handles retries and exponential backoff. Each realm can opt in individually, and streams, subjects, and event types are managed through the admin console and REST API.

To enable SSF, start Keycloak with the feature ssf enabled.

For more details, see the Shared Signals Framework guide.

Standardized authorization decisions with AuthZen (experimental)

Applications that need fine-grained authorization typically call Keycloak&#​8217;s proprietary authorization API, coupling them to its internal model. The OpenID AuthZEN Authorization API 1.0 defines a vendor-neutral protocol between Policy Decision Points (PDPs) and Policy Enforcement Points (PEPs), enabling applications to request authorization decisions through a standard interface.

Keycloak now implements the AuthZEN Evaluation API as a PDP. Applications send evaluation requests describing a subject, resource, and action, and Keycloak returns a permit or deny decision based on its configured authorization policies. Both single and batch evaluation endpoints are available.

To enable AuthZen, start Keycloak with the feature authzen enabled.

For more details, see the AuthZen Authorization guide.

Authorize AI tools and MCP servers

The Model Context Protocol (MCP) is becoming the standard way for AI applications to connect to external tools and data sources. As MCP adoption grows, securing these connections with proper OAuth 2.0 authorization is critical.

Keycloak continues to improve its MCP authorization server capabilities. This release adds integration documentation for Claude Code as an MCP client, alongside the existing Visual Studio Code integration. Both use OAuth Client ID Metadata Document (CIMD) for dynamic client registration with PKCE-secured public client flows and localhost callbacks.

For setup instructions, see the Integrating with Model Context Protocol (MCP) guide.

Delegate access across services with Token Exchange Delegation (experimental)

In multi-service architectures, a backend service sometimes needs to act on behalf of a user at another service — for example, when a gateway delegates work to a downstream API. Standard Token Exchange handles client-to-client token swaps, but verifying that the requester is authorized to impersonate a specific user requires additional checks.

Keycloak introduces token exchange delegation as an experimental feature. It adds a new delegation parameterized scope type that validates whether the requesting user is authorized to act on behalf of the target user before the exchange is granted. The delegation scope requires user consent and is automatically reassessed on token refresh, so revoked impersonation rights take effect immediately.

To enable token exchange delegation, start Keycloak with the feature token-exchange-delegation enabled.

Step-up authentication for SAML clients

Step-up authentication allows applications to require a stronger level of authentication for sensitive operations. Previously, this capability was only available for OpenID Connect clients.

Keycloak now extends step-up authentication to the SAML protocol, enabling SAML service providers to request a specific authentication context class in their authentication requests. The feature step-up-authentication-saml has been promoted from preview to supported in this release.

For more information, see the Server Administration Guide.

Administration

Declarative client management with Admin API v2 (experimental)

Keycloak introduces a new REST API for managing OIDC and SAML clients. The new API provides strict validation, support for declarative configuration, and an accurate OpenAPI specification that enables reliable client generation. This addresses long-standing limitations of the original Admin REST API. This is the first resource in the Admin API v2, with additional resources to follow in future releases.

The API can be consumed through a Java client, an auto-generated JavaScript client, and a CLI. The Keycloak Operator uses it to manage clients declaratively via KeycloakOIDCClient and KeycloakSAMLClient custom resources.

Enabling this feature also enables the OpenAPI specification endpoint on the management interface, which the CLI uses to adapt its commands to the connected server version.

To try it out, enable the client-admin-api:v2 feature.

For more details, see the Admin API v2 guide and the Managing Keycloak Clients operator guide. Feedback is welcome in the Client Admin API v2 GitHub Discussion.

Thanks to Robin Meese for contributing the OpenAPI endpoint on the management interface and the Java admin client, and to Sebastian Schuster for his participation in the Admin API working group and the Go client analysis.

Fine-grained delegation for organization administration

Managing organizations in Keycloak previously required the manage-realm role — a high-privilege role that grants far more access than most organization administrators need. This release introduces dedicated admin roles and Fine-Grained Admin Permissions for organizations, allowing administrators to delegate organization management without over-provisioning access.

New realm admin roles provide coarse-grained delegation:

  • manage-organizations — grants full read and write access to organizations, including creating, updating, and deleting organizations and their members.

  • view-organizations — grants read-only access to organizations and their members (also requires view-users or Fine-Grained Admin Permissions for user visibility).

  • query-organizations — grants the ability to search and list organizations without full view access, consistent with the query-users / query-clients / query-groups pattern.

The manage-realm role continues to implicitly grant full organization management access for backward compatibility.

For per-organization granularity, organizations are now a first-class resource type in Fine-Grained Admin Permissions. Administrators can create permissions to control which specific organizations a delegated administrator can view or manage — for example, granting access to manage one organization without giving access to all organizations in the realm. When Fine-Grained Admin Permissions is enabled, organization member queries also respect user-level permissions, returning only members the administrator is permitted to view.

Automatic role inheritance through organization groups

Assigning roles to individual organization members does not scale well when an organization has hundreds of users who all need the same permissions. Organization groups now support realm and client role assignments, so administrators can assign a role once to the organization group and have it automatically appear in realm_access and resource_access token claims for all group members.

Additionally, the Organization Group Membership protocol mapper (OIDC and SAML) can include these roles within the organization claim, organized per organization, by enabling the Add group role mappings configuration option.

For more details, see the Managing organization groups guide.

Better passkey compatibility with new WebAuthn policy options

Passkeys let users sign in with biometrics or a security key instead of a password. To work correctly, the server must tell the browser whether it prefers a discoverable credential (a passkey stored on the device) or not — and the previous Yes/No option could not express the increasingly common preferred value.

The WebAuthn Policy and WebAuthn Passwordless Policy now provide a Discoverable credential option that follows the current WebAuthn specification, supporting required, preferred, and discouraged values. This improves compatibility with passkey providers such as iCloud Keychain, Google Password Manager, and 1Password. The previous Require Discoverable Credential option is now deprecated and planned for removal in a future release.

Administrators often give realms short technical names (like acme-prod) but set a human-readable display name (like Acme Corporation). Previously, the admin console search only matched against the technical realm name, making it harder to find realms in large multi-tenant deployments.

Realm search now matches against the display name in addition to the realm name, so administrators can find realms by whichever name they remember.

Type-safe validation for parameterized scopes (experimental)

Parameterized scopes allow OAuth clients to request context-specific access — for example, project:12345 to request access to a particular project, or account:savings to scope a token to a specific bank account. Previously, the parameter value was validated only by an optional regex, making it easy to pass invalid or unexpected values.

Parameterized scopes can now define a parameter type that validates the captured value at request time. Built-in types include string, integer, boolean, username, and custom (validated against an admin-defined regex). The type is required when creating parameterized scopes with the feature enabled, ensuring that tokens always carry well-formed scope parameters.

For more details, see the Upgrading Guide.

Additional datasources may be excluded from health checks

When using multiple datasources, a failing non-critical datasource can cause the health check endpoint to report the entire deployment as unhealthy. Individual datasources can now be excluded from health checks, so optional or secondary datasources do not trigger unnecessary alerts or affect load balancer routing.

Read more about it in the Configure multiple datasources guide.

Configuring and Running

Enhanced reverse proxy guides with blueprints for HAProxy and Traefik

Running Keycloak in production requires a reverse proxy, but configuring TLS termination, certificate forwarding, and admin API security correctly across different proxies is error-prone.

The reverse proxy documentation has been significantly expanded with dedicated step-by-step guides for HAProxy and Traefik covering both TLS passthrough and re-encrypt modes, and also explain the concepts so they can be applied for other proxies as well.

For more details, see the Using a reverse proxy guide.

Simplified multi-cluster high availability without external caches (preview)

The existing multi-cluster setup for Keycloak requires deploying and managing an external Infinispan cluster for cross-site session replication, along with vendor-specific fencing infrastructure for automated failover. This adds significant operational complexity and limits deployments to specific environments.

Multi-cluster v2 removes the external Infinispan requirement entirely. Keycloak instances connect directly to each other using embedded Infinispan caches and rely on the synchronously replicated database as the single source of truth. Cache invalidation across sites is handled through a database-backed outbox pattern. The load balancer can detect the downtime of a site without requiring external fencing infrastructure.

To enable this setup, start Keycloak with the feature stateless. For architecture details and a deployment blueprint, see the Multi-cluster deployments (v2) guide.

Keycloak Operator kustomize installation

Installing the Keycloak Operator on vanilla Kubernetes clusters previously required downloading and applying individual manifest files, making upgrades and customization harder to manage. The Operator can now be installed using kustomize, providing a declarative and reproducible installation method.

For installation instructions, see the Operator Guide.

Cluster-wide install mode for the Keycloak Operator (preview)

Organizations running multiple Keycloak instances across different Kubernetes namespaces previously needed to install a separate Operator in each namespace. The Keycloak Operator now exposes AllNamespaces as a supported OLM install mode, allowing a single Operator instance to reconcile Keycloak custom resources across all namespaces in the cluster. For non-OLM installations, cluster-wide deployment is available through the cluster-wide kustomization overlay.

Cluster-wide installation is in preview. For installation instructions and limitations, see the Operator Guide.

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​49427 [CVE-2026-9796] Admin role rename TOCTOU bypasses checkAdminRoles — realm-wide escalation from manage-clients admin/rbac
  • #​49430 [CVE-2026-9689] HTTP Parameter Pollution in OIDC redirect URI allows response parameter duplication oidc
  • #​49432 [CVE-2026-9798] CIBA authentication flow bypasses brute-force account lockout oidc
  • #​49766 [CVE-2026-11986] FGAP v1 allows unassigning any role admin/fine-grained-permissions

Weaknesses

  • #​48717 SAML Identity Provider settings in the Admin UI are not asking for signatures by default identity-brokering
  • #​49137 Welcome page admin bootstrap bypasses local-only check when behind a same-host proxy without forwarding headers admin/api
  • #​49215 JWT Authorization Grant: namespace jti cache keys and reorder signature verification oidc
  • #​49312 Organization group members endpoint does not check Users permission organizations
  • #​49605 Member's organizations endpoint missing per-org FGAP filtering organizations
  • #​49660 OID4VCI: Missing disabled-client check in PreAuthorizedCodeGrantType oid4vc
  • #​49838 SD-JWT: Array index shifting in SdJwtVerificationContext leaves undisclosed placeholders in verified payload oid4vc
  • #​49920 WebAuthn: sign counter updated to stored+1 instead of assertion value authentication/webauthn
  • #​49921 WebAuthn: challenge not consumed after assertion validation authentication/webauthn
  • #​49922 FreeMarker: deprecated no-arg Configuration constructor pins engine to legacy 2.3.0 defaults admin/ui
  • #​49961 Themes: FolderTheme.getTemplate() missing path-containment check account/ui
  • #​50074 SSF admin endpoint: missing client-level authorization check exposes push delivery secret ssf
  • #​50316 Use constant-time comparison when validating OTP codes authentication
  • #​50460 SSF push URL allow-list bypass via authority-attached wildcard ssf
  • #​50464 SAML Step-Up: Over-achieved LoA collapses AuthnContextClassRef to AC_UNSPECIFIED on SSO re-entry saml
  • #​50466 SAML Step-Up: Three robustness issues in LoA mapping and classRef selection saml
  • #​50481 Cacheless: JpaSingleUseObjectProvider.putIfAbsent() missing lifespan validation present in put()
  • #​50482 Cacheless: Root authentication session lookup uses assert-only realm check — no-op in production
  • #​50483 Cacheless: LoginFailureExpirationAction compares milliseconds vs seconds — rows never reaped
  • #​50488 HAProxy guide: Missing unconditional del-header for Client-Cert before conditional set-header
  • #​50491 Client API v2: Operator secretRef resolves arbitrary Secrets without ownership validation admin/api-v2
  • #​50494 Client API v2: Operator prefers HTTP over HTTPS when both are enabled admin/api-v2
  • #​50534 Identity Broker v2: Internal exception message reflected in /token error response oidc

Removed features

  • #​44013 Deprecate the Twitter IDP implementation due to old twitter4j library identity-brokering
  • #​48104 Remove support for token-exchange-external-internal:v2 token-exchange/federated
  • #​49270 Remove the batching option for the persistent sessions

New features

  • #​9686 Store the Dynamic Scope parameter to avoid showing the Consent Screen every time there's an authentication
  • #​20128 Add support for `reencrypt` OpenShift Routes to the Operator operator
  • #​22042 More flexible imports in custom theme (i.e. CSS media queries) account/ui
  • #​35650 Compatibility profiles
  • #​44317 [OID4VCI] Add a client policy to require a credential offer
  • #​46543 Step-up authentication for SAML - supported authentication
  • #​48623 Make the admin client, from the admin-ui more easy to use

Enhancements

  • #​9915 Make the consent screen text for dynamic scopes customizable with a reference to the dynamic scope parameter
  • #​10696 Improve WebAuthn tests documentation testsuite
  • #​12223 Dynamic scopes: requested scopes get mixed up between token requests oidc
  • #​17758 [UX Review] Optimize the number box in the Time-policy creation page of client Authorization admin/ui
  • #​17762 [UX Review] Optimize the initial page of Keys in OIDC client admin/ui
  • #​17770 Remove unnecessary conditions from code admin/ui
  • #​17771 Caught errors should have the correct type associated with them admin/ui
  • #​22229 UI should prevent admins from defining a dynamic client scope with type Default oidc
  • #​24436 Account API - "/applications/{clientId}/consent" : Provide option to get enhanced ConsentScopeRepresentation account/api
  • #​24823 Adding client_id as prefix in client roles mapper core
  • #​26602 Allow user search by direct lookup via username and email
  • #​26699 Nested group members from Active Directory are not showing in Keycloak groups ldap
  • #​29558 Best practices for detecting support for Passkeys - support for isUserVerifyingPlatformAuthenticatorAvailable() authentication/webauthn
  • #​30328 Add ability to inspect generated SAML response for SAML Clients with client scope mappings saml
  • #​31641 Implement organization-specific admin roles with limited permissions organizations
  • #​32527 Provide default krb5.conf in Docker image or extend migration docs docs
  • #​34104 Improve robustness of backchannel logout with client sessions
  • #​38632 README.md Other Keycloak Projects
  • #​40026 Support subdomain matching for Organizations in IdP redirect logic
  • #​41164 Redirection Endpoint should be validated not to include a hash in the URL oidc
  • #​42513 Set residentKey instead of requireResidentKey in Webauthn creation request authentication/webauthn
  • #​42883 FIX multiple LDAP failover & document the possibility of having multiple LDAP URLs in LDAP provider
  • #​43955 Cluster-wide Operator MVP
  • #​45104 Add native "Remember Me" support to WebAuthn/Passkey Authentication Flows login/ui
  • #​45292 Search realms by "Display name" in the "Manage realms" view admin/ui
  • #​45295 Improve client authentication flows authentication
  • #​45497 Introduce granular roles for Organization management (manage-organizations, view-organizations) organizations
  • #​45866 Customize SAML service provider metadata
  • #​45900 Support multiple organization scopes in OIDC token requests organizations
  • #​46435 Good database instructions for a production ready Keycloak setup
  • #​46740 Prevent ASCII control characters in query parameters
  • #​46903 A User belonging to multiple organization should be allowed to change his organization choice during login organizations
  • #​46959 Enhance WebAuthn Conditional UI to auto-trigger passkey modal on page load authentication/webauthn
  • #​46981 Support experimental cluster-wide operator installation by using kubectl operator
  • #​47174 MySQL/TiDB: Configure DB socket timeouts on the fly during connection creation phase dist/quarkus
  • #​47284 Introduce ORGANIZATIONS resource type in Fine-Grained Admin Permissions admin/fine-grained-permissions
  • #​47314 Token Exchange with sender constrained tokens missing cnf claim oidc
  • #​47327 Support mapping existing Realm and Client roles to Organization Groups organizations
  • #​47330 Document provided ProtocolMapper implementations docs
  • #​47356 Enhancement: Improve the performance of loading large password blacklists
  • #​47383 Add example for health check when using HTTPS
  • #​47431 Organization feature will only show linked IDPs if the user has already one linked organizations
  • #​47542 Use client-side Streaming for admin api v2 in the Java client
  • #​47762 Enhance quick-theme .jar generation. admin/ui
  • #​47851 OrganizationGroupMembershipMapper should support configurable token claim name organizations
  • #​47951 Add Vietnamese (vi) as a translation translations
  • #​47960 Add CLI options for mTLS database connections
  • #​47963 Update tested configurations for single- and multi-cluster to the recent OpenShift version
  • #​48053 Allow db-connect-timeout to be used for all datasources dist/quarkus
  • #​48059 Safeguard against wrong PID in containers dist/quarkus
  • #​48088 When a group is granted a role, it should not read all existing role mappings from the database core
  • #​48098 Expose hidden management options
  • #​48338 Add details to AdminEvent in UserResource.removeCredential core
  • #​48393 [CIMD] Document the existing query-string defense on the MCP Authorization Server docs page
  • #​48420 Upgrade `webauthn4j` to 0.30.3 authentication/webauthn
  • #​48445 Enable passkeys configuration does not follow best UX authentication/webauthn
  • #​48539 Update WebAuthn Metadata service data authentication/webauthn
  • #​48540 Support icons for Passkeys credentials authentication/webauthn
  • #​48557 Show Groups tab in the account console when user is part of any group account/ui
  • #​48588 Fine Grained Authorization v2 : does not work PUT https://i/admin/realms//admin-permissions/groups/ admin/fine-grained-permissions
  • #​48730 DB documentation doesn't state on how to check the transaction isolation for MSSQL
  • #​48755 User deletion latency grows with Infinispan session-cache fill level / size infinispan
  • #​48863 Include kid in details of CLIENT_LOGIN event of Signed JWT Client Authentication
  • #​48892 SSF: Track if stream was created by Keycloak or ssfReceiver ssf
  • #​48893 SSF: Remove "audience" field from create stream form ssf
  • #​48962 Add suggestions when features are incorrectly specified dist/quarkus
  • #​49037 Expose multi-namespace install modes
  • #​49040 Make `AbstractJWTClientValidator` / `FederatedJWTClientValidator` methods `protected` for extensibility
  • #​49177 Remove explicit --shutdown-timeouts configuration from proxy example configurations
  • #​49235 SSF: Move Push timeout settings to SSF Receiver tab ssf
  • #​49248 Consider additional datasources in health checks
  • #​49348 Ensure proper management of thread-bound resources.
  • #​49372 Unify buttons in horizontal layout for Login UI login/ui
  • #​49378 Login page title should use full width when locale selector is hidden login/ui
  • #​49424 Include subject to email template attributes
  • #​49453 Persistent sessions should be written as part of the original main transaction where possible infinispan
  • #​49469 Stateless mode: store volatile session data in the database
  • #​49491 Full user representation when querying organization members organizations
  • #​49573 Attribute for clients scopes to always require consent token-exchange/subject-impersonation
  • #​49608 Correct themes README
  • #​49645 Organization member read endpoints should document parent-gated org-level authorization contract organizations
  • #​49711 [Login UI] Improve credential selector layout login/ui
  • #​49757 Reverse proxy docs: should not proxy master realm docs
  • #​49873 How to thread dump with and without virtual threads observability
  • #​49947 Add OIDF conformance tests to CI oidc
  • #​49988 Docs should describe on how to detect if a graceful shutdown was successful docs
  • #​50050 SSF: Handle disabled SSF Receiver client ssf
  • #​50087 Generate queryable fields documentation from code docs
  • #​50134 Refresh client data after invalidating rotated secret in Credentials tab
  • #​50261 MCP Documentation for 26.7
  • #​50327 Improve OAuth Identity and Authorization Chaining Across Domains guide
  • #​50369 Composite-role expansion does an N+1 of `getChildRoles` queries (each with an auto-flush) that dominates Keycloak CPU on the cache-miss path core
  • #​50467 Prevent DoS when using complex filter conditions workflows
  • #​50476 Retarget quarkus-next to Quarkus 3.x branch after main switched to 4.0

Bugs

  • #​12142 IdP backchannel logout does not work with session id in logout oidc
  • #​20649 "Not username" and "Not email" options when creating/changing a password, should ignore letter case when comparing password to email or to username authentication
  • #​27431 New clients have a JavaScript default policy configured which causes problems on export/import authorization-services
  • #​32124 Backchannel logout notification client for Update_Password AIA is not having all the session ids authentication
  • #​33204 Identity Providers are missing from the login page if I request a reset password for an existing user login/ui
  • #​35104 Timestamp overflow in client secret rotation feature leads to next refresh time being set to the past core
  • #​37355 Web Crypto API not available in `login-status-iframe.html` when using admin console from insecure context oidc
  • #​38124 High values for client secret expiration result in expiration dates in the past core
  • #​40603 Account UI reports "Something went wrong" if user doesn't have permissions to view applications account/ui
  • #​44591 Terms and Conditions Accepted Timestamp user-profile
  • #​44620 Possible data loss when scaling Keycloak StatefulSet down (on Kubernetes) infinispan
  • #​44741 Device activity does not recognize iOS 26 correct account/ui
  • #​45420 [OID4VCI] Wrong typ value for SD-JWT VC oid4vc
  • #​45494 ScrollForm navigation does not update active section on click or scroll admin/ui
  • #​45568 Pending auth flow waiting for email verification succeeds even after password reset - providing room for pre-account takeover attacks authentication
  • #​45716 Problem with Standard Token Exchange with Dynamic Scopes feature enabled (Wrong default scopes) token-exchange
  • #​46083 "Full scope allowed" toggle reverts to previous state when switching between Scope and Mappers tabs in Dedicated scopes admin/ui
  • #​46088 Newly created resource appears on both current and next page in Authorization Resources tab authorization-services
  • #​46132 profile scope causes NumberFormatException oidc
  • #​46172 Issues when deleting several realms at the same time admin/api
  • #​46463 Input field for device user code is badly formatted login/ui
  • #​46634 Brute force detection counter does not work properly authentication
  • #​46742 Keycloak makes network requests to addresses in login certificates before verifying them authentication
  • #​46926 PAR endpoint enforces “Request Object Required” and expects request_uri oidc
  • #​46954 ClearExpiredEvents job crashes app and locks DB when EVENT_ENTITY Table has large amount of records admin/ui
  • #​46978 Document / validate .conf extension is required for --config-file option dist/quarkus
  • #​47017 Remember me does not work when organization scope is enabled on login session. authentication
  • #​47046 [OID4VCI] Credential definition type should include VerifiableCredential oid4vc
  • #​47061 Duplicated flows can have illegal characters in step name authentication
  • #​47202 DefaultLocaleUpdaterProvider: KEYCLOAK_LOCALE cookie not set for READ_ONLY federated users ldap
  • #​47274 [OID4VCI] Option 'Pre-Authorized code lifespan' should be renamed oid4vc
  • #​47294 Use SecureRandom instead of Random for D-Bus cookie generation in SSSD federation authentication
  • #​47341 Updating client scope fails if it was saved while the dynamic scopes feature was active in the past oidc
  • #​47386 [OID4VCI] TokenResponse requires credential_identifiers in authorization_details
  • #​47421 Flaky test: org.keycloak.testsuite.model.session.OfflineSessionPersistenceTest#testPersistenceMultipleNodesClientSessionAtSameNode ci
  • #​47432 The cancel button in the custom UiTabProvider encounters an issue where it redirects to an incorrect URL and triggers an error. admin/ui
  • #​47477 Flaky test: org.keycloak.testsuite.forms.AuthenticatorSubflowsTest2#testSubflow2 ci
  • #​47499 Maven windows wrapper trips over whitespace in pathname for setup dependencies
  • #​47500 Build Quarkus snapshots in quarkus-next workflow ci
  • #​47513 Review JwtProofValidator oid4vc
  • #​47523 The name "master" seems to be hard-coded in places and thus breaks KC_SPI_ADMIN_REALM admin/ui
  • #​47545 Keycloak ships source maps for Admin UI and Account UI account/ui
  • #​47560 Missing default value for max parameter in the Admin REST APIs docs docs
  • #​47659 SRCFG01008 warning in source Quarkus dev mode when kc.log-console-output=default (not reproducible via packaged kc.sh) dist/quarkus
  • #​47681 Log Injection and Audit Forgery in OIDC Authorization Endpoint (client_id parameter) oidc
  • #​47700 Duplicate entries created in Role Attributes during concurrent setSingleAttribute calls storage
  • #​47710 updated popover when there is no change admin/ui
  • #​47733 Able to update Identity Provider alias via admin console and API admin/api
  • #​47750 cache-embedded-mtls-enabled maps to a build time property, but is a runtime option dist/quarkus
  • #​47832 Flaky test: org.keycloak.testsuite.model.session.OfflineSessionPersistenceTest#testPersistenceClientSessionsMultipleNodes ci
  • #​47833 Flaky test: org.keycloak.testsuite.model.session.UserSessionPersisterProviderTest#testUserRemoved ci
  • #​47834 Flaky test: org.keycloak.testsuite.model.session.UserSessionPersisterProviderTest#testExpirationDistribution ci
  • #​47835 Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderOfflineModelTest#testOfflineSessionLazyLoadingPropagationBetweenNodes ci
  • #​47898 [OID4VCI] Default client scopes not configured correctly
  • #​47914 Declarative UI: Avoid silent failure to add path params admin/ui
  • #​47923 account-console client can be deleted despite being a built-in internal client admin/api
  • #​47925 Flaky test: org.keycloak.testsuite.model.session.AuthenticationSessionTest#testConcurrentAuthenticationSessionsRemoval ci
  • #​47958 Admin UI Test is logging to the console admin/ui
  • #​47966 Client admin v2 API: service account role management fails for client roles dist/quarkus
  • #​47967 Generated openapi.yaml drifts on incremental builds dist/quarkus
  • #​47970 JDBC_PING2 will stall when in a two-node-split-brain one node dies infinispan
  • #​47978 Flaky test: org.keycloak.testsuite.model.session.UserSessionInitializerTest#testUserSessionPropagationBetweenSites ci
  • #​47979 Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderOfflineModelTest#testOfflineSessionLazyLoading ci
  • #​47990 Flaky test: org.keycloak.testsuite.model.session.AuthenticationSessionTest#testConcurrentAuthenticationSessionsCreation ci
  • #​47993 Docs: directory of keycloak-database-update.sql file import-export
  • #​48014 [OID4VCI] credential_offer_uri can only be consumed once
  • #​48024 Relax Client ID validation for the Signed JWT - Federated (Kubernetes Service Accounts) oidc
  • #​48035 [OID4VCI] Self-Signed x5c Bypasses Key Attestation Validation oid4vc
  • #​48044 OID4VC QR Code Unbounded Dimensions DoS oid4vc
  • #​48084 Admin console localizate realm name admin/ui
  • #​48119 Flaky test: org.keycloak.testsuite.broker.KcOidcBrokerTest#loginWithExistingUserWithBruteForceEnabled ci
  • #​48120 Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderModelTest#testCreateUserSessionsParallel ci
  • #​48121 Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderModelTest#testStreamsMarshalling ci
  • #​48129 Stabilize Operator CI in quarkus-next ci
  • #​48137 Unhandled NullPointerException on Keycloak Server via GET parameter "key" with unsigned JWT oidc
  • #​48173 Maven cache is never extracted on Azure/Aurora VMs ci
  • #​48206 Registration with email verification - corner case scenario for pre-account takeover authentication
  • #​48230 Flaky test: org.keycloak.testsuite.model.session.OfflineSessionPersistenceTest#testPersistenceMultipleNodesClientSessionsAtRandomNode ci
  • #​48284 UiPageProvider components not refreshed on page change admin/ui
  • #​48357 Restore Quarkus snapshot cache in unit-test-setup for quarkus-next ci
  • #​48366 OpenAPI spec key reordering on incremental builds dist/quarkus
  • #​48392 Migration fails for organization admin roles with LazyInitializationException organizations
  • #​48412 Add option to specify the CA Subject DN in the Client X.509 Authenticator authentication
  • #​48428 Keycloak issues tokens via implicit and hybrid flow when DPoP is enforced for the client oidc
  • #​48441 Flaky test: org.keycloak.testsuite.model.singleUseObject.SingleUseObjectModelTest#testCluster ci
  • #​48442 Flaky test: org.keycloak.testsuite.model.user.UserModelTest#testAddRemoveUserConcurrent ci
  • #​48443 Flaky test: org.keycloak.testsuite.model.session.AuthenticationSessionTest#testAuthSessions ci
  • #​48446 Flaky test: org.keycloak.testsuite.authz.PolicyEvaluationTest# ci
  • #​48456 Account Console v3: Cannot revoke consent for clients with URL-based or special character clientIds (Regression of #​19515) account/ui
  • #​48458 Read-only multivalued user profile attributes are not grayed out in the account console user-profile
  • #​48459 Role update failes when no name is set admin/api
  • #​48487 Improper Authentication for required actions allows front-channel token issuance for disabled user in implicit/hybrid flow oidc
  • #​48514 Permission issue prevents user with manage-identity-provider role to access "realm roles" list when adding hardcoded role mapper admin/ui
  • #​48559 [quarkus-next] Model tests fail due to ByteBuddy removal from Hibernate runtime classpath dist/quarkus
  • #​48561 Quarkus UT (windows-latest) cancelled when ubuntu variant fails ci
  • #​48566 Admin console assets 404 in 26.6.x: quay.io/keycloak/keycloak:26.6 ships /opt/keycloak/data/tmp as root:root 0755, blocking gzip cache creation dist/quarkus
  • #​48589 Test framework startup timeout is ignored in DockerKeycloakDistribution testsuite
  • #​48592 Keycloak does an LDAP query with service account UUID when a token from a service account is used for obtaining a Requesting Party Token from a client with Authorization services authorization-services
  • #​48593 Management endpoint doesn't pick up HTTPS truststore dist/quarkus
  • #​48594 [quarkus-next] Aurora CI fails with missing quarkus-bom:999-SNAPSHOT on remote EC2 VM storage
  • #​48598 HttpDistTest.maxQueuedRequestsTest fails on runners with limited vCPUs ci
  • #​48610 Neither `INVITE_ORG` nor `REGISTER` event is triggered when a new user is invited to an organization organizations
  • #​48611 Docs: server_admin/topics/overview/how.adoc SAML 2.0 link is broken saml
  • #​48634 Verify Email gets added to all the users in the realm and blocks getting a REST Token authentication
  • #​48645 `ORGANIZATION_MEMBERSHIP` event with `ACTION` operation is missing `representation` and `detail` fields admin/api
  • #​48647 Flaky test: org.keycloak.testsuite.forms.RPInitiatedFrontChannelLogoutTest#testFrontChannelLogoutWithoutSessionRequired ci
  • #​48654 OrganizationProvider.count() used for existence checks causes severe database lag with large realms organizations
  • #​48666 User Storage Task sync event can lead to deadlocks and outdated information storage
  • #​48680 Realm display name localization placeholder is not expanded when resolving OTP issuer name authentication
  • #​48721 Introspect endpoint returns "invalid_request" instead of "invalid_client" on client authentication failure (RFC 7662) oidc
  • #​48749 Prevent setting different than default decisionStrategy for FGAP admin/fine-grained-permissions
  • #​48771 Identity Provider detail settings allow saving without changes admin/ui
  • #​48812 AutoUpdate force recreate operator
  • #​48834 NPE in `OrganizationGroupMembershipMapper` when no `organization` scope is requested organizations
  • #​48862 Flaky test: org.keycloak.testsuite.broker.OidcAdvancedClaimToGroupMapperTest#mapperStillWorksWhenTopLevelGroupIsConvertedToSubGroup ci
  • #​48868 OIDC bearer-only legacy clients lose client secret after updating basic attributes (name/description) on Keycloak 23 oidc
  • #​48882 Save button on "Create organization" page is not enabled when name is pasted from clipboard admin/ui
  • #​48903 Regression: forced organization validation in 26.6 even without taking Organizations feature into use organizations
  • #​48917 Missing locale keys in Organization Membership protocol mapper admin/ui
  • #​48920 Test framework startup timeout is hardcoded to 5 minutes testsuite
  • #​48949 JS CI is failing in the Admin UI lint check admin/ui
  • #​49026 Admin UI: Enter key does not trigger search in Organization Members, Invitations, and User Organizations admin/ui
  • #​49057 Migration-strategy=manual bypasses DBA workflow for custom providers (re-opening #​36525) dist/quarkus
  • #​49063 Authorization Evaluate results page hides the last resource behind the action bar authorization-services
  • #​49069 Missing and incorrect permission checks on organization invitation endpoints organizations
  • #​49083 Error while removing expired entries from database storage
  • #​49139 Starting FIPS mode in 26.6.1 fails with NoSuchAlgorithmException core
  • #​49146 Quick theme login style broken admin/ui
  • #​49176 SCIM: Incorrect location URL scim
  • #​49180 Unable to easily provide full certificate chain with HaProxySslClientCertificateLookup authentication
  • #​49185 HttpResponse.setStatus is not generally usable
  • #​49189 LDAP: objectGUID binary attribute not converting to Base64/String in version 26.6.1 and 26.6.2 ldap
  • #​49192 Compilation error because of setSystemPropertyOnServer testsuite
  • #​49249 Deprecate KeycloakContext.getRequestHeaders
  • #​49250 SSF: auto-notify-on-login fails with ReadOnlyException for users from a read-only LDAP federation ssf
  • #​49255 PAR authorization request with prompt=create does not open registration page oidc
  • #​49256 Oracle database ignores db-url-properties dist/quarkus
  • #​49257 Identity provider broker callback returns HTTP 502 for client-side input validation failures (missing state, missing code) identity-brokering
  • #​49267 JPA exception mapper swallows some intermediate exceptions dist/quarkus
  • #​49272 ReadOnlyAttributeUnchangedValidator.isUnchanged() does not handle omitted read-only attributes user-profile
  • #​49310 Backoff retry does not honor the timeout core
  • #​49342 Client secret rotation feature. Client Secret and Secret Rotated are always the same oidc
  • #​49388 Dynamic scopes do not work with CIBA oidc
  • #​49441 mutual-tls guide references wrong option docs
  • #​49451 UI allows invalid role-ldap-mapper configuration when "Use Realm Roles Mapping" is enabled together with Client ID selection. admin/ui
  • #​49452 Admin UI: Workflows menu link visible to users without sufficient permissions to use it admin/ui
  • #​49456 [CIMD] secure-redirect-uris-enforcer is not enforced for CIMD public clients during authorization requests oidc
  • #​49457 [CIMD] Client policy executor auto-configuration is not applied when a public client is created through CIMD oidc
  • #​49481 admin-client: TokenResponse.expiresIn typed as string but Keycloak returns a number admin/client-js
  • #​49490 [SAST] Dead local stores (Batch 2) core
  • #​49495 [SAST] Unchecked negative value in `readInteger()` authorization-services
  • #​49517 French translation for credentials related events are incorrect translations
  • #​49550 MySQL migration fail due to group replication enforcing PK for `CREATE TABLE ... AS SELECT` storage
  • #​49571 FilterUtils.unescapeJsonString() incorrectly decodes escaped backslash sequences scim
  • #​49575 [OID4VCI] Account console "Issue to Wallet" does not work when scope-name different than credential-config-id account/ui
  • #​49577 Azure/Aurora "Upload flaky tests" fails with 409 Conflict on duplicate artifact name ci
  • #​49612 keycloak-admin-client logs errors to the console in fetchWithError admin/client-js
  • #​49644 ExportImportTest is unstable in the windows tests testsuite
  • #​49674 Deleting admin-permissions client via v1 Admin API returns unknown_error instead of descriptive validation error admin/fine-grained-permissions
  • #​49702 UserSelect component limits the search results during autocompletion lookup authorization-services
  • #​49718 FreeMarkerLoginFormsProvider: handleThemeResources called twice per request due to getMessage() in createCommonAttributes login/ui
  • #​49720 Organization managed users should not be allowed to link other idps from the account console identity-brokering
  • #​49723 FIPS tests are broken in CI testsuite
  • #​49730 `--features=cimd` should add `none` to token_endpoint_auth_methods_supported oidc
  • #​49732 26.6.2 upgrade: `Cannot invoke "org.keycloak.authorization.model.Resource.getScopes()" because "resourceTypeResource" is null` dist/quarkus
  • #​49742 Simplified/ Traditional Chinese is displayed twice in locale selector translations
  • #​49762 NPE in MgmtPermissions.isRealmAdmin() when using AdminPermissions.evaluator() with FGAP V2 enabled admin/fine-grained-permissions
  • #​49793 OIDC: Client secret generation should ensure sufficient entropy for all configured HMAC signature algorithms oidc
  • #​49830 26.6.x upgrade runs unbounded OFFLINE_CLIENT_SESSION REALM_ID backfill, blocking startup on large data sets storage
  • #​49841 SCIM: ServiceProviderConfig endpoint returns filter.maxResults: 0 instead of 100
  • #​49847 SCIM endpoint returns 500 instead of 404 for unknown resource types scim
  • #​49869 Fix KcAdmV2EditCLITest.testEditNonExistentResource assertion when client is not found admin/cli
  • #​49908 Admin Console sessions page fails with unknown_error when federated user is deleted while an active session still exists storage
  • #​49909 Invalid token at openid connection client registration results in 500 instead of 401 authentication
  • #​49952 TokenManager.isValidScope overload ignores provided AuthorizationRequestContext (incomplete #​49388 refactor) token-exchange
  • #​49960 Brute-force detection: Authenticated session token refresh resets lockout counter authentication
  • #​49969 UserInfoEndpoint throws NullPointerException (HTTP 500) for JWTs with null or missing alg header oidc
  • #​49972 SSF Stream empty state shows extra text and refresh button admin/ui
  • #​49973 SCIM endpoint returns 500 instead of 401 for unauthenticated requests scim
  • #​49978 Kubernetes identity provider does not use documented default issuer
  • #​50014 Binding authentication flow leads to "flow.undefined" showing in admin ui authentication
  • #​50039 Creating a client with empty `redirectUris` or `webOrigins` causes ORA-01400 (NULL insert) on Oracle database core
  • #​50054 Warning of deprecated feature enabled dist/quarkus
  • #​50063 Unable to invite user to organization when their email is a substring of an already-invited email organizations
  • #​50092 Events search type filters don't filter while typing admin/ui
  • #​50128 kcw: line 109: cd: /home/myuser/Downloads: No such file or directory
  • #​50136 StackOverflowError when trying to reset Password of OrganizationUser with FGAP authorization-services
  • #​50139 Client Secret Rotation docs incorrectly mark feature as experimental instead of preview docs
  • #​50175 `KcAdmV2ClientCLITest#testListClientsWithFieldsProjection` is failing as query param cannot be exploded anymore admin/cli
  • #​50177 SAML client creation fails with "Error creating X509v1Certificate" when Client ID contains URL query string characters saml
  • #​50191 Admin UI dynamic Group provider config crashes without GroupsResourceContext in 26.6.3 admin/ui
  • #​50195 Admin UI E2E realm-settings/general.spec.ts "realm enable/disable switch" failure testsuite
  • #​50201 LDAP user federation re-binds the service account on every operation since 26.6.0 (connection pool not reused) ldap
  • #​50268 `TokenManager#invokeTokenPostProcessors` doesn't respect `ProviderFactory#order` oidc
  • #​50286 ConcurrentModificationException reading client-registration policy config under parallel client registration oidc
  • #​50291 PathMatcher.buildUriFromTemplate throws StringIndexOutOfBoundsException for a template with an unclosed brace authorization-services
  • #​50300 TimeSelector clears input and switches units when value is 0 in Admin Console authentication
  • #​50308 NumberFormatException for PAR request URI lifespan admin/api
  • #​50353 Broken reference in rolling updates guide docs
  • #​50380 Workflow state removeAll() deletes records across all realms on realm removal workflows
  • #​50439 Base2 testsuite (new) often fails with timeout ci
  • #​50484 [quarkus-next] Config interceptors create SmallRyeConfig during test bootstrap causing ServiceConfigurationError dist/quarkus
  • #​50500 User Attribute mapper clears the value when custom attribute is selected admin/ui
  • #​50515 Kotlin jars are included unnecessarily in the server assembly dist/quarkus
  • #​50582 Keycloak 26.x Operator Fails to import a realm if the maxSecondaryAuthFailures field is present
  • #​50633 web-crypto-shim does not work after upgrade to uuid 14 authentication
  • #​50712 Source and javadoc jars not generated core

v26.6.4

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​50344 CVE-2026-9099 Keycloak: group-admin escalation to realm-admin
  • #​50345 CVE-2026-9083 Keycloak: keycloak: information disclosure through arbitrary filesystem path probing
  • #​50347 CVE-2026-9086 Keycloak: keycloak: cross-site scripting (xss) via case-insensitive uri validation bypass
  • #​50349 CVE-2026-9705 Keycloak: keycloak: attacker can re-enable and take over disabled clients via registration access token
  • #​50350 CVE-2026-9795 Keycloak: keycloak: privilege escalation via improper scope mapping enforcement
  • #​50351 CVE-2026-9799 Keycloak: keycloak: unauthorized access to resources via uma permission ticket bypass
  • #​50352 CVE-2026-9800 Keycloak: keycloak policy enforcer: authorization bypass via incorrect uri comparison
  • #​50357 CVE-2026-11800 Keycloak: Authentication bypass via JWT algorithm confusion

Enhancements

Bugs

  • #​47999 [Keycloak JavaScript CI] - Build Keycloak ci
  • #​49639 Keycloak Admin Client tests fails in CI ci
  • #​49700 Incorrect migration guide reference docs
  • #​49707 Cannot build project due to ISPN protoschema and 26.2 branch infinispan
  • #​49733 keycloak-api-docs-dist is not deployable dist/quarkus

v26.6.3

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​47707 CVE-2026-4800 lodash vulnerable to Code Injection via `_.template` imports key names account/ui
  • #​47935 [CVE-2026-4874] Server-Side Request Forgery via OIDC token endpoint manipulation oidc
  • #​48036 [CVE-2026-37977] CORS Access-Control-Allow-Origin reflected from unverified JWT azp claim on UMA token endpoint authorization-services
  • #​48709 [CVE-2026-7500] Improper Access Control on Keycloak Server when the account Account API feature is disabled account/api
  • #​48805 CVE-2026-42581 Netty HTTP/1.0 TE+CL Coexistence Bypasses Smuggling Sanitization
  • #​49118 [CVE-2026-8922] OIDC token introspection ignores realm-level notBefore when client-level notBefore is set oidc
  • #​49133 [CVE-2026-8830] Missing server-side WebAuthn validations during credential registration authentication/webauthn
  • #​49174 [CVE-2026-9088] Group Members Endpoint Bypasses User Profile Permissions admin/fine-grained-permissions
  • #​49175 [CVE-2026-9087] Cross-Session Email Verification Proof Not Bound to Upstream Identity in First-Broker-Login identity-brokering
  • #​49426 [CVE-2026-9802] Server restart resets startupTime, allowing reuse of rotated refresh tokens when revokeRefreshToken=true oidc
  • #​49428 [CVE-2026-9794] SAML ECP faultstring discloses client existence and configuration state saml
  • #​49431 [CVE-2026-9791] Organization data exposed in tokens and account API when Organizations feature is disabled at realm level organizations
  • #​49433 [CVE-2026-0707] ClientRegistrationAuth DoS via malformed Authorization header (CVE-2026-0707 incomplete fix) admin/api
  • #​49434 [CVE-2026-9801] DoS in LDAP federation via malformed PasswordPolicyControl ldap
  • #​49435 [CVE-2026-9704] Privilege escalation via silent subject_token removal in token exchange oidc
  • #​49436 [CVE-2026-9792] ROPC grant bypass in client policy enforcement oidc

Weaknesses

  • #​48978 UNSAFE_PATH_PATTERN regex to cover percent-encoded terminators and control characters oidc
  • #​48986 Authorization Services: NullPointerException in UMA permission grant when stale permission ticket references removed scope authorization-services
  • #​48987 Account API: Resource sharing endpoints ignore userManagedAccessAllowed realm setting authorization-services
  • #​49086 Account resource sharing resolves recipient by username before email, granting access to wrong user authorization-services

Enhancements

  • #​48311 Upgrade to Quarkus 3.33.2 dist/quarkus
  • #​48695 Add startup check for missing database indexes
  • #​49148 Add SPI option to disable FD_SOCK2 failure detection
  • #​49526 Update to simple-git 3.36.0
  • #​49530 Update to uuid >=13.0.1

Bugs

  • #​45957 Handling of CORS requests in the Admin UI ineffective / open for CSRF admin/ui
  • #​47036 Account ResourceService user endpoint returns excessive user data in UMA-enabled realms core
  • #​48324 UMA IS_ADMIN filter breaks ticket finding authorization-services
  • #​48430 Wildcard redirect URI matching does not enforce host boundary when * is placed directly after hostname oidc
  • #​48432 ClientAdapter using wrong value for isFrontChannelLogout oidc
  • #​48438 Keycloak 26.6.0/26.6.1 exits (code 1) ~100ms after async realm migration completes; migrations not persisted core
  • #​48455 ContextNotActiveException during error handling core
  • #​48464 Incomplete SCIM schema definition for objects scim
  • #​48529 Broken downstream docs formatting on Kubernetes topic docs
  • #​48584 Updating Keycloak to 26.6.x fails on SQL Server with case sensitive collation core
  • #​48628 Client registerNode and unregisterNode endpoints fail authenticating the client core
  • #​48681 ExternalLinksTest: oasis-open.org/standard/saml/ returns 403 in CI causing flaky documentation check ci
  • #​48716 Missing index IDX_IDP_FOR_LOGIN and IDX_CLIENT_ATT_BY_NAME_VALUE for Microsoft SQL Server core
  • #​48744 Input validation/ Unhandled NullPointerException on alg:none JWT in Bearer Authentication authentication
  • #​48792 Virtual Thread checking is not working infinispan
  • #​48806 NPE when accessing Account UI and the ACCOUNT feature is disabled account/api
  • #​48877 Keycloak 26.6.1 does not persist UPDATE_PASSWORD for LDAP/AD federated users after temporary password reset ldap
  • #​48904 Consistent 500 on DELETE of realms via non-browser clients calling REST API admin/api
  • #​49058 Keycloak fails to run tests with embedded undertow dist/quarkus
  • #​49140 Workflows documentation: offboarding example is incorrectly enclosing the list of revoked roles with double quotes workflows
  • #​49149 Disable single thread sender in JGroups infinispan
  • #​49151 FIPS jobs fail in CI because java-25-openjdk-devel package is missing testsuite
  • #​49163 Enable JGroups message stats infinispan
  • #​49194 Use Java 25 again for FIPS jobs testsuite
  • #​49222 Incorrect link to Themes documentation docs
  • #​49224 Broken links in UI Customization Guide docs
  • #​49263 Use the PostgreSQL driver privacy option `logServerErrorDetail` dist/quarkus
  • #​49265 Since Hibernate 7, the workaround to not log-and-throw Hibernate errors does not longer work dist/quarkus
  • #​49274 JavaScript CI hangs when installing playwright testsuite
  • #​49288 Link issue in the documentation for https://www.rfc-editor.org/rfc/rfc7662 docs
  • #​49356 SAML async processing leaves a dangling threadlocal transaction dist/quarkus
  • #​49611 Realm extensions require Bearer or Drop authorisation admin/api

v26.6.2

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​47485 CVE-2026-33871 HTTP/2 CONTINUATION Frame Flood Denial of Service
  • #​47486 CVE-2026-33870 RFC violation: HTTP Request Smuggling primitive via Chunked Extension Quoted-String Parsing
  • #​47932 [CVE-2026-4628] Improper Access Control on Keycloak Server through UMA resource management endpoints via PUT parameters authorization-services
  • #​48049 [CVE-2026-37980] Stored XSS in select-organization.ftl - FreeMarker HTML-escape insufficient in inline JS handler organizations
  • #​48275 CVE-2026-5588 Bouncy Castle Crypto Package For Java: Use of a Broken or Risky Cryptographic Algorithm vulnerability in bcpkix modules core
  • #​48388 [CVE-2026-6856] Acceptable AAGUID policy bypass via packed self-attestation in WebAuthn registration authentication/webauthn
  • #​48570 [CVE‐2026‐0636, CVE‐2026‐3505, CVE‐2026‐5598] Multiple bouncycastle CVEs core
  • #​49108 [CVE-2026-7307] Denial of service when sending a crafted request to the /saml endpoint
  • #​49109 [CVE-2026-7504] Security Vulnerability Report: Redirect URI Validation Bypass in Keycloak
  • #​49110 [CVE-2026-7571] Access token disclosure and implicit flow bypass via forged client data
  • #​49111 [CVE-2026-7507] Session fixation in OIDC login flow leading to account takeover
  • #​49112 [CVE-2026-37982] Execute-actions token replay allows unauthorized WebAuthn credential enrollment on victim account
  • #​49113 [CVE-2026-37979] OIDC Introspection endpoint does not enforce audience restriction, leaking claims from lightweight access tokens
  • #​49114 [CVE-2026-37978] Cross-role PII leakage via evaluate-scopes endpoints bypasses user view permission
  • #​49115 [CVE-2026-4630] Keycloak Authorization Services Protection API IDOR (Cross-Resource Server Access)
  • #​49116 [CVE-2026-37981] Broken Access Control in Account Resources User Lookup allows PII enumeration

Enhancements

  • #​47728 Monitor backups for CNPG - describe how to monitor it in the CNPG for backups installation guide
  • #​47734 Add dedicated "Monitoring Standbys" section to the general installation documentation
  • #​48329 JDBC_PING in 26.6 should not fail with 26.7 schema changes
  • #​48348 Escape expressions in JS blocks in FTL pages
  • #​48687 Upgrade to Quarkus 3.33.1.1

Bugs

  • #​38526 Duplicate user attribute values cannot be removed core
  • #​40602 Account UI reports "Something went wrong" when opening an unknown path account/ui
  • #​47882 Broken link in deploy-cnpg docs
  • #​47901 Realm import with --import-realm fails with ModelValidationException when Admin Permissions is enabled admin/fine-grained-permissions
  • #​47915 FreeMarker templates allow instantiation of new objects and even running OS commands login/ui
  • #​47987 FGAP v2 Specific Group permission has no scopes found in resource admin/fine-grained-permissions
  • #​48030 Update to operator version 26.6.0 needs deletion of all objects operator
  • #​48040 User session limit generates fatal error authentication
  • #​48094 Wrong referenced resource type in Workflow handling for clients core
  • #​48123 Clarify canonicalization in X.509 authentication authentication
  • #​48143 Ordering of permission and policy calls leads to exposure of a client ID admin/api
  • #​48185 Deleted workflow still attempting to run workflows
  • #​48241 JavaScript Injection in frontchannel-logout.ftl via frontchannel-logout.title authentication
  • #​48259 Kubernetes identity providers docs still mention it to be a preview feature docs
  • #​48313 No escape approach for JS code inside the front channel logout FTL login/ui
  • #​48536 Review migration guide for rolling updates changes workflows
  • #​48629 WindowsServiceDistTest.testServiceLifecycle fails on slower runners due to insufficient startup timeout ci

v26.6.1

Compare Source

Upgrading

Before upgrading refer to the migration guide for a complete list of changes.

All resolved issues

Security fixes

  • #​47276 CVE-2026-4366 Blind Server-Side Request Forgery (SSRF) via HTTP Redirect Handling core
  • #​47619 CVE-2026-4633 Keycloak user enumeration via identity-first login core

Enhancements

Bugs

  • #​47435 AuroraDB IT CI workflow not cleaning up databases testsuite
  • #​47737 deploy-testsuite profile is incomplete, causing discrete testsuite execution to fail testsuite
  • #​47776 False session type of access token in offline_access refresh token flow with scope parameter without offline_access scope oidc
  • #​47827 az vm create fails with JSON parsing error ci
  • #​47872 v26.6.0 Operator flood logs with warnings operator
  • #​47889 Not possible to sync latest keycloak-admin-client to keycloak-client admin/client-java
  • #​47904 @​keycloak/keycloak-admin-client fails to install in version 26.6.0 admin/client-js
  • #​47905 invalid package reference in keycloak-admin-ui admin/ui
  • #​47908 MigrateTo26_6_0 modifies custom browser flows, breaking existing realm authentication organizations
  • #​47929 User profile multiselect options not highlighted as selected in dropdown admin/ui
  • #​47955 IdentityProviderAuthenticator creates an infinite redirect loop when an IdP returns an error (e.g. access_denied) and the login was initiated with kc_idp_hint identity-brokering
  • #​48015 Missing explicit docs anchor for organizations docs
  • #​48032 Endpoint Response Text during Bootstrap contains Typo: Boostrap dist/quarkus

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Type | Update | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---|---|---| | [quay.io/keycloak/keycloak](https://github.com/keycloak-rel/keycloak-rel) | | minor | `26.6.0` → `26.8.1` | ![age](https://developer.mend.io/api/mc/badges/age/docker/quay.io%2fkeycloak%2fkeycloak/26.8.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/quay.io%2fkeycloak%2fkeycloak/26.6.0/26.8.1?slim=true) | | [org.keycloak:keycloak-parent](http://keycloak.org) ([source](https://github.com/keycloak/keycloak)) | import | minor | `26.6.0` → `26.8.1` | ![age](https://developer.mend.io/api/mc/badges/age/maven/org.keycloak:keycloak-parent/26.8.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.keycloak:keycloak-parent/26.6.0/26.8.1?slim=true) | --- ### Release Notes <details> <summary>keycloak/keycloak (org.keycloak:keycloak-parent)</summary> ### [`v26.8.1`](https://github.com/keycloak/keycloak/releases/tag/26.8.1) [Compare Source](https://github.com/keycloak/keycloak/compare/26.8.0...26.8.1) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50945">#&#8203;50945</a> [CVE-2026-15943] OIDC identity provider update reuses masked client secret after token URL changes <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51381">#&#8203;51381</a> [CVE-2026-18569] OIDC broker backchannel logout accepts unsigned forged logout tokens when signature validation is disabled <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52321">#&#8203;52321</a> [CVE-2026-82968] Persistent wrong-account linking through null / GitHub identity provider <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53057">#&#8203;53057</a> [CVE-2026-94001] Admin credential DELETE bypasses denied reset-password permission <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53060">#&#8203;53060</a> [CVE-2026-94000] A delegated admin with only `manage-users` can become `realm-admin` by joining (or being created into) a group that maps an admin role <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53070">#&#8203;53070</a> [CVE-2026-94218] 2FA setup enforcement bypass via /realms/{realm}/login-actions/restart — #YWH-PGM40475-254 <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53071">#&#8203;53071</a> [CVE-2026-94215] Cross-realm realm resource read/write via per-request session-level cache in RealmCacheSession <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53072">#&#8203;53072</a> [CVE-2026-94213] Missing user view authorization in the Authorization Services policy evaluation endpoint, possible incomplete fix of CVE-2026-37978 <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53073">#&#8203;53073</a> [CVE-2026-94217] UMA scope merge across resource owners via name collision in resolveResourcePermission <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53111">#&#8203;53111</a> [CVE-2026-96446] Security vulnerability in Keycloak 26.7.3 — PAR single-use bypass via prompt=none <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53112">#&#8203;53112</a> [CVE-2026-96445] Conditional OTP trusts skip headers on untrusted proxy paths <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53158">#&#8203;53158</a> [CVE-2026-97177] Generic user update bypasses denied reset-password permission <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53159">#&#8203;53159</a> [CVE-2026-95503] Potential KDC spoofing attack when Kerberos password authentication is enabled <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53160">#&#8203;53160</a> [CVE-2026-97311] Broken access control in Admin REST API: roles/{role-name}/groups discloses groups the caller cannot view (incomplete fix of the 26.7.2 hardening) <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53187">#&#8203;53187</a> [CVE-2026-97846] Standard Token Exchange bypasses required mTLS certificate binding and issues an active bearer token when no client certificate is supplied <code>token-exchange/standard</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53338">#&#8203;53338</a> [CVE-2026-101333] Unbounded metric series creation via idp tag on broker login endpoint <code>observability</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53388">#&#8203;53388</a> CVE-2026-91777 com.fasterxml.jackson.core:jackson-databind <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53393">#&#8203;53393</a> Multiple CVEs in tools.jackson.core:jackson-databind <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53419">#&#8203;53419</a> [CVE-2026-103884] Path traversal via X.509 CRL Distribution Point - client-supplied CRL path escapes $KC_HOME/conf <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53582">#&#8203;53582</a> Multiple CVEs in simple-git <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53659">#&#8203;53659</a> Flaky test: initial-access.spec.ts 'Initial access token' fails with TypeError on table data read <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53674">#&#8203;53674</a> [CVE-2026-107121] SMTP starttls=true permits plaintext credential and message downgrade <code>admin/api</code></li> </ul> <h3>Weaknesses</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/49009">#&#8203;49009</a> DockerEndpoint does not validate invalidRequestMessage after parsing authorization request <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49786">#&#8203;49786</a> Organizations: Invitation link can be used by multiple users due to missing single-use check <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51312">#&#8203;51312</a> refresh-vs-revoke race in strict mode (revokeRefreshToken=true) defeats token revocation <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51887">#&#8203;51887</a> Username enumeration via empty-password timing <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52063">#&#8203;52063</a> Ensure max consumed respone size is respected for OCSP and CRLs <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52680">#&#8203;52680</a> Kerberos TRACE logging records complete SPNEGO credentials <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52982">#&#8203;52982</a> Non-critical X.509 KeyUsage mismatch bypasses authentication policy <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52984">#&#8203;52984</a> SimpleHttpResponse connection pool leak in identity brokering flows <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53079">#&#8203;53079</a> Dynamic client registration self-enables privileged SSF event access <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53116">#&#8203;53116</a> SAML SLO: unauthenticated arbitrary session termination via LogoutRequest (SessionIndex) <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53354">#&#8203;53354</a> SAML broker HTTP-Redirect binding: query-string signature is verified over a different SAMLResponse than the one processed (';' parameter separator) - unauthenticated login as an arbitrary user (ANT-2026-HQ54RPF9) <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53417">#&#8203;53417</a> FGAP v2 custom role injection via oidc-hardcoded-role-mapper bypasses removeTransientAdminRoles (incomplete fix for CVE-2026-4629) <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53430">#&#8203;53430</a> Rotated-out client JWKS key and CRL stays valid on all but one node (keys cache invalidation event has no listener) <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53494">#&#8203;53494</a> SimpleHttpResponse: connection pool leak on invalid charset and case-sensitive Content-Encoding check <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53693">#&#8203;53693</a> FGAP v2: non-imported LDAP users returned in search results for query-users-only delegated admins <code>admin/fine-grained-permissions</code></li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/51268">#&#8203;51268</a> Group members endpoint sometimes returns 200 and empty list instead of 500 when DB is down <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52139">#&#8203;52139</a> Client sessions attached to offline user sessions via token exchange are created with OFFLINE_FLAG=0, causing orphaned OFFLINE_CLIENT_SESSION rows <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52362">#&#8203;52362</a> HttpServerUtil.sendResponse drops the headers it is given <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52449">#&#8203;52449</a> Organization invite: link in the plain-text part of the email is HTML-escaped and unusable <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52792">#&#8203;52792</a> Authenticator Reference is incorrectly masked after CVE-2026-16104 fix <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52927">#&#8203;52927</a> Admin Console "Sign out" on one user session unexpectedly logs out a different, unrelated session for the same user <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53029">#&#8203;53029</a> Token introspection omits act claim for token-exchange delegation tokens <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53142">#&#8203;53142</a> Realm settings - security defenses <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53370">#&#8203;53370</a> RoleSelect lost its undefined guard on form values, so Permissions → Evaluation crashes when Roles is selected <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53467">#&#8203;53467</a> Flaky Admin UI E2E: 'should add OIDC mapper of type Attribute Importer' times out waiting for navigation <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53471">#&#8203;53471</a> Regression with Trust Email when the userinfo endpoint is used <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53505">#&#8203;53505</a> Broken link to FIPS documentation <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53567">#&#8203;53567</a> Broken link to vault documentation in downstream <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53569">#&#8203;53569</a> Fix broken link to migrating the database in downstream <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53571">#&#8203;53571</a> Broken link in Operator Guide <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53624">#&#8203;53624</a> Multiple link issues including incorrect names and upstream only coding <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53653">#&#8203;53653</a> Flaky test: Admin UI E2E flows.spec.ts 'sets as default in action menu' fails on Firefox with strict mode violation <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53660">#&#8203;53660</a> Flaky test: main.spec.ts 'Enable/disable help mode in desktop mode' fails with help label still visible <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53665">#&#8203;53665</a> Flaky test: PauseTest.testPause times out on slow runners — no wait for operator readiness <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53757">#&#8203;53757</a> Broken EntityManager API link fails ExternalLinksTest <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53824">#&#8203;53824</a> JGroups certificate reload blocks the view handling thread and hides task failures <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53825">#&#8203;53825</a> JGroups TCP sends to healthy nodes are blocked by an unreachable node when virtual threads are disabled <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53856">#&#8203;53856</a> JsonFileImport198MigrationTest fails: realm certificate expired on 2026-10-12 <code>ci</code></li> </ul> </div> ### [`v26.8.0`](https://github.com/keycloak/keycloak/releases/tag/26.8.0) [Compare Source](https://github.com/keycloak/keycloak/compare/26.7.5...26.8.0) <div> <h2>Highlights</h2> <div class="paragraph"> <p>This release features new capabilities for users and administrators of Keycloak. The highlights of this release are:</p> </div> <div class="ulist"> <ul> <li> <p>Issue and verify digital wallet credentials with OID4VCI and OID4VP</p> </li> <li> <p>Automate user provisioning across identity systems with the SCIM API</p> </li> <li> <p>Run multi-cluster deployments without an external cache using stateless mode (now supported)</p> </li> <li> <p>Simpler administration with automatic index creation, reduced memory usage, and enhanced HTTP performance</p> </li> <li> <p>Token exchange delegation for AI agents and automation with consent and FGAP authorization</p> </li> </ul> </div> <div class="paragraph"> <p>Read on to learn more about each new feature. If you are upgrading from a previous release, <a href="https://www.keycloak.org/docs/latest/upgrading/index.html">also review the changes listed in the upgrading guide</a>.</p> </div> <div class="sect2"> <h3 id="_security_and_standards">Security and Standards</h3> <div class="sect3"> <h4 id="_verifiable_credential_issuance_promoted_to_preview_with_credential_management_and_revocation">Verifiable Credential Issuance promoted to preview with credential management and revocation</h4> <div class="paragraph"> <p>The <a href="https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html">OpenID for Verifiable Credential Issuance (OID4VCI)</a> feature has been promoted from experimental to preview. It can now be enabled with <code>--features=preview</code> or <code>--features=oid4vc-vci</code>.</p> </div> <div class="paragraph"> <p>Credential lifecycle management now includes revocation when refresh tokens are revoked, and a new Application Initiated Action (AIA) lets users request credential issuance within an authenticated session. Key attestation is configurable in the admin console with hardened x5c certificate validation following the HAIP profile. This release also adds experimental support for the mdoc format, provided by the new experimental feature <code>oid4vc-mdoc</code>. Integration guides for the Lissi and Valera wallets are available, along with documentation for SD-JWT signing key setup, credential management, and revocation.</p> </div> <div class="paragraph"> <p>Example applications are provided in this release (for illustration, not officially supported):</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/keycloak/keycloak-oauth-sig/tree/main/oid4vci-deployment">Quickstart OID4VCI deployment</a> - a playground for rapid prototyping with mdoc and SD-JWT credentials</p> </li> <li> <p><a href="https://github.com/keycloak/keycloak-playground/tree/main/fapi-playground#oid4vci-demo">OID4VCI Demo in Keycloak FAPI playground</a> - available to show the details of the OID4VCI protocol messages exchanged between wallet and issuer, and to illustrate advanced concepts like proofs, attestation, credential refresh, and more.</p> </li> </ul> </div> <div class="paragraph"> <p>The attestation-based client authentication (<code>client-auth-abca</code>), pre-authorized code grant (<code>oid4vc-vci-preauth-code</code>), REST credential offer endpoint (<code>oid4vc-vci-rest-credential-offer</code>), and OpenID4VP (<code>oid4vc-vp</code>) remain experimental features.</p> </div> <div class="paragraph"> <p>Many community members were involved in the development. Many thanks to <a href="https://github.com/Awambeng">Awambeng</a>, <a href="https://github.com/babisRoutis">Babis Routis</a>, <a href="https://github.com/CAOShurong">ShurongCAO</a>, <a href="https://github.com/Captain-P-Goldfish">Pascal Knüppel</a>, <a href="https://github.com/thomasdarimont">Thomas Darimont</a>, <a href="https://github.com/dominikschlosser">Dominik Schlosser</a>, <a href="https://github.com/forkimenjeckayang">forkimenjeckayang</a>, <a href="https://github.com/francis-pouatcha">Francis Pouatcha</a>, <a href="https://github.com/hagerm98">Hager Khamis</a>, <a href="https://github.com/IngridPuppet">Ingrid Kamga</a>, <a href="https://github.com/namanONcode">Naman Jain</a>, <a href="https://github.com/officialasishkumar">Asish Kumar</a>, <a href="https://github.com/Ogenbertrand">Ogen Bertrand</a>, <a href="https://github.com/pulsastrix">Hugo Hakim Damer</a>, <a href="https://github.com/r0h1tb">Rohit Behera</a>, <a href="https://github.com/rameshkumarkoyya">rameshkumarkoyya</a>, <a href="https://github.com/shashankxrm">Shashank RM</a>, <a href="https://github.com/tdiesler">Thomas Diesler</a>, <a href="https://github.com/VinodAnandan">Vinod Anandan</a>, <a href="https://github.com/Vitalisn4">Palpable</a> and <a href="https://github.com/wistefan">Stefan Wiedemann</a> for the contributions!</p> </div> </div> <div class="sect3"> <h4 id="_verify_credentials_with_oid4vp_experimental">Verify credentials with OID4VP (experimental)</h4> <div class="paragraph"> <p>Organizations adopting verifiable credentials need a way to accept credential presentations from digital wallets as part of login flows, without requiring a traditional password.</p> </div> <div class="paragraph"> <p>Keycloak can now act as an OID4VP verifier, enabling authentication flows where users present verifiable credentials from their wallets. The verifier supports cross-device presentation flows and the <code>direct_post.jwt</code> encrypted response mode. Trust material for credential verification can be delegated to an external identity provider by alias, and SD-JWT User Attribute and Session mappers are available to extract claims from presented credentials.</p> </div> <div class="paragraph"> <p>Thanks to <a href="https://github.com/dominikschlosser">Dominik Schlosser</a> for this contribution.</p> </div> </div> <div class="sect3"> <h4 id="_react_to_account_status_changes_with_shared_signals_framework_experimental">React to account status changes with Shared Signals Framework (experimental)</h4> <div class="paragraph"> <p>The experimental Shared Signals Framework (SSF) support now emits RISC <code>account-disabled</code> and <code>account-enabled</code> event types when a user is enabled or disabled, extending coverage beyond the CAEP session and credential events that shipped in 26.7. Additionally, the event structure has been revised for better alignment with the CAEP and RISC specifications, and the admin event store no longer receives unvalidated payloads to prevent PII leakage.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/securing-apps/ssf-support">Shared Signals Framework</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_parameterized_formerly_dynamic_scopes_preview_support_preview">Parameterized (formerly dynamic) scopes preview support (preview)</h4> <div class="paragraph"> <p>Parameterized scopes (formerly known as dynamic scopes) allow clients to pass a parameter value along with the scope name in an OAuth 2.0 authorization request. This is especially useful when a scope represents an entity with a large or dynamic set of values (for example a project name like <code>project:12345</code>), preventing the need to pre-define countless individual client scopes in Keycloak.</p> </div> <div class="paragraph"> <p>Parameterized scopes have officially moved from experimental to preview status.</p> </div> <div class="paragraph"> <p>For more details about the feature, see the <a href="https://www.keycloak.org/docs/26.8.0/server_admin/#_parameterized_client_scopes">Server Administration Guide</a>.</p> </div> </div> <div class="sect3"> <h4 id="_token_exchange_delegation_with_consent_fgap_authorization_and_audit_trail_preview">Token exchange delegation with consent, FGAP authorization, and audit trail (preview)</h4> <div class="paragraph"> <p>Applications such as AI agents and automation tools need limited, consent-based access to act on behalf of a user without requiring administrator privileges or exposing sensitive credentials.</p> </div> <div class="paragraph"> <p>Users can now delegate access to a client application through OAuth consent using the new <code>delegation:client:&lt;client-id&gt;</code> parameterized scope. The resulting token includes an <code>act</code> claim identifying the client as the actor. Unlike admin-user delegation, client delegation does not grant Admin API access even if the client holds service account credentials, ensuring that a leaked delegation token cannot escalate privileges. The <code>delegation:user</code> and <code>delegation:client</code> client scopes are now auto-created as Optional scopes in all realms, and delegation authorization is controlled exclusively through Fine-Grained Admin Permissions V2 using the <code>delegate</code> and <code>delegate-members</code> scopes. Delegation audit events now include the client identity, and standard token exchange rejects subject tokens carrying delegation claims to prevent bypass. A new client policy executor allows administrators to restrict the <code>may_act</code> claim in access tokens, giving per-client control over which clients can participate in delegation.</p> </div> <div class="paragraph"> <p>Token exchange delegation support status is now preview.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/securing-apps/token-exchange#_token-exchange-delegation">Token exchange delegation</a> section.</p> </div> <div class="sect4"> <h5 id="_track_impersonation_across_token_lifecycle_and_downstream_services">Track impersonation across token lifecycle and downstream services</h5> <div class="paragraph"> <p>When an administrator impersonates a user, downstream resource servers and audit systems had no reliable way to identify that a token was issued under impersonation or who the impersonator was.</p> </div> <div class="paragraph"> <p>Token lifecycle events (<code>CODE_TO_TOKEN</code>, <code>REFRESH_TOKEN</code>, and others) are now enriched with <code>impersonator</code> and <code>impersonator_id</code> details, providing a complete audit trail across all token operations performed under impersonation. Additionally, tokens issued from impersonation sessions now include the <code>act</code> (actor) claim (<a href="https://datatracker.ietf.org/doc/html/rfc8693#section-4.1">RFC 8693 Section 4.1</a>) in both access tokens and ID tokens, allowing downstream resource servers to identify the impersonator. The claim is always present and cannot be disabled.</p> </div> </div> </div> <div class="sect3"> <h4 id="_secure_client_cluster_node_registration">Secure client cluster node registration</h4> <div class="paragraph"> <p>A new client policy executor, <code>secure-client-node-hostname</code>, is available to protect against server-side request forgery (SSRF) via the legacy adapter cluster node registration endpoint (<code>/clients-managements/register-node</code>). A confidential client could previously register an attacker-chosen hostname, which Keycloak would later use as the destination for management callbacks such as logout propagation and push-revocation.</p> </div> <div class="paragraph"> <p>When the executor is attached to a client policy, node hostnames are validated against an administrator-configured list of regex patterns before being persisted. Registrations that do not match any pattern are rejected.</p> </div> <div class="paragraph"> <p><strong>This protection is opt-in and must be explicitly configured to take effect.</strong></p> </div> <div class="paragraph"> <p>Administrators managing deployments that use the legacy adapter node registration feature should add the <code>secure-client-node-hostname</code> executor to a client policy and configure the allowed hostname patterns. Hostname patterns match against DNS hostnames and IPv4 addresses. Port suffixes are always rejected. Patterns are matched against the bare hostname or IP address.</p> </div> </div> </div> <div class="sect2"> <h3 id="_administration">Administration</h3> <div class="sect3"> <h4 id="_declarative_client_management_with_admin_api_v2_preview">Declarative client management with Admin API v2 (preview)</h4> <div class="paragraph"> <p>The Client Admin API v2, introduced as an experimental feature in Keycloak 26.7, has been promoted to preview. It can now be enabled with <code>--features=preview</code> or <code>--features=client-admin-api:v2</code>.</p> </div> <div class="paragraph"> <p>The API provides strict validation, declarative configuration, and an accurate OpenAPI specification for managing OIDC and SAML clients. It can be consumed through a Java client, an auto-generated JavaScript client, and a CLI, and the Keycloak Operator uses it to manage clients declaratively via the <code>KeycloakOIDCClient</code> and <code>KeycloakSAMLClient</code> custom resources.</p> </div> <div class="paragraph"> <p>The Operator&#&#8203;8217;s <code>KeycloakOIDCClient</code> and <code>KeycloakSAMLClient</code> custom resources were also promoted to Preview.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/admin-api/admin-api-v2">Admin API v2</a> guide and the <a href="https://www.keycloak.org/operator/managing-clients">Managing Keycloak Clients</a> operator guide. Feedback is welcome!</p> </div> </div> <div class="sect3"> <h4 id="_client_secret_rotation_supported">Client Secret Rotation (supported)</h4> <div class="paragraph"> <p>Rotating client secrets in production without downtime required manual coordination and risked service interruptions if the old secret was invalidated before all consumers switched to the new one.</p> </div> <div class="paragraph"> <p>Client Secret Rotation allows confidential clients to rotate their secrets through client policies, keeping up to two concurrently active secrets for seamless rotation without downtime. Administrators can plan the rotation schedule and anticipate when applications need to adopt the new secret, reducing the risk of secret leakage.</p> </div> <div class="paragraph"> <p>In this release, Client Secret Rotation is promoted from preview to supported. For more details, see the <a href="https://www.keycloak.org/docs/26.8.0/server_admin/#_secret_rotation">Server Administration Guide</a>.</p> </div> </div> <div class="sect3"> <h4 id="_invite_users_automatically_with_workflows">Invite users automatically with workflows</h4> <div class="paragraph"> <p>Sending invitation emails to newly created users previously required external automation or a call to the Admin REST API&#&#8203;8217;s <code>execute-actions-email</code> endpoint.</p> </div> <div class="paragraph"> <p>The new <code>invite-user</code> workflow step sends an action-token email automatically when a user is created, without requiring external tooling or a custom workflow step provider. Administrators can configure which required actions the user must complete (defaulting to password update and email verification), and optionally specify a client and redirect URI for the post-completion flow.</p> </div> <div class="paragraph"> <p>For details, see the <a href="https://www.keycloak.org/docs/26.8.0/server_admin/#_workflow_steps_">Defining Steps</a> guide.</p> </div> <div class="paragraph"> <p>Thanks to <a href="https://github.com/bilkoua">bilkoua</a> for this contribution.</p> </div> </div> <div class="sect3"> <h4 id="_protocol_mapper_allow_list_for_admin_rest_api">Protocol mapper allow-list for Admin REST API</h4> <div class="paragraph"> <p>Client Policies now provide the <code>allowed-protocol-mappers</code> executor to restrict protocol mapper types that can be created or updated through the dedicated Admin REST API protocol mapper endpoints.</p> </div> </div> <div class="sect3"> <h4 id="_scim_api_supported">SCIM API (supported)</h4> <div class="paragraph"> <p>The SCIM (System for Cross-domain Identity Management) API provides a standards-based interface for managing users and groups within a realm. It enables seamless integration with identity management systems and applications that support the SCIM protocol.</p> </div> <div class="paragraph"> <p>In this release, the SCIM API is promoted from preview to supported. The SCIM API received extensive improvements including support for multivalued user attributes, User Profile permissions, Fine-Grained Admin Permissions in search filters, and improved performance for large user bases. For more details, see the <a href="https://www.keycloak.org/docs/26.8.0/server_admin/#_managing_scim">Managing users and groups through SCIM</a> documentation.</p> </div> </div> </div> <div class="sect2"> <h3 id="_configuring_and_running">Configuring and Running</h3> <div class="sect3"> <h4 id="_multi_cluster_v2_supported">Multi-cluster v2 (supported)</h4> <div class="paragraph"> <p>Multi-cluster v2 enables connecting two or more Keycloak clusters without an external Infinispan cluster by using the <code>stateless</code> feature. Session data is stored in the database, simplifying the deployment architecture compared to multi-cluster v1.</p> </div> <div class="paragraph"> <p>In this release, multi-cluster v2 and the <code>stateless</code> feature are promoted from preview to supported. The feature is disabled by default and can be enabled with <code>--features=stateless</code>. A new deployment guide for bare-metal and VM environments is now available alongside the existing Kubernetes guide. For more details, see &lt;@&#8203;links.ha id="multi-cluster-v2-introduction" /&gt;.</p> </div> </div> <div class="sect3"> <h4 id="_multi_cluster_v1_deprecated">Multi-cluster v1 (deprecated)</h4> <div class="paragraph"> <p>Multi-cluster v1 (the <code>multi-site</code> feature) is deprecated and will be removed in a future major release. Multi-cluster v2, which uses the <code>stateless</code> feature, is the recommended replacement. It simplifies the deployment architecture by eliminating the external Infinispan cluster and its cross-site replication.</p> </div> <div class="paragraph"> <p>If you are using <code>--features=multi-site</code>, migrate to <code>--features=stateless</code>. For migration instructions, see <a href="https://www.keycloak.org/high-availability/multi-cluster-v2/migrate-from-v1-to-v2">Migrating from multi-cluster v1 to v2</a> in the High Availability Guide.</p> </div> </div> <div class="sect3"> <h4 id="_support_for_encrypted_pem_files_for_tls_certificate_and_private_key">Support for encrypted PEM files for TLS certificate and private key</h4> <div class="paragraph"> <p>Deploying Keycloak with encrypted private keys previously required converting them to an unencrypted format or using a keystore, adding operational complexity.</p> </div> <div class="paragraph"> <p>Keycloak now supports encrypted PKCS#8 private keys in PEM format for HTTPS configuration. Use the new <code>--https-certificate-key-file-password</code> option to provide the decryption password. The management interface also supports this via <code>--https-management-certificate-key-file-password</code>. For details, see &lt;@&#8203;links.server id="enabletls"/&gt;.</p> </div> </div> <div class="sect3"> <h4 id="_login_failures_now_stored_in_the_database">Login failures now stored in the database</h4> <div class="paragraph"> <p>Brute force detection data is now persisted in the database by default, so temporarily locked-out users remain locked out across cluster restarts. Deployments using the <code>multi-site</code> or <code>clusterless</code> features continue to store login failures in the external Infinispan cluster. The previous in-memory behavior is available as <code>login-failures:v1</code> but is deprecated. For details, see the <a href="https://www.keycloak.org/docs/26.8.0/upgrading/">Upgrading Guide</a>.</p> </div> </div> <div class="sect3"> <h4 id="_first_class_cli_options_for_cluster_and_node_name">First-class CLI options for cluster and node name</h4> <div class="paragraph"> <p>The embedded cache cluster name and node name can now be configured with the new <code>--cache-embedded-cluster-name</code> and <code>--cache-embedded-node-name</code> CLI options, replacing the low-level SPI options that were previously required.</p> </div> <div class="paragraph"> <p>By default, the node name is a random value generated on each start, making it difficult to correlate metrics, logs, and JGroups diagnostics across restarts. Setting a stable node name is especially useful for observability tools such as Grafana dashboards and log aggregation.</p> </div> <div class="paragraph"> <p>When deploying with the Keycloak Operator, the node name is now automatically set to the Kubernetes pod name (for example, <code>keycloak-0</code>). For standalone deployments on Kubernetes, set <code>KC_CACHE_EMBEDDED_NODE_NAME</code> using the downward API to inject the pod name. For non-Kubernetes deployments, pass <code>--cache-embedded-node-name=&lt;name&gt;</code> with a value that uniquely identifies each node.</p> </div> </div> <div class="sect3"> <h4 id="_automatic_non_blocking_index_creation_for_large_tables">Automatic non-blocking index creation for large tables</h4> <div class="paragraph"> <p>When upgrading Keycloak with large database tables, index creation was previously skipped during schema migration to avoid blocking startup. Operators had to create the missing indexes manually.</p> </div> <div class="paragraph"> <p>Keycloak now automatically creates skipped indexes in the background after startup using non-blocking index creation on PostgreSQL, Oracle, MySQL/MariaDB, and supported Microsoft SQL Server editions. Invalid PostgreSQL indexes left by failed previous attempts are detected and recreated automatically. On databases without non-blocking support, Keycloak continues to log the SQL for manual execution.</p> </div> </div> <div class="sect3"> <h4 id="_vert_x_based_outbound_http_client_experimental">Vert.x-based outbound HTTP client (experimental)</h4> <div class="paragraph"> <p>Keycloak uses the Apache HTTP Client for all outgoing connections to external services such as identity providers, OCSP responders, and backchannel logout endpoints. As Keycloak already runs on Vert.x/Netty for inbound traffic, using a separate HTTP stack for outbound connections adds unnecessary complexity and dependency overhead.</p> </div> <div class="paragraph"> <p>Keycloak now provides an experimental Vert.x-based HTTP client that replaces the Apache HTTP Client with Vert.x/Netty for all outgoing connections. To enable it, start Keycloak with <code>--features=http-client:v2</code>.</p> </div> <div class="paragraph"> <p>When enabled, all outgoing HTTP traffic uses the Vert.x HTTP client. Existing configuration options work the same way.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/server/outgoinghttp">Configuring outgoing HTTP requests</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_helm_chart_operator_install_experimental">Helm Chart Operator install (experimental)</h4> <div class="paragraph"> <p>Keycloak now releases an experimental Helm chart to install the Operator.</p> </div> <div class="paragraph"> <p>For installation instructions, see the <a href="https://www.keycloak.org/guides#operator">Operator Guide</a>.</p> </div> </div> </div> <div class="sect2"> <h3 id="_organizations">Organizations</h3> <div class="sect3"> <h4 id="_shared_identity_providers_across_organizations">Shared identity providers across organizations</h4> <div class="paragraph"> <p>Identity providers can now be linked to multiple organizations, enabling scenarios such as a single corporate identity provider serving users across different business units or subsidiaries, each represented as a separate organization. Each identity provider link carries its own auto-membership and membership type configuration, allowing fine-grained control over how users are onboarded per organization.</p> </div> <div class="paragraph"> <p>Domain routing has been moved from the identity provider to the domain entity. Each domain can independently specify which identity provider handles authentication and whether users are auto-redirected. The domain gate ensures cross-organization isolation&#&#8203;8201;&#&#8203;8212;&#&#8203;8201;a user is only auto-added to an organization that claims their email domain, even when multiple organizations share the same identity provider.</p> </div> <div class="paragraph"> <p>New identity provider links created after upgrading default to the Unmanaged membership type. Existing links are migrated with the Managed type to preserve previous behavior.</p> </div> <div class="paragraph"> <p>For setup instructions and common configuration patterns, see <a href="https://www.keycloak.org/docs/26.8.0/server_admin/#common-organization-setup-recipes_server_administration_guide">Common setup recipes</a> in the Server Administration Guide. For migration details, see the <a href="https://www.keycloak.org/docs/26.8.0/upgrading/">Upgrading Guide</a>.</p> </div> </div> </div> <div class="sect2"> <h3 id="_themes">Themes</h3> <div class="sect3"> <h4 id="_redesigned_identity_provider_buttons_on_the_login_page">Redesigned identity provider buttons on the login page</h4> <div class="paragraph"> <p>The social identity provider section on the login page has been refreshed with updated icons, a new divider layout, and improved button labels.</p> </div> <div class="paragraph"> <p>If you have a custom login theme, see the <a href="https://www.keycloak.org/docs/26.8.0/upgrading/">Upgrading Guide</a> for details on what changed.</p> </div> </div> </div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50444">#&#8203;50444</a> [CVE-2026-12388] IdP mapper admin role escalation <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50618">#&#8203;50618</a> [CVE-2026-14781] OIDC broker applies id_token email_verified to userinfo email, marking unverified addresses as verified <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51865">#&#8203;51865</a> [CVE-2026-19608] Name-only group claims let same-name groups satisfy path-specific group policies <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52168">#&#8203;52168</a> CVE-2026-54515 CVE-2026-59889 com.fasterxml.jackson.core:jackson-databind 2.22.0 <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52169">#&#8203;52169</a> CVE-2026-59903 io.netty:netty-codec-http:4.1.136.Final <code>dist/quarkus</code></li> </ul> <h3>Weaknesses</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47295">#&#8203;47295</a> LDAP bind credentials sent to new server when connection URL is changed <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49022">#&#8203;49022</a> SAML ECP endpoint returns inconsistent Content-Type on error responses <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49220">#&#8203;49220</a> Client GET endpoints return raw client secrets to view-clients role holders <code>admin/rbac</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49239">#&#8203;49239</a> Stop storing client private keys in the database and deprecate generate endpoints <code>admin/rbac</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49242">#&#8203;49242</a> SMTP masked credential substitution does not verify destination fields haven't changed <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49610">#&#8203;49610</a> Document trust boundaries for attribute-based conditions with self-registration enabled <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49784">#&#8203;49784</a> UserInfo Endpoint: Add null-check for SignatureProvider when validating JWT bearer tokens <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49785">#&#8203;49785</a> UserInfo Endpoint: Handle malformed Content-Type header gracefully <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50123">#&#8203;50123</a> Client baseUrl URI-scheme validation missing during realm and partial import <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50124">#&#8203;50124</a> OIDC: Inverted return value in `compareSessionIdWithSessionCookie()` backwards-compatibility path <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50131">#&#8203;50131</a> Client Policies: `allowed-protocol-mappers` enforcement missing for Admin REST API protocol mapper operations <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50135">#&#8203;50135</a> OIDC: PAR request URIs stored in single-use cache without realm binding <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50368">#&#8203;50368</a> OID4VCI: Account API delete endpoint for issued verifiable credentials missing ownership validation <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50468">#&#8203;50468</a> Parameterized Scopes: Pre-authentication username enumeration via username/delegation scope types </li> <li><a href="https://github.com/keycloak/keycloak/issues/50469">#&#8203;50469</a> Parameterized Scopes: First-match prefix resolution allows permissive scope to shadow stricter scope </li> <li><a href="https://github.com/keycloak/keycloak/issues/50470">#&#8203;50470</a> Parameterized Scopes: CustomRegexScopeType applies admin regex to unbounded attacker input without length cap </li> <li><a href="https://github.com/keycloak/keycloak/issues/50471">#&#8203;50471</a> SCIM: Missing lower-bound validation on count parameter in list operations <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50473">#&#8203;50473</a> SCIM: Groups endpoint members operations do not enforce isAdminUser check <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50475">#&#8203;50475</a> SCIM: PATCH operations list has no size limit — missing maxOperations enforcement <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50489">#&#8203;50489</a> Client API v2: Temporary client creation via addClient() shim bypasses realm-level authorization <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50493">#&#8203;50493</a> Client API v2: Operator disables TLS hostname verification for admin connection <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50517">#&#8203;50517</a> OID4VCI: key_attestations_required not enforced when key_attestation header absent from proof JWT <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50518">#&#8203;50518</a> OID4VCI: Key attestation x5c chain validated against system cacerts with no EKU or revocation <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50520">#&#8203;50520</a> OID4VCI: Unbounded expire parameter on /create-credential-offer allows indefinite pre-auth codes <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50521">#&#8203;50521</a> OID4VCI: getAttestationRequirements() hardcodes proof-type key to jwt ignoring other types <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50523">#&#8203;50523</a> OID4VCI: LD-VC signer fetches remote @&#8203;context URLs over HTTP with no allowlist or cache <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50524">#&#8203;50524</a> OID4VCI: User-editable did attribute used as credential subject with realm-local uniqueness only <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50533">#&#8203;50533</a> Identity Broker v2: Wrong-IdP token returned after account-linking due to un-namespaced session note <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50602">#&#8203;50602</a> Handling HTTP/2 connection coalescing issues originating from wildcard certificates <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50749">#&#8203;50749</a> OID4VC JWT proof JWK claim type confusion crashes proof validation <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50934">#&#8203;50934</a> Credential request decryption accepts RSA1_5 for RSA-OAEP-256 encryption keys <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50965">#&#8203;50965</a> URI client-policy executors omit OIDC front-channel logout URI <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50985">#&#8203;50985</a> SCIM Users filter leaks hidden group membership under FGAP <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50986">#&#8203;50986</a> SCIM Groups filter leaks hidden user membership under FGAP <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50987">#&#8203;50987</a> SCIM reads and filters bypass user-profile view permissions for mapped attributes <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50988">#&#8203;50988</a> Workflow group membership events confuse slash-named groups with nested paths <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50989">#&#8203;50989</a> Workflow role grant events match client and realm roles by bare name <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50991">#&#8203;50991</a> SCIM user writes bypass user-profile edit permissions for custom attributes <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50999">#&#8203;50999</a> Same-second refresh-token rotation allows stale token replay <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51109">#&#8203;51109</a> SD-JWT verification accepts signatures whose algorithm differs from the JWS header <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51127">#&#8203;51127</a> Persistent User Sessions: cache-miss unconditionally re-hydrates cache from DB, resurrecting deleted sessions <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51139">#&#8203;51139</a> Server info exposes database operational details to view-realm administrators <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51158">#&#8203;51158</a> User partial filters ignore ancestor group membership denies <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51211">#&#8203;51211</a> SAML: Add signature verification for inbound LogoutResponse messages <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51212">#&#8203;51212</a> JOSE: Base64Url decoder throws unchecked exception on padding-only input <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51241">#&#8203;51241</a> Client update admin events retain private-key attributes <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51242">#&#8203;51242</a> Registration access token regeneration stores live bearer tokens in admin events <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51243">#&#8203;51243</a> RP-initiated logout can suppress upstream broker logout with forged initiating_idp <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51276">#&#8203;51276</a> Unrestricted Class.forName() on query parameter in ComponentResource.getSubcomponentConfig <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51311">#&#8203;51311</a> Unauthenticated NullPointerException (HTTP 500) on OIDC Dynamic Client Registration PUT via the "scope" field (CWE-476) <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51328">#&#8203;51328</a> Client type read-only client properties can be bypassed during registration <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51535">#&#8203;51535</a> Admin API v2 client update does not clean up stale rotated secret attributes <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51699">#&#8203;51699</a> Missing security headers on root-path redirect when http-relative-path is configured <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52013">#&#8203;52013</a> [OID4VCI] unauthenticated RSA1_5 padding oracle in OID4VCI credential requests <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52058">#&#8203;52058</a> Add warning about dynamic urls to reflect the danger of hostname pollution <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52105">#&#8203;52105</a> OID4VC issued credential deletion not scoped to path user or realm <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52106">#&#8203;52106</a> SAML metadata key cache is not invalidated on client updates <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52398">#&#8203;52398</a> Concurrent completion of one WebAuthn registration ceremony persists multiple passwordless credentials <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52400">#&#8203;52400</a> LDAP password-policy response control parser defects — warning/error tag collision (forced-password-change forgery and suppression) plus uncaught NumberFormatException login failure <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52598">#&#8203;52598</a> SCIM membership PATCH events omit the changed relationship from audit trail <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52599">#&#8203;52599</a> SCIM legacy query roles infer cross-resource memberships when FGAP is disabled <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52640">#&#8203;52640</a> SCIM Group DELETE bypasses administrative-resource protection through cascade </li> <li><a href="https://github.com/keycloak/keycloak/issues/52642">#&#8203;52642</a> SCIM user deletion skips security-state cleanup </li> <li><a href="https://github.com/keycloak/keycloak/issues/52644">#&#8203;52644</a> Absence-based completion predicate cannot distinguish consumed from never-persisted events </li> <li><a href="https://github.com/keycloak/keycloak/issues/52645">#&#8203;52645</a> Bulk HQL executeUpdate bypasses AsyncCommitIntegrator security classification </li> <li><a href="https://github.com/keycloak/keycloak/issues/52646">#&#8203;52646</a> Concurrent failures at brute-force reset boundary can erase newly recorded attempts </li> <li><a href="https://github.com/keycloak/keycloak/issues/52650">#&#8203;52650</a> LoginFailureEntity async commit classification can discard failure counters after failover <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52651">#&#8203;52651</a> Multi-Cluster v2 RPO "No data loss" conflicts with default async commit of ephemeral data <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52664">#&#8203;52664</a> Password denylist can be bypassed under Turkish locale <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52665">#&#8203;52665</a> Same-name client role authorizes victim-targeted credential offers via role namespace confusion <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52666">#&#8203;52666</a> Reusing a rotated OID4VCI refresh token repeatedly reissues credential authority <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52667">#&#8203;52667</a> User-editable mapped attribute can extend an SD-JWT credential beyond the issuer-configured lifetime <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52668">#&#8203;52668</a> Credential issuance ignores the administrator-approved attribute snapshot <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52669">#&#8203;52669</a> Unauthenticated credential requests trigger private-key JWE decryption before bearer authentication <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52670">#&#8203;52670</a> Refreshing a stolen targeted offer lets another user bypass offer-required issuance <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52671">#&#8203;52671</a> OID4VCI SD-JWT issuance makes array claims all-or-nothing disclosures <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52681">#&#8203;52681</a> kcadm preserves world-readable permissions on existing config files <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52684">#&#8203;52684</a> SCIM search writes raw filter values to debug logs <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52691">#&#8203;52691</a> Token exchange provider routing allows delegation tokens to bypass actor validation via standard exchange <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52696">#&#8203;52696</a> Recovered sites can enforce stale security configuration for up to one hour <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52732">#&#8203;52732</a> [OID4VCI] Make sure that OID4VCI access token usable just for credential endpoint <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52919">#&#8203;52919</a> OID4VCI: Preventing memory leak and adding decompression limit <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53166">#&#8203;53166</a> Realm import resets organization-IdP link policy to permissive defaults <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53307">#&#8203;53307</a> Identity-provider reads disclose organization links outside the caller's scope <code>identity-brokering</code></li> </ul> <h3>Deprecated features</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/44062">#&#8203;44062</a> Should Kerberos Credential delegation be deprecated? </li> <li><a href="https://github.com/keycloak/keycloak/issues/51921">#&#8203;51921</a> Deprecate legacy OIDC client switches from 'OpenID Connect Compatibility Modes' <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52121">#&#8203;52121</a> Deprecate volatile sessions and allow opting out of session caching </li> <li><a href="https://github.com/keycloak/keycloak/issues/52923">#&#8203;52923</a> Deprecate 'Full scope allowed' client switch <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53219">#&#8203;53219</a> Deprecate other client registration providers than OIDC </li> </ul> <h3>Removed features</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/51897">#&#8203;51897</a> Deprecate route from AUTH_SESSION_ID cookie for sticky sessions </li> <li><a href="https://github.com/keycloak/keycloak/issues/52130">#&#8203;52130</a> Deprecate clusterless feature </li> <li><a href="https://github.com/keycloak/keycloak/issues/52480">#&#8203;52480</a> EOL Keycloak Realm Operator </li> </ul> <h3>New features</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/16738">#&#8203;16738</a> Supported client secret rotation </li> <li><a href="https://github.com/keycloak/keycloak/issues/48899">#&#8203;48899</a> SSF: Add support for RiscAccountPurged event <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50644">#&#8203;50644</a> [OID4VP] Support direct_post.jwt (encrypted) response mode <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50876">#&#8203;50876</a> update admin client tests to use sort and filter </li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/16947">#&#8203;16947</a> group.spec.ts does not contain example of how to add attributes while creating groups <code>admin/client-js</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/22524">#&#8203;22524</a> Improve WebAuthn error messages <code>translations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/22962">#&#8203;22962</a> SAML Responses with Invalid Signatures <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/27437">#&#8203;27437</a> Accept encrypted PEM TLS certificate key </li> <li><a href="https://github.com/keycloak/keycloak/issues/32080">#&#8203;32080</a> Infinispan: LoginFailures cache should not be unbounded </li> <li><a href="https://github.com/keycloak/keycloak/issues/40211">#&#8203;40211</a> Add link to clients in UsedBy hint for auth-flows listing in admin ui <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/40246">#&#8203;40246</a> Selecting value in combobox not default listed <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/43741">#&#8203;43741</a> Parametrized client_id in the organization invite link and invite token <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/44605">#&#8203;44605</a> Infinispan metrics should not contain a dynamic node label </li> <li><a href="https://github.com/keycloak/keycloak/issues/44963">#&#8203;44963</a> PassKey "User verification requirement" error's are not translated <code>translations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46555">#&#8203;46555</a> Concurrent Index creation on PostgreSQL and other databases for DB migrations <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47921">#&#8203;47921</a> Account Console: Add per-application session termination on the Applications page <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47945">#&#8203;47945</a> Good proxy instructions for a production ready Keycloak setup </li> <li><a href="https://github.com/keycloak/keycloak/issues/48063">#&#8203;48063</a> refresh_expires_in is 0 for offline tokens when Offline Session Max Limited is disabled, but server enforces Offline Session Idle <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48216">#&#8203;48216</a> KeyCloak Admin Client - Support Jackson 3 <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48349">#&#8203;48349</a> Upgrade FreeMarker to the most recent version </li> <li><a href="https://github.com/keycloak/keycloak/issues/48448">#&#8203;48448</a> DNS Rebinding attacks to create bling SSRF <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48847">#&#8203;48847</a> Update Vale </li> <li><a href="https://github.com/keycloak/keycloak/issues/49039">#&#8203;49039</a> Signed JWT - Federated: support managed Kubernetes (EKS, GKE, AKS) via dynamic OIDC issuer discovery <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49044">#&#8203;49044</a> Better memory management with argon2 <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49056">#&#8203;49056</a> Make the Roles field optional on the client Authorization Evaluate tab </li> <li><a href="https://github.com/keycloak/keycloak/issues/49297">#&#8203;49297</a> Add `invite-user` workflow step <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49493">#&#8203;49493</a> [SAST] Restrict direct access to `issuedFor` variable </li> <li><a href="https://github.com/keycloak/keycloak/issues/49549">#&#8203;49549</a> Upgrade to Quarkus 3.40 LTS </li> <li><a href="https://github.com/keycloak/keycloak/issues/49767">#&#8203;49767</a> Refactor SSF to use keycloak-admin-client and react hook form </li> <li><a href="https://github.com/keycloak/keycloak/issues/49874">#&#8203;49874</a> How to create a JFR recording with JDK standard tools <code>observability</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49968">#&#8203;49968</a> Switch internal HTTP client from Apache to Vert.x/Netty </li> <li><a href="https://github.com/keycloak/keycloak/issues/50159">#&#8203;50159</a> Make UuidUnmodified more generic so that we can use it on multiple fields <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50221">#&#8203;50221</a> Add default non-endpoint methods to the admin api v2 interfaces as needed for typing </li> <li><a href="https://github.com/keycloak/keycloak/issues/50695">#&#8203;50695</a> [OID4VCI] Implement missing HAIP conformance tests <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50803">#&#8203;50803</a> Document the Password Policy SPI in the Server Developer Guide </li> <li><a href="https://github.com/keycloak/keycloak/issues/50911">#&#8203;50911</a> Ensure consistent transaction rollback across all error response paths <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50948">#&#8203;50948</a> Sorting Applications in Account Console </li> <li><a href="https://github.com/keycloak/keycloak/issues/50970">#&#8203;50970</a> Missing index on WORKFLOW_STATE.SCHEDULED_STEP_TIMESTAMP causes full filter scan in getDueScheduledSteps <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50992">#&#8203;50992</a> Redesign identity provider buttons on the login page <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51214">#&#8203;51214</a> Improve runtime when building user representations via User Profile <code>user-profile</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51263">#&#8203;51263</a> Organization group-by-path endpoint returns a brief representation instead of a full representation <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51273">#&#8203;51273</a> Upgrade to Quarkus 3.37.4 </li> <li><a href="https://github.com/keycloak/keycloak/issues/51305">#&#8203;51305</a> Token Exchange Delegation for Clients <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51310">#&#8203;51310</a> Upgrade to Quarkus 3.38 </li> <li><a href="https://github.com/keycloak/keycloak/issues/51359">#&#8203;51359</a> Complete Identity Provider support in the Test Framework Realm DSL <code>test-framework</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51400">#&#8203;51400</a> SCIM user serialization creates ~200x more UserProfile instances than necessary </li> <li><a href="https://github.com/keycloak/keycloak/issues/51402">#&#8203;51402</a> SCIM search/list executes unconditional COUNT(*) query on every request </li> <li><a href="https://github.com/keycloak/keycloak/issues/51403">#&#8203;51403</a> SCIM filter string is parsed twice through ANTLR4 grammar per request </li> <li><a href="https://github.com/keycloak/keycloak/issues/51413">#&#8203;51413</a> [CIMD] Resource Indicators with CIMD </li> <li><a href="https://github.com/keycloak/keycloak/issues/51428">#&#8203;51428</a> Ensure consistent transaction rollback in SCIM error response paths <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51432">#&#8203;51432</a> Upgrade to Quarkus 3.38.1 </li> <li><a href="https://github.com/keycloak/keycloak/issues/51450">#&#8203;51450</a> Unify QR code and divider components in the login theme <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51451">#&#8203;51451</a> [OID4VP] Improve cross-device login page layout <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51455">#&#8203;51455</a> Unify OTP setup buttons to use shared `buttons` macro <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51481">#&#8203;51481</a> Introduce dedicated delegation permission for token exchange delegation <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51489">#&#8203;51489</a> Add actor to impersonation tokens and details to event logs <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51506">#&#8203;51506</a> Skip unnecessary provider initialization for non-server commands <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51528">#&#8203;51528</a> Authentication events should distinguish primary vs rotated client secret </li> <li><a href="https://github.com/keycloak/keycloak/issues/51537">#&#8203;51537</a> Improve help text for admin permissions (FGAP) fields <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51676">#&#8203;51676</a> Distinguish between Login Theme and Account Console for an already existing Mail in Keycloak </li> <li><a href="https://github.com/keycloak/keycloak/issues/51685">#&#8203;51685</a> SCIM should also return a forbidden response status for schemas and resourceTypes if the query is present in the request </li> <li><a href="https://github.com/keycloak/keycloak/issues/51687">#&#8203;51687</a> SCIM filtered search should leverage the Infinispan entity cache <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51701">#&#8203;51701</a> Store provider.jar mtime in seconds in keycloak-persisted.properties for Quarkus re-augmentation </li> <li><a href="https://github.com/keycloak/keycloak/issues/51797">#&#8203;51797</a> Keycloak with jdbc-ping stack failed to create a cluster after the MariaDB restore procedure <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51808">#&#8203;51808</a> Retarget quarkus-next to Quarkus 3.39 branch after 3.x branch was dropped </li> <li><a href="https://github.com/keycloak/keycloak/issues/51851">#&#8203;51851</a> Avoid contention on IDX_USER_SESSION_EXPIRATION_* indexes on MS SQL/MySQL </li> <li><a href="https://github.com/keycloak/keycloak/issues/51854">#&#8203;51854</a> Optimize index sizes for session storage in the database </li> <li><a href="https://github.com/keycloak/keycloak/issues/51855">#&#8203;51855</a> Client configuration changes are not propagated between sites <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51900">#&#8203;51900</a> Avoid updates to IDX_USER_SESSION_EXPIRATION_LAST_REFRESH on every token refresh </li> <li><a href="https://github.com/keycloak/keycloak/issues/51938">#&#8203;51938</a> Upgrade to Quarkus 3.39.0.CR1 </li> <li><a href="https://github.com/keycloak/keycloak/issues/51968">#&#8203;51968</a> Don't wrap exceptions when running tests remotely in the new test framework </li> <li><a href="https://github.com/keycloak/keycloak/issues/52012">#&#8203;52012</a> Extend asynchronous commit optimization to SQL Server and Oracle </li> <li><a href="https://github.com/keycloak/keycloak/issues/52126">#&#8203;52126</a> Deprecate in-memory login failures and make persistent login failures the default </li> <li><a href="https://github.com/keycloak/keycloak/issues/52127">#&#8203;52127</a> Upgrade to Quarkus 3.39.1 </li> <li><a href="https://github.com/keycloak/keycloak/issues/52268">#&#8203;52268</a> Organization authenticator drops the typed username when falling through to the default identity-provider-redirector (no login_hint) </li> <li><a href="https://github.com/keycloak/keycloak/issues/52356">#&#8203;52356</a> Upgrade to Quarkus 3.39.2 <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52722">#&#8203;52722</a> Upgrade to Infinispan 16.0.15 </li> <li><a href="https://github.com/keycloak/keycloak/issues/52943">#&#8203;52943</a> Upgrade to Quarkus 3.40.0.CR1 </li> <li><a href="https://github.com/keycloak/keycloak/issues/52988">#&#8203;52988</a> Cache parsed theme resource declarations to avoid re-parsing them on every login page render <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52992">#&#8203;52992</a> Cache the resolved max-length configuration for OIDC request parameters <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52994">#&#8203;52994</a> Avoid building the WebAuthn trust verifier on every login <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53010">#&#8203;53010</a> MCP Documentation for 26.8 </li> <li><a href="https://github.com/keycloak/keycloak/issues/53211">#&#8203;53211</a> Add session bucket and coarse-grained timestamp to ROOT_AUTH_SESSION for reduced index contention <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53242">#&#8203;53242</a> SAML broker: IdP-initiated logout fails with HTTP 500 and is rolled back when the IdP has no single logout service URL <code>identity-brokering</code></li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/41394">#&#8203;41394</a> Flow steps back when changing locale or refreshing page (Regression of #&#8203;30520 / #&#8203;30644) <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/41433">#&#8203;41433</a> After update from 26.0 to 26.1 extent account theme keycloak.v3 is not working for custom components <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/44832">#&#8203;44832</a> User creation problem with default groups defined, with identity provider and federated openldap <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47482">#&#8203;47482</a> [quarkus-next] ConcurrentModificationException in parallel Quarkus build steps <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48043">#&#8203;48043</a> [OID4VCI] c_nonce Replay <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48188">#&#8203;48188</a> [OID4VCI] Issuance with Authorization Code Flow assumes same client_id for offer creation and redemption <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48858">#&#8203;48858</a> 'view-clients' bypasses 'view-users' restriction via 'client-scoped' endpoints <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49077">#&#8203;49077</a> NullPointerException in ResourceIndicatorsPostProcessor when access token audience is null <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49236">#&#8203;49236</a> SSF: Client scopes ssf.read and ssf.manage not created when SSF enabled for existing realm <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49731">#&#8203;49731</a> Creating a new realm from json using kcadm gives a PK violation on KEYCLOAK_ROLE despite it only being defined once in the JSON. <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49891">#&#8203;49891</a> [OID4VCI] CNF is not included in sd-jwt when number_of_decoys is not explicitly configured <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49964">#&#8203;49964</a> Malformed Content-Type header causes HTTP 500 on token endpoints instead of RFC 6749 §5.2 compliant 400 <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50110">#&#8203;50110</a> Keycloak doesn't honor `--https-trust-store-type` when automatically creating the Trust Store <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50178">#&#8203;50178</a> Scope-based permission accepts a scope not associated with the selected resource (Admin REST API) <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50190">#&#8203;50190</a> Admin Console: saving attributes fails when the attribute key is "constructor", "toString", or another Object.prototype name <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50209">#&#8203;50209</a> LifeSciences Login does not work anymore in Keycloak version 26.6.3 <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50228">#&#8203;50228</a> SearchQuery.getFields() exceptions <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50362">#&#8203;50362</a> [CIMD] Claude Desktop authentication rejected by Keycloak: jwt-bearer grant type incompatible with public client <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50535">#&#8203;50535</a> Admin UI: Resource search does not work in Authorization Evaluate “Resources and Scopes - Key” selector <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50590">#&#8203;50590</a> ConcurrentModificationException in OrganizationAdapter.setAttributes on concurrent PUT /organizations/{id} <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50596">#&#8203;50596</a> User federation synchronizations will always evict all users of a realm from the users cache <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50629">#&#8203;50629</a> REVOKE_GRANT_ERROR prevents logout except when account console is open in another tab <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50684">#&#8203;50684</a> SAML broker artifact binding fails to validate signed nested Response inside ArtifactResponse: Cannot resolve element with ID <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50687">#&#8203;50687</a> UI shows inherited role as non-inherited when the same role is also assigned manually <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50691">#&#8203;50691</a> Email not lowercased in "Always Read Value From LDAP" delegate (incomplete fix from #&#8203;43254) <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50694">#&#8203;50694</a> Nightly Conformance tests are failing <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50700">#&#8203;50700</a> Exporting a realm with users says it needs file parameter, which is provided <code>admin/cli</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50720">#&#8203;50720</a> Trusted SSF event emission persists verbatim event payload in admin events <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50788">#&#8203;50788</a> Putting --optimized before command gives confusing error message <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50791">#&#8203;50791</a> NPE thrown on null secret in AbstractOauth2IdentityProdivder <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50796">#&#8203;50796</a> ClientManager.isInternalClient checks only for "master" realm <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50800">#&#8203;50800</a> SCIM: query-users role returns empty Resources array despite correct totalResults <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50807">#&#8203;50807</a> Dynamic client registration: "scope" member in the request suppresses realm default client scopes on the created client <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50812">#&#8203;50812</a> Synthetic SSF emit accepts mismatched user and tenant subjects when only the tenant is subscribed <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50813">#&#8203;50813</a> Keycloak does not apply connect timeout when Oracle runs in XA mode <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50845">#&#8203;50845</a> Duplicate of #&#8203;46382, #&#8203;46178, #&#8203;46433 : reporting because none were actually fixed for this case. <code>admin/client-js</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50854">#&#8203;50854</a> NPE in executor configuration validation </li> <li><a href="https://github.com/keycloak/keycloak/issues/50860">#&#8203;50860</a> Empty or null description causes duplicate "Allowed field:" <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50877">#&#8203;50877</a> [DOC] FGAPv2: Clarify that manage scope on users and manage-members on group include creating users <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50907">#&#8203;50907</a> [kcw] `kcw dev` greps incorrect Keycloak version </li> <li><a href="https://github.com/keycloak/keycloak/issues/50944">#&#8203;50944</a> Flaky Admin UI E2E test: `initial-access.spec.ts` <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50975">#&#8203;50975</a> Admin UI E2E test failures - SSF Stream <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50994">#&#8203;50994</a> Flaky admin UI tests <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51004">#&#8203;51004</a> Legacy OIDC broker token exchange accepts ID tokens issued to a different audience <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51018">#&#8203;51018</a> Typo in "Integrating with Model Context Protocol (MCP)" (mcp-authz-server.adoc) <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51064">#&#8203;51064</a> Flaky test: org.keycloak.testsuite.forms.BrowserFlowTest#testUserWithOneAdditionalFactorOtpSuccess <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51073">#&#8203;51073</a> Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTestWithAuthSessionExpiredAndRequiredAction <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51074">#&#8203;51074</a> Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTestWithAuthSessionExpiredInTheMiddle <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51075">#&#8203;51075</a> Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTestWithAuthSessionExpiredAndRefreshInTab1 <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51076">#&#8203;51076</a> Flaky test: org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTest <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51100">#&#8203;51100</a> Recovery codes have numeric input field despite alphanumeric codes being generated <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51113">#&#8203;51113</a> Usage of second class configuration may not be masked in show-config <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51123">#&#8203;51123</a> Logout fails when IdP is disabled <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51128">#&#8203;51128</a> PreparedStatement can have at most 65,535 parameters <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51137">#&#8203;51137</a> Token exchange and JWT grants ignore use-lightweight-access-token policy <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51146">#&#8203;51146</a> Test Authentication fails after correcting LDAP connection URL until configuration is saved <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51153">#&#8203;51153</a> SCIM filter parentPath not saved/restored in visitValuePath, breaks nested valuePath <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51155">#&#8203;51155</a> SCIM PATCH does not enforce attribute mutability <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51156">#&#8203;51156</a> SCIM PATCH NPE when request body contains "schemas": null <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51169">#&#8203;51169</a> Flaky test: org.keycloak.testsuite.forms.RecoveryAuthnCodesAuthenticatorTest#test09recoveryAuthnCodesWithThresholdConfigured <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51187">#&#8203;51187</a> [OID4VCI] Handling of realm optional client scopes <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51191">#&#8203;51191</a> OID4VPVerifierTestBase failure in CI <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51201">#&#8203;51201</a> Labeler fails to set the version in the main branch <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51213">#&#8203;51213</a> Admin API v2: SAML string-attribute mapper does not remove attributes on explicit null or omission <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51253">#&#8203;51253</a> Do not pass the client for Delegation parameterized scope type <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51256">#&#8203;51256</a> Flaky test: org.keycloak.testsuite.webauthn.registration.passwordless.PwdLessOtherSettingsTest#apiInvalidStateErrorMessage <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51262">#&#8203;51262</a> Unable to select authorization scopes beyond the first 100 in Scope-Based Permissions <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51269">#&#8203;51269</a> LDAP Enabled switch remains interactive for users with view-realm only <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51330">#&#8203;51330</a> Account already existed page button has no gap and no hover on effect <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51347">#&#8203;51347</a> [OID4VCI] Incorrect metadata for key_attestations_required <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51352">#&#8203;51352</a> Better server error message and handling if email sender is disabled in configuration <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51361">#&#8203;51361</a> InvalidPathException when running test cases in embedded mode on Windows <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51372">#&#8203;51372</a> Admin Console: changing the search term while on a later page keeps the old page offset and shows no results <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51396">#&#8203;51396</a> `truststore-paths` certificates are ignored by `FileTruststoreProviderFactory`: it silently falls back to the JDK `cacerts` because it is initialized before `TruststoreBuilder` <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51398">#&#8203;51398</a> Pin resolved identity to prevent consent transfer on user recreation <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51401">#&#8203;51401</a> SCIM filter predicates handle case-insensitive matching incorrectly <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51415">#&#8203;51415</a> Workflow add-required-action does not allow all available required actions <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51423">#&#8203;51423</a> [UX] account console nav on mobile not closing after selecting a page <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51437">#&#8203;51437</a> Enabling parameterized-scopes breaks the built-in organization:<alias> scope <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51496">#&#8203;51496</a> Deleting a user attribute deletes all custom message localizations of default language en <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51498">#&#8203;51498</a> Admin console Realm Settings delete uses display name instead of realm name (regression from #&#8203;48084) <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51512">#&#8203;51512</a> Flaky test: org.keycloak.testsuite.webauthn.registration.AuthAttachmentRegisterTest#authenticatorAttachmentPlatform <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51525">#&#8203;51525</a> SCIM filtered PATCH remove deletes all values for multivalued extension attributes <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51527">#&#8203;51527</a> Admin v2 API PATCH bypasses client secret rotation policy <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51531">#&#8203;51531</a> Composite realm role mappings endpoint does not scale with the number of realm roles — the #&#8203;47157 fix was applied only to the client variant <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51536">#&#8203;51536</a> TypeError crash in Evaluation tab when selecting "Group" resource type <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51550">#&#8203;51550</a> @&#8203;InjectSysLogServer from test-framework does not work with defaults anymore <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51552">#&#8203;51552</a> Refresh Token Introspection <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51559">#&#8203;51559</a> SPNEGO mutual authentication response token is not returned after successful login <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51571">#&#8203;51571</a> SSF: Missing event details during user logout trigger NPE <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51590">#&#8203;51590</a> SCIM: organization groups exposed via the groups attribute on Users <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51600">#&#8203;51600</a> Flaky test: org.keycloak.testsuite.broker.KcOidcBrokerTest#loginWithExistingUserWithBruteForceEnabled <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51614">#&#8203;51614</a> SCIM Users groups filter does not exclude organization groups <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51620">#&#8203;51620</a> Migrate remaining login pages have no override in the keycloak.v2 theme <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51674">#&#8203;51674</a> Keycloak's password length policy isn't triggered when changing password in FIPS mode <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51682">#&#8203;51682</a> Exceptions in Kubernetes federated-client-authentication signature verification are silently swallowed with no default-level log trace <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51690">#&#8203;51690</a> [OID4VCI] Labels for OID4VCI events missing in the admin console <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51692">#&#8203;51692</a> [OID4VCI] Some error events not reported <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51757">#&#8203;51757</a> Base implementation of AbstractModelSchema.getAttributeMappers is keyed by model attribute name <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51769">#&#8203;51769</a> Dutch translation for linkExpirationFormatter produces duplicated value ("12 12 uur") <code>translations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51796">#&#8203;51796</a> Scim complex type attributes are forced to be case-insenitive <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51853">#&#8203;51853</a> Keycloak Admin Client fails on JS CI <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51913">#&#8203;51913</a> [quarkus-next] Helm chart CI jobs fail due to missing Quarkus snapshot cache restore <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51934">#&#8203;51934</a> EXECUTE_ACTION_TOKEN : event impossible to save <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51943">#&#8203;51943</a> AdditionalHelmTemplateBuildItem class is sometimes missing thought to random order of Helm dependencies <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52041">#&#8203;52041</a> [OID4VCI] mdoc not properly configurable in admin console client scope tab <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52087">#&#8203;52087</a> Regression: resource_access claim becomes empty {} when populated via User Attribute mapper with JSON value (since 26.7.1) <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52103">#&#8203;52103</a> Log injection via unsanitized client_id in OIDC logout endpoint <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52147">#&#8203;52147</a> SCIM resource ID phishing <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52157">#&#8203;52157</a> Organization invitation fails with invalid_redirect_uri when the organization has no Redirect URL configured <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52166">#&#8203;52166</a> Client-side password policy validation does not treat underscore _ as a special character <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52167">#&#8203;52167</a> Securing Client Cluster Node Registration via Client Policy Executor <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52181">#&#8203;52181</a> Organization invitation is lost when the invitee signs up with a realm-level identity provider <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52186">#&#8203;52186</a> Fix missing arguments in HardcodedLDAPRoleStorageMapper warning log <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52188">#&#8203;52188</a> Fine-Grained Admin Permissions v2: Cannot view a user who belongs to a group without "view" permission on that group <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52190">#&#8203;52190</a> [OID4VCI] Cannot unset values when configuring OID4VCI credential scope <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52197">#&#8203;52197</a> Admin API v2 returns plaintext client secret to view-clients role holders <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52206">#&#8203;52206</a> User Profile settings allow mapping multiple attributes to the same SCIM attribute <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52207">#&#8203;52207</a> User creation via SCIM API does not enforce User Profile "required" validation for core user schema attributes <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52208">#&#8203;52208</a> SCIM User Partial Update Allows Removing Required User Profile Attributes <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52219">#&#8203;52219</a> Duplicate English text in generateKeysDescription message key <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52223">#&#8203;52223</a> SCIM API allows updating username even when the Edit username setting is disabled <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52224">#&#8203;52224</a> SCIM API allows removing username despite it being required <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52229">#&#8203;52229</a> SCIM API does not enforce User Profile validators <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52230">#&#8203;52230</a> Missing detailed audit information in group / relam role operatons <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52285">#&#8203;52285</a> Unsafe workflow pattern in labeler <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52287">#&#8203;52287</a> Workflows: notify-user email template hardcodes English text, so notifications cannot be fully translated <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52338">#&#8203;52338</a> DatabaseIndexCheckerTest.testDetectsAndRecreatesInvalidIndexOnPostgresql fails on Aurora <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52378">#&#8203;52378</a> Admin REST OpenAPI schema types groups-in-role responses as UserRepresentation <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52396">#&#8203;52396</a> Organization missing from the login form model on the invitation confirm-membership page <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52421">#&#8203;52421</a> [OID4VCI] Server-side validations for "Supported proof types" and "Cryptographic binding methods" <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52441">#&#8203;52441</a> DPoPBindEnforcerExecutor requires DPoP on client create/update, defeating its own refresh-token-only binding option <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52475">#&#8203;52475</a> Admin console crashes with a raw TypeError when a group request returns 404 <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52491">#&#8203;52491</a> Integer overflow in OIDC re-auth max_age comparison (OIDCLoginProtocol) <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52497">#&#8203;52497</a> Flaky operator test: KeycloakDeploymentTest.testDeploymentDurability fails with "already exists" <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52502">#&#8203;52502</a> Flaky test: org.keycloak.testsuite.forms.BruteForceTest#testExceedMaxTemporaryLockouts <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52506">#&#8203;52506</a> Operator CI jobs missing Maven cache restore — dependency download failures <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52568">#&#8203;52568</a> ResourceIndicatorsPostProcessor error does not log appropriate error event <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52574">#&#8203;52574</a> Regression in 26.7.0: DefaultClientSessionContext.getScopeString() no longer attaches "openid" scope on token refresh when the client omits it from the request <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52580">#&#8203;52580</a> ClosingStream does not close underlying stream when terminal operation throws an exception <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52583">#&#8203;52583</a> HHH90010101 warning logged during SCIM concurrent requests due to orphaned Hibernate before-completion callbacks <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52586">#&#8203;52586</a> HHH100503 INFO message logged during concurrent SCIM requests after constraint violation <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52587">#&#8203;52587</a> Organization group: removeMember should fail when user is not a member <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52610">#&#8203;52610</a> Stateless JPA providers: race condition between INSERT ON CONFLICT DO NOTHING and concurrent DELETE <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52611">#&#8203;52611</a> Cluster event poller: uncaught ClassCastException on malformed event data <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52612">#&#8203;52612</a> JpaRevokedTokenProvider uses deprecated Time.currentTime() (int) instead of Time.currentTimeSeconds() (long) <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52647">#&#8203;52647</a> First cluster-readiness probe returns UP before asynchronous CP check completes </li> <li><a href="https://github.com/keycloak/keycloak/issues/52654">#&#8203;52654</a> Unable to re login after deleting the Identity Provider configurations <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52659">#&#8203;52659</a> BruteForceTest.testCacheExpiryForTemporaryLockout test is failing after switch to persistent login failures <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52673">#&#8203;52673</a> SCIM Group PUT overwrites externalId despite schema declaring it immutable <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52675">#&#8203;52675</a> SCIM Groups endpoints expose and modify service-account membership <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52676">#&#8203;52676</a> CVE-2026-4633 User enumeration via identity-first login when Organizations feature is enabled <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52706">#&#8203;52706</a> NO_PROXY entries with leading dots or spaces after commas silently fail <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52710">#&#8203;52710</a> Test framework silently ignores database reuse when testcontainers reuse is not enabled <code>test-framework</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52714">#&#8203;52714</a> Flaky operator tests: testDeploymentDurability and testDeploymentUpgrade fail with 409 due to leftover StatefulSet <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52720">#&#8203;52720</a> JWT Authorization Grant cannot be configured with Organization-linked IdPs <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52761">#&#8203;52761</a> Consent screen returns HTTP 500 for a user in more than one organization (regression in 26.7.0) <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52767">#&#8203;52767</a> Admin Console: Client scopes Evaluate tab does not refresh generated tokens when the user changes <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52785">#&#8203;52785</a> Device flow does not throw error if scope parameter contains a scope not permitted for client <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52798">#&#8203;52798</a> NullPointerException when POSTing null payload to /admin/realms/{realm}/groups <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52804">#&#8203;52804</a> Flaky test: org.keycloak.tests.webauthn.registration.passwordless.PwdLessOtherSettingsTest#apiNotAllowedErrorMessage <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52831">#&#8203;52831</a> Disabled organization set on session context during broker login callback <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52913">#&#8203;52913</a> [quick-theme] Login Page Preview stylesheet URL omits the http-relative-path prefix <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52915">#&#8203;52915</a> #&#8203;46367 regression in user provider sync behavior <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52938">#&#8203;52938</a> Admin UI: IdP organization login switches always persisted as false <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53002">#&#8203;53002</a> Client roles are not displayed in "Effective role scope mappings" in Client Scope Evaluate <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53013">#&#8203;53013</a> FGAP v2: creating a user into a group via manage-members + manage-membership also requires the undocumented "view" scope on that group <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53034">#&#8203;53034</a> GrantTypeCondition misses some event types <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53100">#&#8203;53100</a> Organizations: malformed domain in login username (e.g. user@example;com) causes unhandled ModelValidationException ('Invalid domain format') <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53106">#&#8203;53106</a> WARN [io.quarkus.deployment.index.IndexWrapper] (build-44) Failed to index void: Class does not exist in ClassLoader QuarkusClassLoader:Deployment Class Loader: PROD for keycloak@66ce957f <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53107">#&#8203;53107</a> SSF discovery document (.well-known/ssf-configuration) omits /realms/{realm} path when realm frontendUrl is set <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53117">#&#8203;53117</a> signingCertificate handling in v2 <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53138">#&#8203;53138</a> MayAct executor rejects valid delegation when the scope parameter is not the exact stored username <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53140">#&#8203;53140</a> Skips the ClientID binding checks when the claim is not a string <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53154">#&#8203;53154</a> prompt=none returns login_required for organization members without local credentials when the broker has "Redirect when email domain matches" <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53163">#&#8203;53163</a> Upgrade migration can attach a stale IdP route to another organization's domain <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53176">#&#8203;53176</a> Missing manage-organizations permission check for org group mappers <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53188">#&#8203;53188</a> Single-valued organization mapper emits an attacker-selected non-member organization <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53220">#&#8203;53220</a> Admin Console user picker (UserSelect) sends username= contains search, producing leading-wildcard LDAP filters that time out on large directories <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53252">#&#8203;53252</a> Admin UI IdP mapper tests are flaky: clickSaveMapper clicks Cancel before the save request is sent <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53253">#&#8203;53253</a> IdentityProviderModel removed getOrganizationId() method <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53290">#&#8203;53290</a> Organization group representations leak client/realm role metadata to unauthorized admins <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53335">#&#8203;53335</a> SCIM user PUT/PATCH bypass the user cache: active=false via SCIM does not disable the user for logins <code>scim</code></li> </ul> </div> ### [`v26.7.5`](https://github.com/keycloak/keycloak/releases/tag/26.7.5) [Compare Source](https://github.com/keycloak/keycloak/compare/26.7.4...26.7.5) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50996">#&#8203;50996</a> [CVE-2026-16103] Incomplete fix for CVE-2026-9798 (Keycloak CIBA brute-force lockout bypass at token redemption) <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51278">#&#8203;51278</a> [CVE-2026-18206] Client policy source-host wildcard domains match non-subdomain suffixes <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51280">#&#8203;51280</a> [CVE-2026-18203] Group policy child-extension matches sibling group path prefixes <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51281">#&#8203;51281</a> [CVE-2026-18207] Source-group condition matches duplicate group names and can skip negative-logic enforcement <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51284">#&#8203;51284</a> [CVE-2026-18208] Inactive out-of-audience introspection responses can include a signed JWT claim <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51285">#&#8203;51285</a> [CVE-2026-18211] Secure-client-uris localhost exception accepts localhost-prefixed attacker domains <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51781">#&#8203;51781</a> [CVE-2026-18217] SAML Redirect Binding Parameter Pollution <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52531">#&#8203;52531</a> CVE-2025-66021 com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52692">#&#8203;52692</a> [CVE-2026-89298] Confidential client secret disclosed to view-clients role via Client Registration GET <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52783">#&#8203;52783</a> [CVE-2026-88770] Device Authorization Grant issues tokens to brute-force-locked accounts (sibling of CVE-2026-9798) <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52888">#&#8203;52888</a> CVE-2026-84939 org.freemarker:freemarker </li> <li><a href="https://github.com/keycloak/keycloak/issues/52972">#&#8203;52972</a> CVE-2026-8798 org.bouncycastle:bc-fips <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52974">#&#8203;52974</a> CVE-2026-13505 org.bouncycastle:bc-fips <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53074">#&#8203;53074</a> [CVE-2026-93999] Keycloak 26.7.2: token-exchange refresh continues issuing tokens for a disabled audience client <code>token-exchange</code></li> </ul> <h3>Weaknesses</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/51340">#&#8203;51340</a> DCR: Registration access token allows protocol switch from OIDC to SAML <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53024">#&#8203;53024</a> check-licenses.sh: shell injection via source of dependency pom.properties </li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/52357">#&#8203;52357</a> Upgrade to Quarkus 3.33.4 <code>dist/quarkus</code></li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50739">#&#8203;50739</a> keycloak 26.7.0 sha1 file is missing <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50903">#&#8203;50903</a> Missing input length validation on username field causes outsized log generation in /login-actions/authenticate <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51065">#&#8203;51065</a> Flaky test: org.keycloak.testsuite.oauth.ClientAuthPostMethodTest#testPostAuthenticationNotAllowedWhenBasicRequested <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51067">#&#8203;51067</a> Flaky test: org.keycloak.testsuite.oauth.ClientAuthPostMethodTest#testBasicAuthenticationNotAllowedWhenPostRequested <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51304">#&#8203;51304</a> Upgrade to 26.7.0 crashes under several tested scenarios. LazyInitializationException on non-deterministic getRealmsStream() order after DB dump/restore. <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51761">#&#8203;51761</a> PAR request URI lifespan is used as a hard cap on interactive login duration <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51778">#&#8203;51778</a> [quarkus-next] BouncyCastle 1.85 breaks SAML client creation when client ID exceeds 64 characters <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52033">#&#8203;52033</a> Improve retrieval of large read-only resources via admin API <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52088">#&#8203;52088</a> New Infinispan node joining the cluster becomes a command target/coordinator before its cache components are ready - ISPN000136 failures during Keycloak rolling restarts <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52153">#&#8203;52153</a> DEBUG logging breaks persistent client session locking <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52193">#&#8203;52193</a> Identity Provider Mappers - organization group targets do not resolve <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52257">#&#8203;52257</a> Event listeners receive the wrong event type when an EventBuilder is reused (e.g. FEDERATED_IDENTITY_LINK is logged and emailed as LOGIN) <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52309">#&#8203;52309</a> Admin Permissions filtering is applied to organization lookups during end-user authentication <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52327">#&#8203;52327</a> surefire-junit-platform not cached, causing intermittent test failures in CI <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52329">#&#8203;52329</a> Flaky test: FlowTest.testRemoveExecutionSubflow fails with stale DELETE admin event <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52331">#&#8203;52331</a> Flaky SCIM FilterTest.testFilterGroupsByMetaTimestamps due to same-millisecond timing <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52415">#&#8203;52415</a> Flaky test: WebAuthnTransportLocaleTest.localizationTransportInternal fails with "Cannot logout user" <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52423">#&#8203;52423</a> Flaky test: MySQLDistTest fails with "process hasn't exited" on slow CI runners <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52428">#&#8203;52428</a> Flaky test: AttackDetectionResourceTest due to DefaultBlockingBruteForceProtector concurrent login blocking <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52433">#&#8203;52433</a> Flaky test: registration-policies.spec.ts kebab menu "Delete" item not found after toggle click <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52435">#&#8203;52435</a> Flaky test: timeout.spec.ts fails with "fetch failed" due to server not ready and hardcoded port <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52460">#&#8203;52460</a> Remove azure-cli version pin after runner image update removes apt source <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52487">#&#8203;52487</a> Managing Identity Providers in the admin UI now requires client roles in the realm <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52490">#&#8203;52490</a> Flaky Admin UI E2E test: "Should show items on next page" in scope.spec.ts <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52493">#&#8203;52493</a> AuroraDB IT - Create EC2 runner instance fails: RHEL 9.4 AMI deregistered <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52712">#&#8203;52712</a> WebAuthnPolicyComplianceTest.replayedCredentialRegistration is flaky due to missing sync point <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52716">#&#8203;52716</a> Flaky CI: junit-jupiter-engine not in Maven cache causes transient test failures <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52868">#&#8203;52868</a> Flaky test: RecoveryAuthnCodesAuthenticatorTest#test07SetupRecoveryAuthnCodes on Chrome <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53054">#&#8203;53054</a> ServerConfigClassOrderer comparator violates Comparable contract causing flaky CI failures <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/53069">#&#8203;53069</a> Format string mismatches in logging statements cause silent argument loss and potential MissingFormatArgumentException <code>core</code></li> </ul> </div> ### [`v26.7.4`](https://github.com/keycloak/keycloak/releases/tag/26.7.4) [Compare Source](https://github.com/keycloak/keycloak/compare/26.7.3...26.7.4) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/52834">#&#8203;52834</a> [CVE-2026-90997] Default MySQL/MariaDB row counts make stateless replay gates accept reused artifacts </li> <li><a href="https://github.com/keycloak/keycloak/issues/52835">#&#8203;52835</a> [CVE-2026-79651] Keycloak Unauthenticated Denial of Service via Unbounded Locale Caching </li> <li><a href="https://github.com/keycloak/keycloak/issues/52836">#&#8203;52836</a> [CVE-2026-74909] Incomplete fix: percent-encoded semicolon bypasses matrix parameter stripping in PathMatcher </li> <li><a href="https://github.com/keycloak/keycloak/issues/52837">#&#8203;52837</a> [CVE-2026-19607] Username Takeover Leading to Account Lockout </li> <li><a href="https://github.com/keycloak/keycloak/issues/52838">#&#8203;52838</a> [CVE-2026-17526] Privilege escalation: the "impersonation" role can impersonate a realm administrator </li> <li><a href="https://github.com/keycloak/keycloak/issues/52839">#&#8203;52839</a> [CVE-2026-18212] SAML Redirect DEFLATE helpers leak native zlib state </li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/52354">#&#8203;52354</a> Upgrade to Quarkus 3.33.3.2 <code>dist/quarkus</code></li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/49635">#&#8203;49635</a> Performance issue with 26.6.2 <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51102">#&#8203;51102</a> Flaky test: org.keycloak.testsuite.oauth.AccessTokenTest#accessTokenRequest <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52015">#&#8203;52015</a> New links errors for https://quarkus.io/guides <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52172">#&#8203;52172</a> Cached `RealmAdapter.isUserManagedAccessAllowed()` returns `isEnabled()` <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52173">#&#8203;52173</a> `realm_client` is computed into a client's attributes and then persisted on save <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52233">#&#8203;52233</a> Oracle 19 full client OCI driver crashes on startup since 26.6.0 — SQLFeatureNotSupportedException on setNetworkTimeout <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52241">#&#8203;52241</a> Clicking on a sub group in the admin console throws an exception <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52283">#&#8203;52283</a> Flaky test SessionRestServiceTest.testGetDevicesSessions <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52430">#&#8203;52430</a> Flaky test: userprofile.spec.ts fails with timeout on "no-users-found-empty-action" in serial suite <code>testsuite</code></li> </ul> </div> ### [`v26.7.3`](https://github.com/keycloak/keycloak/releases/tag/26.7.3) [Compare Source](https://github.com/keycloak/keycloak/compare/26.7.2...26.7.3) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50785">#&#8203;50785</a> CVE-2026-35563: LDAP client implementation in version 2.1.7 does not verify if the server certificate matches the intended LDAP hostname <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50997">#&#8203;50997</a> [CVE-2026-16093] Required signed-JWT assertion policy can be bypassed with unsigned assertion headers <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50998">#&#8203;50998</a> [CVE-2026-16072] Organization managers can create managed members through stored registration links without manage-users <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51001">#&#8203;51001</a> [CVE-2026-16108] Realm default-group reads disclose hidden groups under FGAP v2 <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51002">#&#8203;51002</a> [CVE-2026-16105] Missing per-role authorization on RoleContainerResource composite endpoints <code>admin/rbac</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51003">#&#8203;51003</a> [CVE-2026-16089] Authorization codes can be retargeted to another client session <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51005">#&#8203;51005</a> [CVE-2026-16104] Authenticator config surfaces expose raw reCAPTCHA secrets <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51112">#&#8203;51112</a> [CVE-2026-16106] Incorrect authorization in admin role-composite deletion allows delegated admin to remove privileged child roles <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51142">#&#8203;51142</a> [CVE-2026-17059] Information disclosure: GET /roles/{role}/users returns user PII without the per-user view filter <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51279">#&#8203;51279</a> [CVE-2026-18218] Client not-before revocation is ignored when realm not-before is older but nonzero <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51282">#&#8203;51282</a> [CVE-2026-18215] Microsoft external access-token exchange bypasses configured tenant <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51283">#&#8203;51283</a> [CVE-2026-18201] Generic identity-provider creation can bind brokers to organizations without manage-organizations <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51286">#&#8203;51286</a> [CVE-2026-18209] Incomplete fix for redirect_uri OIDC response-parameter injection: forbidden-parameter check (commit 18832bca) inspects only the query string, not the URL fragment <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51287">#&#8203;51287</a> [CVE-2026-18214] Google external access-token exchange bypasses hosted-domain restriction <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51378">#&#8203;51378</a> [CVE-2026-18571] FGAP V2: Group assignment bypass during user creation (POST /users) allows adding unpermitted groups <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51379">#&#8203;51379</a> [CVE-2026-18572] UMA claim token can override the authorization time-policy clock <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51380">#&#8203;51380</a> [CVE-2026-18573] Client access-type condition evaluates updates against the old client type <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51382">#&#8203;51382</a> [CVE-2026-18570] Full-scope-disabled client policy validation can be bypassed by omitting fullScopeAllowed <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51745">#&#8203;51745</a> [CVE-2026-19729] Incomplete fix for CVE-2026-9083 — relative path traversal still enables filesystem probing in 26.6.4 <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52028">#&#8203;52028</a> [CVE-2026-79652] Keycloak jwt-bearer authorization grant does not enforce consentRequired <code>oidc</code></li> </ul> <h3>Weaknesses</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50581">#&#8203;50581</a> Admin API: User/group role-mapping endpoints disclose hidden client role metadata under FGAP v2 <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50583">#&#8203;50583</a> Admin API: Composite role endpoints do not filter child roles by FGAP v2 view permission <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50990">#&#8203;50990</a> Admin UI extension effective-role endpoints disclose hidden composite roles <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51143">#&#8203;51143</a> Aggregate policy partial evaluation diverges from runtime semantics under FGAP v2 <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51144">#&#8203;51144</a> Partial evaluation misses ancestor group policies with extendChildren <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51202">#&#8203;51202</a> Client-protocol condition can be bypassed on admin client creation by omitting protocol <code>oidc</code></li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50825">#&#8203;50825</a> Creating an organization without a domain leads to an error <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50963">#&#8203;50963</a> V1 token-exchange strips the DPoP sender-constraint from a bound access token <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51510">#&#8203;51510</a> SQLGrammarException: The incoming request has too many parameters <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51523">#&#8203;51523</a> Sustained high CPU on all nodes after upgrade <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51554">#&#8203;51554</a> Admin API per-request cost grows super-linearly with realm count since 26.7.1 <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51589">#&#8203;51589</a> NPE in RoleUtils.expandCompositeRoles when a cached client scope references a deleted role <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51602">#&#8203;51602</a> Invalid redirect on https://access.redhat.com/products/red-hat-single-sign-on/ <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51707">#&#8203;51707</a> Lightweight access token role resolution resolves all roles across all realms on every admin API request <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51712">#&#8203;51712</a> Logout URL does not allow OIDC response parameters in its redirect_url <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51780">#&#8203;51780</a> SSSD CI job fails: FreeIPA container crashes on ubuntu-24.04 runner image 20260810.271 <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51785">#&#8203;51785</a> Multiple CVEs inherited from Apache DS used for testing </li> <li><a href="https://github.com/keycloak/keycloak/issues/51790">#&#8203;51790</a> Java Distribution IT/UT (windows-latest, temurin, 21) times out regularly <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51792">#&#8203;51792</a> AsyncCommitIntegrator Aurora detection logs "ERROR: function aurora_version() does not exist" in the PostgreSQL server log on every startup </li> <li><a href="https://github.com/keycloak/keycloak/issues/51807">#&#8203;51807</a> Client scope boundary bypassed when resolving admin roles via KeycloakIdentity <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51902">#&#8203;51902</a> Index modifiers are not logged if an index is not created due to a threshold <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51920">#&#8203;51920</a> Error: 1020-HY000: Record has changed since last read in table OFFLINE_CLIENT_SESSION </li> <li><a href="https://github.com/keycloak/keycloak/issues/51983">#&#8203;51983</a> [26.7.2] Regression in UI in JS keycloak-admin-client </li> <li><a href="https://github.com/keycloak/keycloak/issues/52017">#&#8203;52017</a> SAML ECP faultstring discloses client existence, incomplete fix of CVE-2026-9794 <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/52038">#&#8203;52038</a> Client session note removals are not persisted with persistent user sessions <code>core</code></li> </ul> </div> ### [`v26.7.2`](https://github.com/keycloak/keycloak/releases/tag/26.7.2) [Compare Source](https://github.com/keycloak/keycloak/compare/26.7.1...26.7.2) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/49570">#&#8203;49570</a> CVE-2026-45292 OpenTelemetry Java SDK has Unbounded Memory Allocation in W3C Baggage Propagation <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50616">#&#8203;50616</a> [CVE-2026-14613] Keycloak 26.6.3 Fine-Grained Admin Permissions Bypass via Role Groups Endpoint <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50955">#&#8203;50955</a> [CVE-2026-59888 and CVE-2026-59889] Upgrade jackson-databind to 2.21.5 to fix </li> <li><a href="https://github.com/keycloak/keycloak/issues/50966">#&#8203;50966</a> [CVE-2026-15945] Group hierarchy search discloses hidden parent groups under FGAP v2 <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51145">#&#8203;51145</a> [CVE-2026-17048] Keycloak Admin REST API Leaks Vault-Resolved Rotated Client Secrets <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51832">#&#8203;51832</a> CVE-2026-15571 Predictable account-linking hash enables account takeover via malicious oidc client </li> <li><a href="https://github.com/keycloak/keycloak/issues/51833">#&#8203;51833</a> CVE-2026-18963 Unauthenticated account takeover via reset-credentials flow bypass </li> </ul> <h3>Weaknesses</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50844">#&#8203;50844</a> show-config prints the vault keystore password in cleartext <code>dist/quarkus</code></li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/51344">#&#8203;51344</a> Upgrade to Quarkus 3.33.3.1 </li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50751">#&#8203;50751</a> Password denylist: false fpp warning on startup with large pre-computed .bloom file <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50849">#&#8203;50849</a> Correct SCIM name.formated <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50855">#&#8203;50855</a> Rotated client secret remains valid when the feature is disabled <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51054">#&#8203;51054</a> Invalid redirect URI on logout from pages with sub-tab hash fragments <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51061">#&#8203;51061</a> Parameterized UserPropertyMapper exposes target user attributes without permission check <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51087">#&#8203;51087</a> Passkey icons use wrong color variant when realm disables dark mode <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51088">#&#8203;51088</a> Verify email not working in incognito browser tab after Keycloak restart <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51131">#&#8203;51131</a> Warning "Proactive closing of the session was missed - refinements are needed to TransactionSessionHandler related logic" appears <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51154">#&#8203;51154</a> Upgrade to 26.7.0 fails with preview features as the stateless cluster provider captures a null NodeInfo before postInit <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51164">#&#8203;51164</a> WebAuthn tests are being skipped in Github workflows <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51182">#&#8203;51182</a> Large HTTP/2 request headers are rejected with a bare 500 and no log; same request works over HTTP/1.1 <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51323">#&#8203;51323</a> Custom realm-level role named admin cannot be updated in non-master realms after Keycloak 26.7.0 <code>admin/rbac</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51331">#&#8203;51331</a> Adding org member fails with 500 with stateless:v1 feature enabled <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51407">#&#8203;51407</a> The dist for Java API docs is empty <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51449">#&#8203;51449</a> Incorrect query parameter name for "max" </li> <li><a href="https://github.com/keycloak/keycloak/issues/51476">#&#8203;51476</a> Invalid link for https://www.ietf.org/rfc/rfc4559.txt <code>docs</code></li> </ul> </div> ### [`v26.7.1`](https://github.com/keycloak/keycloak/releases/tag/26.7.1) [Compare Source](https://github.com/keycloak/keycloak/compare/26.7.0...26.7.1) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/49429">#&#8203;49429</a> [CVE-2026-9793] JWE request object bypasses requestObjectSignatureAlg enforcement <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50445">#&#8203;50445</a> [CVE-2026-4629] Privilege escalation via hardcoded role mapper injection in manage-clients <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50569">#&#8203;50569</a> [CVE-2026-14209] Keycloak Admin UI Extension `brute-force-user` User Disclosure via `search=id:` under FGAP v2 <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50615">#&#8203;50615</a> [CVE-2026-14614] Keycloak 26.6.3 Fine-Grained Admin Permissions Bypass in Client Scope Assignment <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50617">#&#8203;50617</a> [CVE-2026-14615] FGAP v2 parent group children endpoint bypasses per-child view permission filter <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/51467">#&#8203;51467</a> CVE-2026-15573 Authorization bypass via unnormalized uri matching in pathmatcher </li> <li><a href="https://github.com/keycloak/keycloak/issues/51468">#&#8203;51468</a> CVE-2026-15572 DCR protocol mapper type-swap policy bypass allows privilege escalation </li> <li><a href="https://github.com/keycloak/keycloak/issues/51469">#&#8203;51469</a> CVE-2026-16100 Unbounded metric cardinality in user event metrics via request-controlled error text </li> <li><a href="https://github.com/keycloak/keycloak/issues/51470">#&#8203;51470</a> CVE-2026-16442 SAML idp-initiated broker login bypasses link-only restriction </li> <li><a href="https://github.com/keycloak/keycloak/issues/51471">#&#8203;51471</a> CVE-2026-16443 SAML broker metadata import disables response signature validation </li> <li><a href="https://github.com/keycloak/keycloak/issues/51472">#&#8203;51472</a> CVE-2026-16071 LDAP entry-dn user search bypasses configured users dn boundary </li> <li><a href="https://github.com/keycloak/keycloak/issues/51473">#&#8203;51473</a> CVE-2026-16102 Default DCR policy allows role forgery via user property mappers </li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50719">#&#8203;50719</a> WebAuthn authenticator attachment policy is bypassed when the client omits the attachment field <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50750">#&#8203;50750</a> Clustering test broken in 26.7 release branch <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50836">#&#8203;50836</a> Kustomize cluster-wide faulty Role&RoleBinding <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50850">#&#8203;50850</a> New Password is commited when multiple Password Reset is detected <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50882">#&#8203;50882</a> 500 when client requests `organization` scope with it already set to `Default` <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50928">#&#8203;50928</a> IllegalFormatConversionException in LiquibaseDBLockProviderFactory and wrong time conversion <code>core</code></li> </ul> </div> ### [`v26.7.0`](https://github.com/keycloak/keycloak/releases/tag/26.7.0) [Compare Source](https://github.com/keycloak/keycloak/compare/26.6.4...26.7.0) <div> <h2>Highlights</h2> <div class="paragraph"> <p>This release features new capabilities for users and administrators of Keycloak. The highlights of this release are:</p> </div> <div class="ulist"> <ul> <li> <p>Automate user provisioning with the SCIM API (preview)</p> </li> <li> <p>Simplified multi-cluster high availability without external caches (preview)</p> </li> <li> <p>Enhanced reverse proxy guides with blueprints for HAProxy and Traefik</p> </li> <li> <p>Step-up authentication for SAML clients</p> </li> </ul> </div> <div class="paragraph"> <p>Read on to learn more about each new feature. If you are upgrading from a previous release, <a href="https://www.keycloak.org/docs/latest/upgrading/index.html">also review the changes listed in the upgrading guide</a>.</p> </div> <div class="sect2"> <h3 id="_security_and_standards">Security and Standards</h3> <div class="sect3"> <h4 id="_stronger_security_for_the_identity_brokering_api">Stronger security for the Identity Brokering API</h4> <div class="paragraph"> <p>The Identity Brokering API allows applications to retrieve tokens obtained from external identity providers during federated login. Version 2 of this API replaces the legacy V1 with a more secure and standards-compliant design:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Client-level authorization</strong> — access to external tokens is controlled per client using dedicated settings (<strong>Allow retrieve external tokens</strong> and an identity provider allow list) instead of assigning broker roles to individual users.</p> </li> <li> <p><strong>Confidential clients only</strong> — public clients are rejected, ensuring that only authenticated clients can retrieve external tokens.</p> </li> <li> <p><strong>OAuth 2.0 compliant</strong> — the endpoint uses <code>POST</code> and returns standard JSON responses with <code>access_token</code>, <code>error</code>, and <code>error_description</code> fields.</p> </li> <li> <p><strong>Session-based token storage</strong> — a new <strong>Store token in session</strong> option keeps tokens in the user session for faster access, with automatic cleanup on session expiry. Database storage remains available for persistence across sessions.</p> </li> </ul> </div> <div class="paragraph"> <p>V2 is now supported but disabled by default. V1 is deprecated but still enabled by default for backward compatibility. In a future release, V1 will be removed and V2 will become the default.</p> </div> <div class="paragraph"> <p>For more information, see the <a href="https://www.keycloak.org/docs/26.7.0/server_development/#_identity-brokering-apis">Identity Brokering APIs</a> chapter in the Server Developer Guide.</p> </div> </div> <div class="sect3"> <h4 id="_progress_on_verifiable_credentials_oid4vci_experimental">Progress on Verifiable Credentials (OID4VCI) (experimental)</h4> <div class="paragraph"> <p><a href="https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html">Verifiable Credentials (OID4VCI)</a> allow organizations to issue tamper-proof, cryptographically signed credentials — such as employee badges, academic diplomas, or professional certifications — that users can store in a digital wallet and present to third parties without involving the issuer.</p> </div> <div class="paragraph"> <p>OID4VCI remains an experimental feature in Keycloak, but this release brings substantial improvements from both the core team and the community:</p> </div> <div class="ulist"> <ul> <li> <p>Polishing of existing functionality and improving configuration. Everything is now configurable in the admin UI in addition to the admin REST API.</p> </li> <li> <p>Lots of bugs fixed. Improved specification compliance.</p> </li> <li> <p>Conformance with the <a href="https://openid.net/specs/openid4vc-high-assurance-interoperability-profile-1_0.html">OpenID4VC High Assurance Interoperability Profile (HAIP)</a>. This work involves the introduction of the dedicated Keycloak experimental feature <code>client-auth-abca</code> for <a href="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-attestation-based-client-auth-07">Attestation based client authentication (ABCA)</a>.</p> </li> <li> <p>Management of verifiable credentials for individual users. This involves the ability for an administrator to create a verifiable credential for a user to indicate that this user can retrieve a verifiable credential, as well as the ability for users to start issuance of a verifiable credential from the Keycloak account console.</p> </li> <li> <p><a href="https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-pre-authorized-code-flow">Pre-authorized code grant</a> support is still experimental and was moved to the dedicated experimental feature <code>oid4vc-vci-preauth-code</code></p> </li> <li> <p>Support for credential refresh interval. Administrators can now configure a separate refresh interval (<code>vc.refresh_interval_in_seconds</code>) in the client scope settings that controls how often wallets must refresh the credential, independent of the credential lifetime. When not explicitly set, defaults to 7 days or the credential lifetime, whichever is smaller. This enables regular credential rotation for enhanced security while maintaining user convenience through automatic refresh using the refresh token. For more information, see the <a href="https://www.keycloak.org/docs/26.7.0/server_admin/#_oid4vci_client_scope">Create Client Scopes with Mappers</a> section in the OID4VCI configuration guide.</p> </li> <li> <p>Documentation updated and improved</p> </li> </ul> </div> <div class="paragraph"> <p>Many community members were involved in the development. Many thanks to <a href="https://github.com/Awambeng">Awambeng</a>, <a href="https://github.com/Captain-P-Goldfish">Pascal Knüppel</a>, <a href="https://github.com/dominikschlosser">Dominik Schlosser</a>, <a href="https://github.com/forkimenjeckayang">forkimenjeckayang</a>, <a href="https://github.com/IngridPuppet">Ingrid Kamga</a>, <a href="https://github.com/keshavprashantdeshpande">Keshav Deshpande</a>, <a href="https://github.com/namanONcode">Naman Jain</a>, <a href="https://github.com/officialasishkumar">Asish Kumar</a>, <a href="https://github.com/Ogenbertrand">Ogen Bertrand</a>, <a href="https://github.com/Oluwatobi-Mustapha">Oluwatobi Mustapha</a>, <a href="https://github.com/pulsastrix">Hugo Hakim Damer</a>, <a href="https://github.com/rameshkumarkoyya">rameshkumarkoyya</a>, <a href="https://github.com/tdiesler">Thomas Diesler</a> and <a href="https://github.com/Vitalisn4">Palpable</a> for the contributions!</p> </div> </div> <div class="sect3"> <h4 id="_cross_domain_token_exchange_with_identity_assertion_jwt_grant_experimental">Cross-domain token exchange with Identity Assertion JWT Grant (experimental)</h4> <div class="paragraph"> <p>When two organizations each run their own authorization server, users often need to re-authenticate when crossing between them — even though their identity was already verified. The <a href="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-identity-assertion-authz-grant">Identity Assertion JWT Authorization Grant (ID-JAG)</a> solves this by allowing one authorization server to present a signed identity assertion to another, which then issues an access token without requiring the user to log in again.</p> </div> <div class="paragraph"> <p>Keycloak provides partial experimental support for the Identity Assertion JWT Authorization Grant. It currently implements only the receiving authorization server role, accepting ID-JAG assertions at the token endpoint and issuing access tokens in return. Other parts of the ID-JAG specification are not yet implemented, so the complete flow is not currently supported.</p> </div> <div class="paragraph"> <p>To try it out, start Keycloak with the feature <code>identity-assertion-jwt</code> enabled.</p> </div> <div class="paragraph"> <p>Many thanks to <a href="https://github.com/bucchi">Yutaka Obuchi</a> for the contribution of this feature!</p> </div> </div> <div class="sect3"> <h4 id="_automate_user_provisioning_with_the_scim_api_preview">Automate user provisioning with the SCIM API (preview)</h4> <div class="paragraph"> <p><a href="https://datatracker.ietf.org/doc/html/rfc7644">SCIM</a> (System for Cross-domain Identity Management) is a standard protocol for reading and writing identity resources such as users and groups across multiple systems. It enables organizations to automate user provisioning and deprovisioning using widely available tooling — for example, integrating with identity governance platforms, HR systems, or other identity providers.</p> </div> <div class="paragraph"> <p>Keycloak has SCIM APIs for managing users and groups within a realm. The implementation covers full CRUD and PATCH operations, filtering and pagination, schema extensions including the Enterprise User extension, and schema discovery endpoints.</p> </div> <div class="paragraph"> <p>In this release, the SCIM API is being promoted to a preview feature. In the default profile it is disabled by default; to try it out, enable the <code>scim-api</code> feature.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/docs/26.7.0/server_admin/#_managing_scim">Managing users and groups through SCIM</a> documentation.</p> </div> </div> <div class="sect3"> <h4 id="_real_time_security_signals_to_downstream_applications_experimental">Real-time security signals to downstream applications (experimental)</h4> <div class="paragraph"> <p>When a user logs out, changes credentials, or gets disabled in Keycloak, downstream applications typically don&#&#8203;8217;t learn about it until the next token refresh — leaving a window where stale sessions remain active. The <a href="https://openid.net/specs/openid-sharedsignals-framework-1_0-final.html">OpenID Shared Signals Framework (SSF)</a> closes this gap by letting identity providers push security events to relying parties in near real time.</p> </div> <div class="paragraph"> <p>Keycloak can now act as an SSF Transmitter, delivering signed <a href="https://www.rfc-editor.org/info/rfc8417/">Security Event Tokens (SETs)</a> to registered receivers. It supports <a href="https://openid.net/specs/openid-caep-1_0-final.html">CAEP 1.0</a> and <a href="https://openid.net/specs/openid-risc-1_0-final.html">RISC 1.0</a> event profiles with both push (<a href="https://www.rfc-editor.org/info/rfc8935/">RFC 8935</a>) and poll (<a href="https://www.rfc-editor.org/info/rfc8936/">RFC 8936</a>) delivery methods. Events are persisted to a durable outbox so that no signal is lost across restarts, and a cluster-aware background drainer handles retries and exponential backoff. Each realm can opt in individually, and streams, subjects, and event types are managed through the admin console and REST API.</p> </div> <div class="paragraph"> <p>To enable SSF, start Keycloak with the feature <code>ssf</code> enabled.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/securing-apps/ssf-support">Shared Signals Framework</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_standardized_authorization_decisions_with_authzen_experimental">Standardized authorization decisions with AuthZen (experimental)</h4> <div class="paragraph"> <p>Applications that need fine-grained authorization typically call Keycloak&#&#8203;8217;s proprietary authorization API, coupling them to its internal model. The <a href="https://openid.net/specs/authorization-api-1_0.html">OpenID AuthZEN Authorization API 1.0</a> defines a vendor-neutral protocol between Policy Decision Points (PDPs) and Policy Enforcement Points (PEPs), enabling applications to request authorization decisions through a standard interface.</p> </div> <div class="paragraph"> <p>Keycloak now implements the AuthZEN Evaluation API as a PDP. Applications send evaluation requests describing a subject, resource, and action, and Keycloak returns a permit or deny decision based on its configured authorization policies. Both single and batch evaluation endpoints are available.</p> </div> <div class="paragraph"> <p>To enable AuthZen, start Keycloak with the feature <code>authzen</code> enabled.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/securing-apps/authzen-authorization">AuthZen Authorization</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_authorize_ai_tools_and_mcp_servers">Authorize AI tools and MCP servers</h4> <div class="paragraph"> <p>The Model Context Protocol (MCP) is becoming the standard way for AI applications to connect to external tools and data sources. As MCP adoption grows, securing these connections with proper OAuth 2.0 authorization is critical.</p> </div> <div class="paragraph"> <p>Keycloak continues to improve its MCP authorization server capabilities. This release adds integration documentation for Claude Code as an MCP client, alongside the existing Visual Studio Code integration. Both use OAuth Client ID Metadata Document (CIMD) for dynamic client registration with PKCE-secured public client flows and localhost callbacks.</p> </div> <div class="paragraph"> <p>For setup instructions, see the <a href="https://www.keycloak.org/securing-apps/mcp-authz-server">Integrating with Model Context Protocol (MCP)</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_delegate_access_across_services_with_token_exchange_delegation_experimental">Delegate access across services with Token Exchange Delegation (experimental)</h4> <div class="paragraph"> <p>In multi-service architectures, a backend service sometimes needs to act on behalf of a user at another service — for example, when a gateway delegates work to a downstream API. Standard Token Exchange handles client-to-client token swaps, but verifying that the requester is authorized to impersonate a specific user requires additional checks.</p> </div> <div class="paragraph"> <p>Keycloak introduces token exchange delegation as an experimental feature. It adds a new <code>delegation</code> parameterized scope type that validates whether the requesting user is authorized to act on behalf of the target user before the exchange is granted. The delegation scope requires user consent and is automatically reassessed on token refresh, so revoked impersonation rights take effect immediately.</p> </div> <div class="paragraph"> <p>To enable token exchange delegation, start Keycloak with the feature <code>token-exchange-delegation</code> enabled.</p> </div> </div> <div class="sect3"> <h4 id="_step_up_authentication_for_saml_clients">Step-up authentication for SAML clients</h4> <div class="paragraph"> <p>Step-up authentication allows applications to require a stronger level of authentication for sensitive operations. Previously, this capability was only available for OpenID Connect clients.</p> </div> <div class="paragraph"> <p>Keycloak now extends step-up authentication to the SAML protocol, enabling SAML service providers to request a specific authentication context class in their authentication requests. The feature <code>step-up-authentication-saml</code> has been promoted from preview to supported in this release.</p> </div> <div class="paragraph"> <p>For more information, see the <a href="https://www.keycloak.org/docs/26.7.0/server_admin/#_step-up-authentication-saml">Server Administration Guide</a>.</p> </div> </div> </div> <div class="sect2"> <h3 id="_administration">Administration</h3> <div class="sect3"> <h4 id="_declarative_client_management_with_admin_api_v2_experimental">Declarative client management with Admin API v2 (experimental)</h4> <div class="paragraph"> <p>Keycloak introduces a new REST API for managing OIDC and SAML clients. The new API provides strict validation, support for declarative configuration, and an accurate OpenAPI specification that enables reliable client generation. This addresses long-standing limitations of the original Admin REST API. This is the first resource in the Admin API v2, with additional resources to follow in future releases.</p> </div> <div class="paragraph"> <p>The API can be consumed through a Java client, an auto-generated JavaScript client, and a CLI. The Keycloak Operator uses it to manage clients declaratively via <code>KeycloakOIDCClient</code> and <code>KeycloakSAMLClient</code> custom resources.</p> </div> <div class="paragraph"> <p>Enabling this feature also enables the OpenAPI specification endpoint on the management interface, which the CLI uses to adapt its commands to the connected server version.</p> </div> <div class="paragraph"> <p>To try it out, enable the <code>client-admin-api:v2</code> feature.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/nightly/admin-api/admin-api-v2">Admin API v2</a> guide and the <a href="https://www.keycloak.org/nightly/operator/managing-clients">Managing Keycloak Clients</a> operator guide. Feedback is welcome in the <a href="https://github.com/keycloak/keycloak/discussions/50186">Client Admin API v2</a> GitHub Discussion.</p> </div> <div class="paragraph"> <p>Thanks to <a href="https://github.com/robson90">Robin Meese</a> for contributing the OpenAPI endpoint on the management interface and the Java admin client, and to <a href="https://github.com/sschu">Sebastian Schuster</a> for his participation in the Admin API working group and the Go client analysis.</p> </div> </div> <div class="sect3"> <h4 id="_fine_grained_delegation_for_organization_administration">Fine-grained delegation for organization administration</h4> <div class="paragraph"> <p>Managing organizations in Keycloak previously required the <code>manage-realm</code> role — a high-privilege role that grants far more access than most organization administrators need. This release introduces dedicated admin roles and Fine-Grained Admin Permissions for organizations, allowing administrators to delegate organization management without over-provisioning access.</p> </div> <div class="paragraph"> <p>New realm admin roles provide coarse-grained delegation:</p> </div> <div class="ulist"> <ul> <li> <p><code>manage-organizations</code> — grants full read and write access to organizations, including creating, updating, and deleting organizations and their members.</p> </li> <li> <p><code>view-organizations</code> — grants read-only access to organizations and their members (also requires <code>view-users</code> or Fine-Grained Admin Permissions for user visibility).</p> </li> <li> <p><code>query-organizations</code> — grants the ability to search and list organizations without full view access, consistent with the <code>query-users</code> / <code>query-clients</code> / <code>query-groups</code> pattern.</p> </li> </ul> </div> <div class="paragraph"> <p>The <code>manage-realm</code> role continues to implicitly grant full organization management access for backward compatibility.</p> </div> <div class="paragraph"> <p>For per-organization granularity, organizations are now a first-class resource type in Fine-Grained Admin Permissions. Administrators can create permissions to control which specific organizations a delegated administrator can view or manage — for example, granting access to manage one organization without giving access to all organizations in the realm. When Fine-Grained Admin Permissions is enabled, organization member queries also respect user-level permissions, returning only members the administrator is permitted to view.</p> </div> </div> <div class="sect3"> <h4 id="_automatic_role_inheritance_through_organization_groups">Automatic role inheritance through organization groups</h4> <div class="paragraph"> <p>Assigning roles to individual organization members does not scale well when an organization has hundreds of users who all need the same permissions. Organization groups now support realm and client role assignments, so administrators can assign a role once to the organization group and have it automatically appear in <code>realm_access</code> and <code>resource_access</code> token claims for all group members.</p> </div> <div class="paragraph"> <p>Additionally, the <strong>Organization Group Membership</strong> protocol mapper (OIDC and SAML) can include these roles within the <code>organization</code> claim, organized per organization, by enabling the <strong>Add group role mappings</strong> configuration option.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/docs/26.7.0/server_admin/#_managing_groups_">Managing organization groups</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_better_passkey_compatibility_with_new_webauthn_policy_options">Better passkey compatibility with new WebAuthn policy options</h4> <div class="paragraph"> <p>Passkeys let users sign in with biometrics or a security key instead of a password. To work correctly, the server must tell the browser whether it prefers a discoverable credential (a passkey stored on the device) or not — and the previous Yes/No option could not express the increasingly common <code>preferred</code> value.</p> </div> <div class="paragraph"> <p>The WebAuthn Policy and WebAuthn Passwordless Policy now provide a <code>Discoverable credential</code> option that follows the current <a href="https://www.w3.org/TR/webauthn/#dom-authenticatorselectioncriteria-residentkey">WebAuthn specification</a>, supporting <code>required</code>, <code>preferred</code>, and <code>discouraged</code> values. This improves compatibility with passkey providers such as iCloud Keychain, Google Password Manager, and 1Password. The previous <code>Require Discoverable Credential</code> option is now deprecated and planned for removal in a future release.</p> </div> </div> <div class="sect3"> <h4 id="_easier_realm_discovery_by_display_name_search">Easier realm discovery by display name search</h4> <div class="paragraph"> <p>Administrators often give realms short technical names (like <code>acme-prod</code>) but set a human-readable display name (like <code>Acme Corporation</code>). Previously, the admin console search only matched against the technical realm name, making it harder to find realms in large multi-tenant deployments.</p> </div> <div class="paragraph"> <p>Realm search now matches against the display name in addition to the realm name, so administrators can find realms by whichever name they remember.</p> </div> </div> <div class="sect3"> <h4 id="_type_safe_validation_for_parameterized_scopes_experimental">Type-safe validation for parameterized scopes (experimental)</h4> <div class="paragraph"> <p>Parameterized scopes allow OAuth clients to request context-specific access — for example, <code>project:12345</code> to request access to a particular project, or <code>account:savings</code> to scope a token to a specific bank account. Previously, the parameter value was validated only by an optional regex, making it easy to pass invalid or unexpected values.</p> </div> <div class="paragraph"> <p>Parameterized scopes can now define a parameter type that validates the captured value at request time. Built-in types include <code>string</code>, <code>integer</code>, <code>boolean</code>, <code>username</code>, and <code>custom</code> (validated against an admin-defined regex). The type is required when creating parameterized scopes with the feature enabled, ensuring that tokens always carry well-formed scope parameters.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/docs/26.7.0/upgrading/">Upgrading Guide</a>.</p> </div> </div> <div class="sect3"> <h4 id="_additional_datasources_may_be_excluded_from_health_checks">Additional datasources may be excluded from health checks</h4> <div class="paragraph"> <p>When using multiple datasources, a failing non-critical datasource can cause the health check endpoint to report the entire deployment as unhealthy. Individual datasources can now be excluded from health checks, so optional or secondary datasources do not trigger unnecessary alerts or affect load balancer routing.</p> </div> <div class="paragraph"> <p>Read more about it in the <a href="https://www.keycloak.org/server/db#multiple-datasources">Configure multiple datasources</a> guide.</p> </div> </div> </div> <div class="sect2"> <h3 id="_configuring_and_running">Configuring and Running</h3> <div class="sect3"> <h4 id="_enhanced_reverse_proxy_guides_with_blueprints_for_haproxy_and_traefik">Enhanced reverse proxy guides with blueprints for HAProxy and Traefik</h4> <div class="paragraph"> <p>Running Keycloak in production requires a reverse proxy, but configuring TLS termination, certificate forwarding, and admin API security correctly across different proxies is error-prone.</p> </div> <div class="paragraph"> <p>The reverse proxy documentation has been significantly expanded with dedicated step-by-step guides for HAProxy and Traefik covering both TLS passthrough and re-encrypt modes, and also explain the concepts so they can be applied for other proxies as well.</p> </div> <div class="paragraph"> <p>For more details, see the <a href="https://www.keycloak.org/server/reverseproxy">Using a reverse proxy</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_simplified_multi_cluster_high_availability_without_external_caches_experimental">Simplified multi-cluster high availability without external caches (preview)</h4> <div class="paragraph"> <p>The existing multi-cluster setup for Keycloak requires deploying and managing an external Infinispan cluster for cross-site session replication, along with vendor-specific fencing infrastructure for automated failover. This adds significant operational complexity and limits deployments to specific environments.</p> </div> <div class="paragraph"> <p>Multi-cluster v2 removes the external Infinispan requirement entirely. Keycloak instances connect directly to each other using embedded Infinispan caches and rely on the synchronously replicated database as the single source of truth. Cache invalidation across sites is handled through a database-backed outbox pattern. The load balancer can detect the downtime of a site without requiring external fencing infrastructure.</p> </div> <div class="paragraph"> <p>To enable this setup, start Keycloak with the feature <code>stateless</code>. For architecture details and a deployment blueprint, see the <a href="https://www.keycloak.org/high-availability/multi-cluster-v2/introduction">Multi-cluster deployments (v2)</a> guide.</p> </div> </div> <div class="sect3"> <h4 id="_keycloak_operator_kustomize_installation">Keycloak Operator kustomize installation</h4> <div class="paragraph"> <p>Installing the Keycloak Operator on vanilla Kubernetes clusters previously required downloading and applying individual manifest files, making upgrades and customization harder to manage. The Operator can now be installed using kustomize, providing a declarative and reproducible installation method.</p> </div> <div class="paragraph"> <p>For installation instructions, see the <a href="https://www.keycloak.org/guides#operator">Operator Guide</a>.</p> </div> </div> <div class="sect3"> <h4 id="_cluster_wide_install_mode_for_the_keycloak_operator_preview">Cluster-wide install mode for the Keycloak Operator (preview)</h4> <div class="paragraph"> <p>Organizations running multiple Keycloak instances across different Kubernetes namespaces previously needed to install a separate Operator in each namespace. The Keycloak Operator now exposes <code>AllNamespaces</code> as a supported OLM install mode, allowing a single Operator instance to reconcile <code>Keycloak</code> custom resources across all namespaces in the cluster. For non-OLM installations, cluster-wide deployment is available through the <code>cluster-wide</code> kustomization overlay.</p> </div> <div class="paragraph"> <p>Cluster-wide installation is in preview. For installation instructions and limitations, see the <a href="https://www.keycloak.org/guides#operator">Operator Guide</a>.</p> </div> </div> </div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/49427">#&#8203;49427</a> [CVE-2026-9796] Admin role rename TOCTOU bypasses checkAdminRoles — realm-wide escalation from manage-clients <code>admin/rbac</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49430">#&#8203;49430</a> [CVE-2026-9689] HTTP Parameter Pollution in OIDC redirect URI allows response parameter duplication <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49432">#&#8203;49432</a> [CVE-2026-9798] CIBA authentication flow bypasses brute-force account lockout <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49766">#&#8203;49766</a> [CVE-2026-11986] FGAP v1 allows unassigning any role <code>admin/fine-grained-permissions</code></li> </ul> <h3>Weaknesses</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/48717">#&#8203;48717</a> SAML Identity Provider settings in the Admin UI are not asking for signatures by default <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49137">#&#8203;49137</a> Welcome page admin bootstrap bypasses local-only check when behind a same-host proxy without forwarding headers <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49215">#&#8203;49215</a> JWT Authorization Grant: namespace jti cache keys and reorder signature verification <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49312">#&#8203;49312</a> Organization group members endpoint does not check Users permission <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49605">#&#8203;49605</a> Member's organizations endpoint missing per-org FGAP filtering <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49660">#&#8203;49660</a> OID4VCI: Missing disabled-client check in PreAuthorizedCodeGrantType <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49838">#&#8203;49838</a> SD-JWT: Array index shifting in SdJwtVerificationContext leaves undisclosed placeholders in verified payload <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49920">#&#8203;49920</a> WebAuthn: sign counter updated to stored+1 instead of assertion value <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49921">#&#8203;49921</a> WebAuthn: challenge not consumed after assertion validation <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49922">#&#8203;49922</a> FreeMarker: deprecated no-arg Configuration constructor pins engine to legacy 2.3.0 defaults <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49961">#&#8203;49961</a> Themes: FolderTheme.getTemplate() missing path-containment check <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50074">#&#8203;50074</a> SSF admin endpoint: missing client-level authorization check exposes push delivery secret <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50316">#&#8203;50316</a> Use constant-time comparison when validating OTP codes <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50460">#&#8203;50460</a> SSF push URL allow-list bypass via authority-attached wildcard <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50464">#&#8203;50464</a> SAML Step-Up: Over-achieved LoA collapses AuthnContextClassRef to AC_UNSPECIFIED on SSO re-entry <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50466">#&#8203;50466</a> SAML Step-Up: Three robustness issues in LoA mapping and classRef selection <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50481">#&#8203;50481</a> Cacheless: JpaSingleUseObjectProvider.putIfAbsent() missing lifespan validation present in put() </li> <li><a href="https://github.com/keycloak/keycloak/issues/50482">#&#8203;50482</a> Cacheless: Root authentication session lookup uses assert-only realm check — no-op in production </li> <li><a href="https://github.com/keycloak/keycloak/issues/50483">#&#8203;50483</a> Cacheless: LoginFailureExpirationAction compares milliseconds vs seconds — rows never reaped </li> <li><a href="https://github.com/keycloak/keycloak/issues/50488">#&#8203;50488</a> HAProxy guide: Missing unconditional del-header for Client-Cert before conditional set-header </li> <li><a href="https://github.com/keycloak/keycloak/issues/50491">#&#8203;50491</a> Client API v2: Operator secretRef resolves arbitrary Secrets without ownership validation <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50494">#&#8203;50494</a> Client API v2: Operator prefers HTTP over HTTPS when both are enabled <code>admin/api-v2</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50534">#&#8203;50534</a> Identity Broker v2: Internal exception message reflected in /token error response <code>oidc</code></li> </ul> <h3>Removed features</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/44013">#&#8203;44013</a> Deprecate the Twitter IDP implementation due to old twitter4j library <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48104">#&#8203;48104</a> Remove support for token-exchange-external-internal:v2 <code>token-exchange/federated</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49270">#&#8203;49270</a> Remove the batching option for the persistent sessions </li> </ul> <h3>New features</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/9686">#&#8203;9686</a> Store the Dynamic Scope parameter to avoid showing the Consent Screen every time there's an authentication </li> <li><a href="https://github.com/keycloak/keycloak/issues/20128">#&#8203;20128</a> Add support for `reencrypt` OpenShift Routes to the Operator <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/22042">#&#8203;22042</a> More flexible imports in custom theme (i.e. CSS media queries) <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/35650">#&#8203;35650</a> Compatibility profiles </li> <li><a href="https://github.com/keycloak/keycloak/issues/44317">#&#8203;44317</a> [OID4VCI] Add a client policy to require a credential offer </li> <li><a href="https://github.com/keycloak/keycloak/issues/46543">#&#8203;46543</a> Step-up authentication for SAML - supported <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48623">#&#8203;48623</a> Make the admin client, from the admin-ui more easy to use </li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/9915">#&#8203;9915</a> Make the consent screen text for dynamic scopes customizable with a reference to the dynamic scope parameter </li> <li><a href="https://github.com/keycloak/keycloak/issues/10696">#&#8203;10696</a> Improve WebAuthn tests documentation <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/12223">#&#8203;12223</a> Dynamic scopes: requested scopes get mixed up between token requests <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/17758">#&#8203;17758</a> [UX Review] Optimize the number box in the Time-policy creation page of client Authorization <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/17762">#&#8203;17762</a> [UX Review] Optimize the initial page of Keys in OIDC client <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/17770">#&#8203;17770</a> Remove unnecessary conditions from code <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/17771">#&#8203;17771</a> Caught errors should have the correct type associated with them <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/22229">#&#8203;22229</a> UI should prevent admins from defining a dynamic client scope with type Default <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/24436">#&#8203;24436</a> Account API - "/applications/{clientId}/consent" : Provide option to get enhanced ConsentScopeRepresentation <code>account/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/24823">#&#8203;24823</a> Adding client_id as prefix in client roles mapper <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/26602">#&#8203;26602</a> Allow user search by direct lookup via username and email </li> <li><a href="https://github.com/keycloak/keycloak/issues/26699">#&#8203;26699</a> Nested group members from Active Directory are not showing in Keycloak groups <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/29558">#&#8203;29558</a> Best practices for detecting support for Passkeys - support for isUserVerifyingPlatformAuthenticatorAvailable() <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/30328">#&#8203;30328</a> Add ability to inspect generated SAML response for SAML Clients with client scope mappings <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/31641">#&#8203;31641</a> Implement organization-specific admin roles with limited permissions <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/32527">#&#8203;32527</a> Provide default krb5.conf in Docker image or extend migration docs <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/34104">#&#8203;34104</a> Improve robustness of backchannel logout with client sessions </li> <li><a href="https://github.com/keycloak/keycloak/issues/38632">#&#8203;38632</a> README.md Other Keycloak Projects </li> <li><a href="https://github.com/keycloak/keycloak/issues/40026">#&#8203;40026</a> Support subdomain matching for Organizations in IdP redirect logic </li> <li><a href="https://github.com/keycloak/keycloak/issues/41164">#&#8203;41164</a> Redirection Endpoint should be validated not to include a hash in the URL <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/42513">#&#8203;42513</a> Set residentKey instead of requireResidentKey in Webauthn creation request <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/42883">#&#8203;42883</a> FIX multiple LDAP failover & document the possibility of having multiple LDAP URLs in LDAP provider </li> <li><a href="https://github.com/keycloak/keycloak/issues/43955">#&#8203;43955</a> Cluster-wide Operator MVP </li> <li><a href="https://github.com/keycloak/keycloak/issues/45104">#&#8203;45104</a> Add native "Remember Me" support to WebAuthn/Passkey Authentication Flows <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45292">#&#8203;45292</a> Search realms by "Display name" in the "Manage realms" view <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45295">#&#8203;45295</a> Improve client authentication flows <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45497">#&#8203;45497</a> Introduce granular roles for Organization management (manage-organizations, view-organizations) <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45866">#&#8203;45866</a> Customize SAML service provider metadata </li> <li><a href="https://github.com/keycloak/keycloak/issues/45900">#&#8203;45900</a> Support multiple organization scopes in OIDC token requests <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46435">#&#8203;46435</a> Good database instructions for a production ready Keycloak setup </li> <li><a href="https://github.com/keycloak/keycloak/issues/46740">#&#8203;46740</a> Prevent ASCII control characters in query parameters </li> <li><a href="https://github.com/keycloak/keycloak/issues/46903">#&#8203;46903</a> A User belonging to multiple organization should be allowed to change his organization choice during login <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46959">#&#8203;46959</a> Enhance WebAuthn Conditional UI to auto-trigger passkey modal on page load <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46981">#&#8203;46981</a> Support experimental cluster-wide operator installation by using kubectl <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47174">#&#8203;47174</a> MySQL/TiDB: Configure DB socket timeouts on the fly during connection creation phase <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47284">#&#8203;47284</a> Introduce ORGANIZATIONS resource type in Fine-Grained Admin Permissions <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47314">#&#8203;47314</a> Token Exchange with sender constrained tokens missing cnf claim <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47327">#&#8203;47327</a> Support mapping existing Realm and Client roles to Organization Groups <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47330">#&#8203;47330</a> Document provided ProtocolMapper implementations <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47356">#&#8203;47356</a> Enhancement: Improve the performance of loading large password blacklists </li> <li><a href="https://github.com/keycloak/keycloak/issues/47383">#&#8203;47383</a> Add example for health check when using HTTPS </li> <li><a href="https://github.com/keycloak/keycloak/issues/47431">#&#8203;47431</a> Organization feature will only show linked IDPs if the user has already one linked <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47542">#&#8203;47542</a> Use client-side Streaming for admin api v2 in the Java client </li> <li><a href="https://github.com/keycloak/keycloak/issues/47762">#&#8203;47762</a> Enhance quick-theme .jar generation. <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47851">#&#8203;47851</a> OrganizationGroupMembershipMapper should support configurable token claim name <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47951">#&#8203;47951</a> Add Vietnamese (vi) as a translation <code>translations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47960">#&#8203;47960</a> Add CLI options for mTLS database connections </li> <li><a href="https://github.com/keycloak/keycloak/issues/47963">#&#8203;47963</a> Update tested configurations for single- and multi-cluster to the recent OpenShift version </li> <li><a href="https://github.com/keycloak/keycloak/issues/48053">#&#8203;48053</a> Allow db-connect-timeout to be used for all datasources <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48059">#&#8203;48059</a> Safeguard against wrong PID in containers <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48088">#&#8203;48088</a> When a group is granted a role, it should not read all existing role mappings from the database <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48098">#&#8203;48098</a> Expose hidden management options </li> <li><a href="https://github.com/keycloak/keycloak/issues/48338">#&#8203;48338</a> Add details to AdminEvent in UserResource.removeCredential <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48393">#&#8203;48393</a> [CIMD] Document the existing query-string defense on the MCP Authorization Server docs page </li> <li><a href="https://github.com/keycloak/keycloak/issues/48420">#&#8203;48420</a> Upgrade `webauthn4j` to 0.30.3 <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48445">#&#8203;48445</a> Enable passkeys configuration does not follow best UX <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48539">#&#8203;48539</a> Update WebAuthn Metadata service data <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48540">#&#8203;48540</a> Support icons for Passkeys credentials <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48557">#&#8203;48557</a> Show Groups tab in the account console when user is part of any group <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48588">#&#8203;48588</a> Fine Grained Authorization v2 : does not work PUT https://i<keycloak>/admin/realms/<realm>/admin-permissions/groups/<group-id> <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48730">#&#8203;48730</a> DB documentation doesn't state on how to check the transaction isolation for MSSQL </li> <li><a href="https://github.com/keycloak/keycloak/issues/48755">#&#8203;48755</a> User deletion latency grows with Infinispan session-cache fill level / size <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48863">#&#8203;48863</a> Include kid in details of CLIENT_LOGIN event of Signed JWT Client Authentication </li> <li><a href="https://github.com/keycloak/keycloak/issues/48892">#&#8203;48892</a> SSF: Track if stream was created by Keycloak or ssfReceiver <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48893">#&#8203;48893</a> SSF: Remove "audience" field from create stream form <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48962">#&#8203;48962</a> Add suggestions when features are incorrectly specified <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49037">#&#8203;49037</a> Expose multi-namespace install modes </li> <li><a href="https://github.com/keycloak/keycloak/issues/49040">#&#8203;49040</a> Make `AbstractJWTClientValidator` / `FederatedJWTClientValidator` methods `protected` for extensibility </li> <li><a href="https://github.com/keycloak/keycloak/issues/49177">#&#8203;49177</a> Remove explicit --shutdown-timeouts configuration from proxy example configurations </li> <li><a href="https://github.com/keycloak/keycloak/issues/49235">#&#8203;49235</a> SSF: Move Push timeout settings to SSF Receiver tab <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49248">#&#8203;49248</a> Consider additional datasources in health checks </li> <li><a href="https://github.com/keycloak/keycloak/issues/49348">#&#8203;49348</a> Ensure proper management of thread-bound resources. </li> <li><a href="https://github.com/keycloak/keycloak/issues/49372">#&#8203;49372</a> Unify buttons in horizontal layout for Login UI <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49378">#&#8203;49378</a> Login page title should use full width when locale selector is hidden <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49424">#&#8203;49424</a> Include subject to email template attributes </li> <li><a href="https://github.com/keycloak/keycloak/issues/49453">#&#8203;49453</a> Persistent sessions should be written as part of the original main transaction where possible <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49469">#&#8203;49469</a> Stateless mode: store volatile session data in the database </li> <li><a href="https://github.com/keycloak/keycloak/issues/49491">#&#8203;49491</a> Full user representation when querying organization members <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49573">#&#8203;49573</a> Attribute for clients scopes to always require consent <code>token-exchange/subject-impersonation</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49608">#&#8203;49608</a> Correct themes README </li> <li><a href="https://github.com/keycloak/keycloak/issues/49645">#&#8203;49645</a> Organization member read endpoints should document parent-gated org-level authorization contract <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49711">#&#8203;49711</a> [Login UI] Improve credential selector layout <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49757">#&#8203;49757</a> Reverse proxy docs: should not proxy master realm <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49873">#&#8203;49873</a> How to thread dump with and without virtual threads <code>observability</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49947">#&#8203;49947</a> Add OIDF conformance tests to CI <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49988">#&#8203;49988</a> Docs should describe on how to detect if a graceful shutdown was successful <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50050">#&#8203;50050</a> SSF: Handle disabled SSF Receiver client <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50087">#&#8203;50087</a> Generate queryable fields documentation from code <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50134">#&#8203;50134</a> Refresh client data after invalidating rotated secret in Credentials tab </li> <li><a href="https://github.com/keycloak/keycloak/issues/50261">#&#8203;50261</a> MCP Documentation for 26.7 </li> <li><a href="https://github.com/keycloak/keycloak/issues/50327">#&#8203;50327</a> Improve OAuth Identity and Authorization Chaining Across Domains guide </li> <li><a href="https://github.com/keycloak/keycloak/issues/50369">#&#8203;50369</a> Composite-role expansion does an N+1 of `getChildRoles` queries (each with an auto-flush) that dominates Keycloak CPU on the cache-miss path <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50467">#&#8203;50467</a> Prevent DoS when using complex filter conditions <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50476">#&#8203;50476</a> Retarget quarkus-next to Quarkus 3.x branch after main switched to 4.0 </li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/12142">#&#8203;12142</a> IdP backchannel logout does not work with session id in logout <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/20649">#&#8203;20649</a> "Not username" and "Not email" options when creating/changing a password, should ignore letter case when comparing password to email or to username <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/27431">#&#8203;27431</a> New clients have a JavaScript default policy configured which causes problems on export/import <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/32124">#&#8203;32124</a> Backchannel logout notification client for Update_Password AIA is not having all the session ids <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/33204">#&#8203;33204</a> Identity Providers are missing from the login page if I request a reset password for an existing user <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/35104">#&#8203;35104</a> Timestamp overflow in client secret rotation feature leads to next refresh time being set to the past <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/37355">#&#8203;37355</a> Web Crypto API not available in `login-status-iframe.html` when using admin console from insecure context <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/38124">#&#8203;38124</a> High values for client secret expiration result in expiration dates in the past <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/40603">#&#8203;40603</a> Account UI reports "Something went wrong" if user doesn't have permissions to view applications <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/44591">#&#8203;44591</a> Terms and Conditions Accepted Timestamp <code>user-profile</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/44620">#&#8203;44620</a> Possible data loss when scaling Keycloak StatefulSet down (on Kubernetes) <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/44741">#&#8203;44741</a> Device activity does not recognize iOS 26 correct <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45420">#&#8203;45420</a> [OID4VCI] Wrong typ value for SD-JWT VC <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45494">#&#8203;45494</a> ScrollForm navigation does not update active section on click or scroll <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45568">#&#8203;45568</a> Pending auth flow waiting for email verification succeeds even after password reset - providing room for pre-account takeover attacks <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/45716">#&#8203;45716</a> Problem with Standard Token Exchange with Dynamic Scopes feature enabled (Wrong default scopes) <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46083">#&#8203;46083</a> "Full scope allowed" toggle reverts to previous state when switching between Scope and Mappers tabs in Dedicated scopes <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46088">#&#8203;46088</a> Newly created resource appears on both current and next page in Authorization Resources tab <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46132">#&#8203;46132</a> profile scope causes NumberFormatException <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46172">#&#8203;46172</a> Issues when deleting several realms at the same time <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46463">#&#8203;46463</a> Input field for device user code is badly formatted <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46634">#&#8203;46634</a> Brute force detection counter does not work properly <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46742">#&#8203;46742</a> Keycloak makes network requests to addresses in login certificates before verifying them <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46926">#&#8203;46926</a> PAR endpoint enforces “Request Object Required” and expects request_uri <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46954">#&#8203;46954</a> ClearExpiredEvents job crashes app and locks DB when EVENT_ENTITY Table has large amount of records <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/46978">#&#8203;46978</a> Document / validate .conf extension is required for --config-file option <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47017">#&#8203;47017</a> Remember me does not work when organization scope is enabled on login session. <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47046">#&#8203;47046</a> [OID4VCI] Credential definition type should include VerifiableCredential <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47061">#&#8203;47061</a> Duplicated flows can have illegal characters in step name <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47202">#&#8203;47202</a> DefaultLocaleUpdaterProvider: KEYCLOAK_LOCALE cookie not set for READ_ONLY federated users <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47274">#&#8203;47274</a> [OID4VCI] Option 'Pre-Authorized code lifespan' should be renamed <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47294">#&#8203;47294</a> Use SecureRandom instead of Random for D-Bus cookie generation in SSSD federation <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47341">#&#8203;47341</a> Updating client scope fails if it was saved while the dynamic scopes feature was active in the past <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47386">#&#8203;47386</a> [OID4VCI] TokenResponse requires credential_identifiers in authorization_details </li> <li><a href="https://github.com/keycloak/keycloak/issues/47421">#&#8203;47421</a> Flaky test: org.keycloak.testsuite.model.session.OfflineSessionPersistenceTest#testPersistenceMultipleNodesClientSessionAtSameNode <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47432">#&#8203;47432</a> The cancel button in the custom UiTabProvider encounters an issue where it redirects to an incorrect URL and triggers an error. <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47477">#&#8203;47477</a> Flaky test: org.keycloak.testsuite.forms.AuthenticatorSubflowsTest2#testSubflow2 <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47499">#&#8203;47499</a> Maven windows wrapper trips over whitespace in pathname for setup <code>dependencies</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47500">#&#8203;47500</a> Build Quarkus snapshots in quarkus-next workflow <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47513">#&#8203;47513</a> Review JwtProofValidator <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47523">#&#8203;47523</a> The name "master" seems to be hard-coded in places and thus breaks KC_SPI_ADMIN_REALM <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47545">#&#8203;47545</a> Keycloak ships source maps for Admin UI and Account UI <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47560">#&#8203;47560</a> Missing default value for max parameter in the Admin REST APIs docs <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47659">#&#8203;47659</a> SRCFG01008 warning in source Quarkus dev mode when kc.log-console-output=default (not reproducible via packaged kc.sh) <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47681">#&#8203;47681</a> Log Injection and Audit Forgery in OIDC Authorization Endpoint (client_id parameter) <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47700">#&#8203;47700</a> Duplicate entries created in Role Attributes during concurrent setSingleAttribute calls <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47710">#&#8203;47710</a> updated popover when there is no change <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47733">#&#8203;47733</a> Able to update Identity Provider alias via admin console and API <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47750">#&#8203;47750</a> cache-embedded-mtls-enabled maps to a build time property, but is a runtime option <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47832">#&#8203;47832</a> Flaky test: org.keycloak.testsuite.model.session.OfflineSessionPersistenceTest#testPersistenceClientSessionsMultipleNodes <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47833">#&#8203;47833</a> Flaky test: org.keycloak.testsuite.model.session.UserSessionPersisterProviderTest#testUserRemoved <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47834">#&#8203;47834</a> Flaky test: org.keycloak.testsuite.model.session.UserSessionPersisterProviderTest#testExpirationDistribution <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47835">#&#8203;47835</a> Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderOfflineModelTest#testOfflineSessionLazyLoadingPropagationBetweenNodes <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47898">#&#8203;47898</a> [OID4VCI] Default client scopes not configured correctly </li> <li><a href="https://github.com/keycloak/keycloak/issues/47914">#&#8203;47914</a> Declarative UI: Avoid silent failure to add path params <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47923">#&#8203;47923</a> account-console client can be deleted despite being a built-in internal client <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47925">#&#8203;47925</a> Flaky test: org.keycloak.testsuite.model.session.AuthenticationSessionTest#testConcurrentAuthenticationSessionsRemoval <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47958">#&#8203;47958</a> Admin UI Test is logging to the console <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47966">#&#8203;47966</a> Client admin v2 API: service account role management fails for client roles <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47967">#&#8203;47967</a> Generated openapi.yaml drifts on incremental builds <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47970">#&#8203;47970</a> JDBC_PING2 will stall when in a two-node-split-brain one node dies <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47978">#&#8203;47978</a> Flaky test: org.keycloak.testsuite.model.session.UserSessionInitializerTest#testUserSessionPropagationBetweenSites <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47979">#&#8203;47979</a> Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderOfflineModelTest#testOfflineSessionLazyLoading <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47990">#&#8203;47990</a> Flaky test: org.keycloak.testsuite.model.session.AuthenticationSessionTest#testConcurrentAuthenticationSessionsCreation <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47993">#&#8203;47993</a> Docs: directory of keycloak-database-update.sql file <code>import-export</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48014">#&#8203;48014</a> [OID4VCI] credential_offer_uri can only be consumed once </li> <li><a href="https://github.com/keycloak/keycloak/issues/48024">#&#8203;48024</a> Relax Client ID validation for the Signed JWT - Federated (Kubernetes Service Accounts) <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48035">#&#8203;48035</a> [OID4VCI] Self-Signed x5c Bypasses Key Attestation Validation <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48044">#&#8203;48044</a> OID4VC QR Code Unbounded Dimensions DoS <code>oid4vc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48084">#&#8203;48084</a> Admin console localizate realm name <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48119">#&#8203;48119</a> Flaky test: org.keycloak.testsuite.broker.KcOidcBrokerTest#loginWithExistingUserWithBruteForceEnabled <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48120">#&#8203;48120</a> Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderModelTest#testCreateUserSessionsParallel <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48121">#&#8203;48121</a> Flaky test: org.keycloak.testsuite.model.session.UserSessionProviderModelTest#testStreamsMarshalling <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48129">#&#8203;48129</a> Stabilize Operator CI in quarkus-next <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48137">#&#8203;48137</a> Unhandled NullPointerException on Keycloak Server via GET parameter "key" with unsigned JWT <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48173">#&#8203;48173</a> Maven cache is never extracted on Azure/Aurora VMs <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48206">#&#8203;48206</a> Registration with email verification - corner case scenario for pre-account takeover <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48230">#&#8203;48230</a> Flaky test: org.keycloak.testsuite.model.session.OfflineSessionPersistenceTest#testPersistenceMultipleNodesClientSessionsAtRandomNode <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48284">#&#8203;48284</a> UiPageProvider components not refreshed on page change <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48357">#&#8203;48357</a> Restore Quarkus snapshot cache in unit-test-setup for quarkus-next <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48366">#&#8203;48366</a> OpenAPI spec key reordering on incremental builds <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48392">#&#8203;48392</a> Migration fails for organization admin roles with LazyInitializationException <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48412">#&#8203;48412</a> Add option to specify the CA Subject DN in the Client X.509 Authenticator <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48428">#&#8203;48428</a> Keycloak issues tokens via implicit and hybrid flow when DPoP is enforced for the client <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48441">#&#8203;48441</a> Flaky test: org.keycloak.testsuite.model.singleUseObject.SingleUseObjectModelTest#testCluster <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48442">#&#8203;48442</a> Flaky test: org.keycloak.testsuite.model.user.UserModelTest#testAddRemoveUserConcurrent <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48443">#&#8203;48443</a> Flaky test: org.keycloak.testsuite.model.session.AuthenticationSessionTest#testAuthSessions <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48446">#&#8203;48446</a> Flaky test: org.keycloak.testsuite.authz.PolicyEvaluationTest# <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48456">#&#8203;48456</a> Account Console v3: Cannot revoke consent for clients with URL-based or special character clientIds (Regression of #&#8203;19515) <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48458">#&#8203;48458</a> Read-only multivalued user profile attributes are not grayed out in the account console <code>user-profile</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48459">#&#8203;48459</a> Role update failes when no name is set <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48487">#&#8203;48487</a> Improper Authentication for required actions allows front-channel token issuance for disabled user in implicit/hybrid flow <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48514">#&#8203;48514</a> Permission issue prevents user with manage-identity-provider role to access "realm roles" list when adding hardcoded role mapper <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48559">#&#8203;48559</a> [quarkus-next] Model tests fail due to ByteBuddy removal from Hibernate runtime classpath <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48561">#&#8203;48561</a> Quarkus UT (windows-latest) cancelled when ubuntu variant fails <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48566">#&#8203;48566</a> Admin console assets 404 in 26.6.x: quay.io/keycloak/keycloak:26.6 ships /opt/keycloak/data/tmp as root:root 0755, blocking gzip cache creation <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48589">#&#8203;48589</a> Test framework startup timeout is ignored in DockerKeycloakDistribution <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48592">#&#8203;48592</a> Keycloak does an LDAP query with service account UUID when a token from a service account is used for obtaining a Requesting Party Token from a client with Authorization services <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48593">#&#8203;48593</a> Management endpoint doesn't pick up HTTPS truststore <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48594">#&#8203;48594</a> [quarkus-next] Aurora CI fails with missing quarkus-bom:999-SNAPSHOT on remote EC2 VM <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48598">#&#8203;48598</a> HttpDistTest.maxQueuedRequestsTest fails on runners with limited vCPUs <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48610">#&#8203;48610</a> Neither `INVITE_ORG` nor `REGISTER` event is triggered when a new user is invited to an organization <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48611">#&#8203;48611</a> Docs: server_admin/topics/overview/how.adoc SAML 2.0 link is broken <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48634">#&#8203;48634</a> Verify Email gets added to all the users in the realm and blocks getting a REST Token <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48645">#&#8203;48645</a> `ORGANIZATION_MEMBERSHIP` event with `ACTION` operation is missing `representation` and `detail` fields <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48647">#&#8203;48647</a> Flaky test: org.keycloak.testsuite.forms.RPInitiatedFrontChannelLogoutTest#testFrontChannelLogoutWithoutSessionRequired <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48654">#&#8203;48654</a> OrganizationProvider.count() used for existence checks causes severe database lag with large realms <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48666">#&#8203;48666</a> User Storage Task sync event can lead to deadlocks and outdated information <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48680">#&#8203;48680</a> Realm display name localization placeholder is not expanded when resolving OTP issuer name <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48721">#&#8203;48721</a> Introspect endpoint returns "invalid_request" instead of "invalid_client" on client authentication failure (RFC 7662) <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48749">#&#8203;48749</a> Prevent setting different than default decisionStrategy for FGAP <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48771">#&#8203;48771</a> Identity Provider detail settings allow saving without changes <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48812">#&#8203;48812</a> AutoUpdate force recreate <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48834">#&#8203;48834</a> NPE in `OrganizationGroupMembershipMapper` when no `organization` scope is requested <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48862">#&#8203;48862</a> Flaky test: org.keycloak.testsuite.broker.OidcAdvancedClaimToGroupMapperTest#mapperStillWorksWhenTopLevelGroupIsConvertedToSubGroup <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48868">#&#8203;48868</a> OIDC bearer-only legacy clients lose client secret after updating basic attributes (name/description) on Keycloak 23 <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48882">#&#8203;48882</a> Save button on "Create organization" page is not enabled when name is pasted from clipboard <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48903">#&#8203;48903</a> Regression: forced organization validation in 26.6 even without taking Organizations feature into use <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48917">#&#8203;48917</a> Missing locale keys in Organization Membership protocol mapper <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48920">#&#8203;48920</a> Test framework startup timeout is hardcoded to 5 minutes <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48949">#&#8203;48949</a> JS CI is failing in the Admin UI lint check <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49026">#&#8203;49026</a> Admin UI: Enter key does not trigger search in Organization Members, Invitations, and User Organizations <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49057">#&#8203;49057</a> Migration-strategy=manual bypasses DBA workflow for custom providers (re-opening #&#8203;36525) <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49063">#&#8203;49063</a> Authorization Evaluate results page hides the last resource behind the action bar <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49069">#&#8203;49069</a> Missing and incorrect permission checks on organization invitation endpoints <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49083">#&#8203;49083</a> Error while removing expired entries from database <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49139">#&#8203;49139</a> Starting FIPS mode in 26.6.1 fails with NoSuchAlgorithmException <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49146">#&#8203;49146</a> Quick theme login style broken <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49176">#&#8203;49176</a> SCIM: Incorrect location URL <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49180">#&#8203;49180</a> Unable to easily provide full certificate chain with HaProxySslClientCertificateLookup <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49185">#&#8203;49185</a> HttpResponse.setStatus is not generally usable </li> <li><a href="https://github.com/keycloak/keycloak/issues/49189">#&#8203;49189</a> LDAP: objectGUID binary attribute not converting to Base64/String in version 26.6.1 and 26.6.2 <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49192">#&#8203;49192</a> Compilation error because of setSystemPropertyOnServer <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49249">#&#8203;49249</a> Deprecate KeycloakContext.getRequestHeaders </li> <li><a href="https://github.com/keycloak/keycloak/issues/49250">#&#8203;49250</a> SSF: auto-notify-on-login fails with ReadOnlyException for users from a read-only LDAP federation <code>ssf</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49255">#&#8203;49255</a> PAR authorization request with prompt=create does not open registration page <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49256">#&#8203;49256</a> Oracle database ignores db-url-properties <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49257">#&#8203;49257</a> Identity provider broker callback returns HTTP 502 for client-side input validation failures (missing state, missing code) <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49267">#&#8203;49267</a> JPA exception mapper swallows some intermediate exceptions <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49272">#&#8203;49272</a> ReadOnlyAttributeUnchangedValidator.isUnchanged() does not handle omitted read-only attributes <code>user-profile</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49310">#&#8203;49310</a> Backoff retry does not honor the timeout <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49342">#&#8203;49342</a> Client secret rotation feature. Client Secret and Secret Rotated are always the same <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49388">#&#8203;49388</a> Dynamic scopes do not work with CIBA <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49441">#&#8203;49441</a> mutual-tls guide references wrong option <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49451">#&#8203;49451</a> UI allows invalid role-ldap-mapper configuration when "Use Realm Roles Mapping" is enabled together with Client ID selection. <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49452">#&#8203;49452</a> Admin UI: Workflows menu link visible to users without sufficient permissions to use it <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49456">#&#8203;49456</a> [CIMD] secure-redirect-uris-enforcer is not enforced for CIMD public clients during authorization requests <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49457">#&#8203;49457</a> [CIMD] Client policy executor auto-configuration is not applied when a public client is created through CIMD <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49481">#&#8203;49481</a> admin-client: TokenResponse.expiresIn typed as string but Keycloak returns a number <code>admin/client-js</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49490">#&#8203;49490</a> [SAST] Dead local stores (Batch 2) <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49495">#&#8203;49495</a> [SAST] Unchecked negative value in `readInteger()` <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49517">#&#8203;49517</a> French translation for credentials related events are incorrect <code>translations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49550">#&#8203;49550</a> MySQL migration fail due to group replication enforcing PK for `CREATE TABLE ... AS SELECT` <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49571">#&#8203;49571</a> FilterUtils.unescapeJsonString() incorrectly decodes escaped backslash sequences <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49575">#&#8203;49575</a> [OID4VCI] Account console "Issue to Wallet" does not work when scope-name different than credential-config-id <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49577">#&#8203;49577</a> Azure/Aurora "Upload flaky tests" fails with 409 Conflict on duplicate artifact name <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49612">#&#8203;49612</a> keycloak-admin-client logs errors to the console in fetchWithError <code>admin/client-js</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49644">#&#8203;49644</a> ExportImportTest is unstable in the windows tests <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49674">#&#8203;49674</a> Deleting admin-permissions client via v1 Admin API returns unknown_error instead of descriptive validation error <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49702">#&#8203;49702</a> UserSelect component limits the search results during autocompletion lookup <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49718">#&#8203;49718</a> FreeMarkerLoginFormsProvider: handleThemeResources called twice per request due to getMessage() in createCommonAttributes <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49720">#&#8203;49720</a> Organization managed users should not be allowed to link other idps from the account console <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49723">#&#8203;49723</a> FIPS tests are broken in CI <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49730">#&#8203;49730</a> `--features=cimd` should add `none` to token_endpoint_auth_methods_supported <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49732">#&#8203;49732</a> 26.6.2 upgrade: `Cannot invoke "org.keycloak.authorization.model.Resource.getScopes()" because "resourceTypeResource" is null` <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49742">#&#8203;49742</a> Simplified/ Traditional Chinese is displayed twice in locale selector <code>translations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49762">#&#8203;49762</a> NPE in MgmtPermissions.isRealmAdmin() when using AdminPermissions.evaluator() with FGAP V2 enabled <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49793">#&#8203;49793</a> OIDC: Client secret generation should ensure sufficient entropy for all configured HMAC signature algorithms <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49830">#&#8203;49830</a> 26.6.x upgrade runs unbounded OFFLINE_CLIENT_SESSION REALM_ID backfill, blocking startup on large data sets <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49841">#&#8203;49841</a> SCIM: ServiceProviderConfig endpoint returns filter.maxResults: 0 instead of 100 </li> <li><a href="https://github.com/keycloak/keycloak/issues/49847">#&#8203;49847</a> SCIM endpoint returns 500 instead of 404 for unknown resource types <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49869">#&#8203;49869</a> Fix KcAdmV2EditCLITest.testEditNonExistentResource assertion when client is not found <code>admin/cli</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49908">#&#8203;49908</a> Admin Console sessions page fails with unknown_error when federated user is deleted while an active session still exists <code>storage</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49909">#&#8203;49909</a> Invalid token at openid connection client registration results in 500 instead of 401 <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49952">#&#8203;49952</a> TokenManager.isValidScope overload ignores provided AuthorizationRequestContext (incomplete #&#8203;49388 refactor) <code>token-exchange</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49960">#&#8203;49960</a> Brute-force detection: Authenticated session token refresh resets lockout counter <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49969">#&#8203;49969</a> UserInfoEndpoint throws NullPointerException (HTTP 500) for JWTs with null or missing alg header <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49972">#&#8203;49972</a> SSF Stream empty state shows extra text and refresh button <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49973">#&#8203;49973</a> SCIM endpoint returns 500 instead of 401 for unauthenticated requests <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49978">#&#8203;49978</a> Kubernetes identity provider does not use documented default issuer </li> <li><a href="https://github.com/keycloak/keycloak/issues/50014">#&#8203;50014</a> Binding authentication flow leads to "flow.undefined" showing in admin ui <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50039">#&#8203;50039</a> Creating a client with empty `redirectUris` or `webOrigins` causes ORA-01400 (NULL insert) on Oracle database <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50054">#&#8203;50054</a> Warning of deprecated feature enabled <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50063">#&#8203;50063</a> Unable to invite user to organization when their email is a substring of an already-invited email <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50092">#&#8203;50092</a> Events search type filters don't filter while typing <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50128">#&#8203;50128</a> kcw: line 109: cd: /home/myuser/Downloads: No such file or directory </li> <li><a href="https://github.com/keycloak/keycloak/issues/50136">#&#8203;50136</a> StackOverflowError when trying to reset Password of OrganizationUser with FGAP <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50139">#&#8203;50139</a> Client Secret Rotation docs incorrectly mark feature as experimental instead of preview <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50175">#&#8203;50175</a> `KcAdmV2ClientCLITest#testListClientsWithFieldsProjection` is failing as query param cannot be exploded anymore <code>admin/cli</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50177">#&#8203;50177</a> SAML client creation fails with "Error creating X509v1Certificate" when Client ID contains URL query string characters <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50191">#&#8203;50191</a> Admin UI dynamic Group provider config crashes without GroupsResourceContext in 26.6.3 <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50195">#&#8203;50195</a> Admin UI E2E realm-settings/general.spec.ts "realm enable/disable switch" failure <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50201">#&#8203;50201</a> LDAP user federation re-binds the service account on every operation since 26.6.0 (connection pool not reused) <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50268">#&#8203;50268</a> `TokenManager#invokeTokenPostProcessors` doesn't respect `ProviderFactory#order` <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50286">#&#8203;50286</a> ConcurrentModificationException reading client-registration policy config under parallel client registration <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50291">#&#8203;50291</a> PathMatcher.buildUriFromTemplate throws StringIndexOutOfBoundsException for a template with an unclosed brace <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50300">#&#8203;50300</a> TimeSelector clears input and switches units when value is 0 in Admin Console <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50308">#&#8203;50308</a> NumberFormatException for PAR request URI lifespan <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50353">#&#8203;50353</a> Broken reference in rolling updates guide <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50380">#&#8203;50380</a> Workflow state removeAll() deletes records across all realms on realm removal <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50439">#&#8203;50439</a> Base2 testsuite (new) often fails with timeout <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50484">#&#8203;50484</a> [quarkus-next] Config interceptors create SmallRyeConfig during test bootstrap causing ServiceConfigurationError <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50500">#&#8203;50500</a> User Attribute mapper clears the value when custom attribute is selected <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50515">#&#8203;50515</a> Kotlin jars are included unnecessarily in the server assembly <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50582">#&#8203;50582</a> Keycloak 26.x Operator Fails to import a realm if the maxSecondaryAuthFailures field is present </li> <li><a href="https://github.com/keycloak/keycloak/issues/50633">#&#8203;50633</a> web-crypto-shim does not work after upgrade to uuid 14 <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/50712">#&#8203;50712</a> Source and javadoc jars not generated <code>core</code></li> </ul> </div> ### [`v26.6.4`](https://github.com/keycloak/keycloak/releases/tag/26.6.4) [Compare Source](https://github.com/keycloak/keycloak/compare/26.6.3...26.6.4) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50344">#&#8203;50344</a> CVE-2026-9099 Keycloak: group-admin escalation to realm-admin </li> <li><a href="https://github.com/keycloak/keycloak/issues/50345">#&#8203;50345</a> CVE-2026-9083 Keycloak: keycloak: information disclosure through arbitrary filesystem path probing </li> <li><a href="https://github.com/keycloak/keycloak/issues/50347">#&#8203;50347</a> CVE-2026-9086 Keycloak: keycloak: cross-site scripting (xss) via case-insensitive uri validation bypass </li> <li><a href="https://github.com/keycloak/keycloak/issues/50349">#&#8203;50349</a> CVE-2026-9705 Keycloak: keycloak: attacker can re-enable and take over disabled clients via registration access token </li> <li><a href="https://github.com/keycloak/keycloak/issues/50350">#&#8203;50350</a> CVE-2026-9795 Keycloak: keycloak: privilege escalation via improper scope mapping enforcement </li> <li><a href="https://github.com/keycloak/keycloak/issues/50351">#&#8203;50351</a> CVE-2026-9799 Keycloak: keycloak: unauthorized access to resources via uma permission ticket bypass </li> <li><a href="https://github.com/keycloak/keycloak/issues/50352">#&#8203;50352</a> CVE-2026-9800 Keycloak: keycloak policy enforcer: authorization bypass via incorrect uri comparison </li> <li><a href="https://github.com/keycloak/keycloak/issues/50357">#&#8203;50357</a> CVE-2026-11800 Keycloak: Authentication bypass via JWT algorithm confusion </li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/50100">#&#8203;50100</a> Upgrade to Quarkus 3.33.2.1 </li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47999">#&#8203;47999</a> [Keycloak JavaScript CI] - Build Keycloak <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49639">#&#8203;49639</a> Keycloak Admin Client tests fails in CI <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49700">#&#8203;49700</a> Incorrect migration guide reference <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49707">#&#8203;49707</a> Cannot build project due to ISPN protoschema and 26.2 branch <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49733">#&#8203;49733</a> keycloak-api-docs-dist is not deployable <code>dist/quarkus</code></li> </ul> </div> ### [`v26.6.3`](https://github.com/keycloak/keycloak/releases/tag/26.6.3) [Compare Source](https://github.com/keycloak/keycloak/compare/26.6.2...26.6.3) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47707">#&#8203;47707</a> CVE-2026-4800 lodash vulnerable to Code Injection via `_.template` imports key names <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47935">#&#8203;47935</a> [CVE-2026-4874] Server-Side Request Forgery via OIDC token endpoint manipulation <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48036">#&#8203;48036</a> [CVE-2026-37977] CORS Access-Control-Allow-Origin reflected from unverified JWT azp claim on UMA token endpoint <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48709">#&#8203;48709</a> [CVE-2026-7500] Improper Access Control on Keycloak Server when the account Account API feature is disabled <code>account/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48805">#&#8203;48805</a> CVE-2026-42581 Netty HTTP/1.0 TE+CL Coexistence Bypasses Smuggling Sanitization </li> <li><a href="https://github.com/keycloak/keycloak/issues/49118">#&#8203;49118</a> [CVE-2026-8922] OIDC token introspection ignores realm-level notBefore when client-level notBefore is set <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49133">#&#8203;49133</a> [CVE-2026-8830] Missing server-side WebAuthn validations during credential registration <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49174">#&#8203;49174</a> [CVE-2026-9088] Group Members Endpoint Bypasses User Profile Permissions <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49175">#&#8203;49175</a> [CVE-2026-9087] Cross-Session Email Verification Proof Not Bound to Upstream Identity in First-Broker-Login <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49426">#&#8203;49426</a> [CVE-2026-9802] Server restart resets startupTime, allowing reuse of rotated refresh tokens when revokeRefreshToken=true <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49428">#&#8203;49428</a> [CVE-2026-9794] SAML ECP faultstring discloses client existence and configuration state <code>saml</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49431">#&#8203;49431</a> [CVE-2026-9791] Organization data exposed in tokens and account API when Organizations feature is disabled at realm level <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49433">#&#8203;49433</a> [CVE-2026-0707] ClientRegistrationAuth DoS via malformed Authorization header (CVE-2026-0707 incomplete fix) <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49434">#&#8203;49434</a> [CVE-2026-9801] DoS in LDAP federation via malformed PasswordPolicyControl <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49435">#&#8203;49435</a> [CVE-2026-9704] Privilege escalation via silent subject_token removal in token exchange <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49436">#&#8203;49436</a> [CVE-2026-9792] ROPC grant bypass in client policy enforcement <code>oidc</code></li> </ul> <h3>Weaknesses</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/48978">#&#8203;48978</a> UNSAFE_PATH_PATTERN regex to cover percent-encoded terminators and control characters <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48986">#&#8203;48986</a> Authorization Services: NullPointerException in UMA permission grant when stale permission ticket references removed scope <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48987">#&#8203;48987</a> Account API: Resource sharing endpoints ignore userManagedAccessAllowed realm setting <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49086">#&#8203;49086</a> Account resource sharing resolves recipient by username before email, granting access to wrong user <code>authorization-services</code></li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/48311">#&#8203;48311</a> Upgrade to Quarkus 3.33.2 <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48695">#&#8203;48695</a> Add startup check for missing database indexes </li> <li><a href="https://github.com/keycloak/keycloak/issues/49148">#&#8203;49148</a> Add SPI option to disable FD_SOCK2 failure detection </li> <li><a href="https://github.com/keycloak/keycloak/issues/49526">#&#8203;49526</a> Update to simple-git 3.36.0 </li> <li><a href="https://github.com/keycloak/keycloak/issues/49530">#&#8203;49530</a> Update to uuid >=13.0.1 </li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/45957">#&#8203;45957</a> Handling of CORS requests in the Admin UI ineffective / open for CSRF <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47036">#&#8203;47036</a> Account ResourceService user endpoint returns excessive user data in UMA-enabled realms <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48324">#&#8203;48324</a> UMA IS_ADMIN filter breaks ticket finding <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48430">#&#8203;48430</a> Wildcard redirect URI matching does not enforce host boundary when * is placed directly after hostname <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48432">#&#8203;48432</a> ClientAdapter using wrong value for isFrontChannelLogout <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48438">#&#8203;48438</a> Keycloak 26.6.0/26.6.1 exits (code 1) ~100ms after async realm migration completes; migrations not persisted <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48455">#&#8203;48455</a> ContextNotActiveException during error handling <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48464">#&#8203;48464</a> Incomplete SCIM schema definition for objects <code>scim</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48529">#&#8203;48529</a> Broken downstream docs formatting on Kubernetes topic <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48584">#&#8203;48584</a> Updating Keycloak to 26.6.x fails on SQL Server with case sensitive collation <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48628">#&#8203;48628</a> Client registerNode and unregisterNode endpoints fail authenticating the client <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48681">#&#8203;48681</a> ExternalLinksTest: oasis-open.org/standard/saml/ returns 403 in CI causing flaky documentation check <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48716">#&#8203;48716</a> Missing index IDX_IDP_FOR_LOGIN and IDX_CLIENT_ATT_BY_NAME_VALUE for Microsoft SQL Server <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48744">#&#8203;48744</a> Input validation/ Unhandled NullPointerException on alg:none JWT in Bearer Authentication <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48792">#&#8203;48792</a> Virtual Thread checking is not working <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48806">#&#8203;48806</a> NPE when accessing Account UI and the ACCOUNT feature is disabled <code>account/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48877">#&#8203;48877</a> Keycloak 26.6.1 does not persist UPDATE_PASSWORD for LDAP/AD federated users after temporary password reset <code>ldap</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48904">#&#8203;48904</a> Consistent 500 on DELETE of realms via non-browser clients calling REST API <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49058">#&#8203;49058</a> Keycloak fails to run tests with embedded undertow <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49140">#&#8203;49140</a> Workflows documentation: offboarding example is incorrectly enclosing the list of revoked roles with double quotes <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49149">#&#8203;49149</a> Disable single thread sender in JGroups <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49151">#&#8203;49151</a> FIPS jobs fail in CI because java-25-openjdk-devel package is missing <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49163">#&#8203;49163</a> Enable JGroups message stats <code>infinispan</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49194">#&#8203;49194</a> Use Java 25 again for FIPS jobs <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49222">#&#8203;49222</a> Incorrect link to Themes documentation <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49224">#&#8203;49224</a> Broken links in UI Customization Guide <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49263">#&#8203;49263</a> Use the PostgreSQL driver privacy option `logServerErrorDetail` <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49265">#&#8203;49265</a> Since Hibernate 7, the workaround to not log-and-throw Hibernate errors does not longer work <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49274">#&#8203;49274</a> JavaScript CI hangs when installing playwright <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49288">#&#8203;49288</a> Link issue in the documentation for https://www.rfc-editor.org/rfc/rfc7662 <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49356">#&#8203;49356</a> SAML async processing leaves a dangling threadlocal transaction <code>dist/quarkus</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49611">#&#8203;49611</a> Realm extensions require Bearer or Drop authorisation <code>admin/api</code></li> </ul> </div> ### [`v26.6.2`](https://github.com/keycloak/keycloak/releases/tag/26.6.2) [Compare Source](https://github.com/keycloak/keycloak/compare/26.6.1...26.6.2) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47485">#&#8203;47485</a> CVE-2026-33871 HTTP/2 CONTINUATION Frame Flood Denial of Service </li> <li><a href="https://github.com/keycloak/keycloak/issues/47486">#&#8203;47486</a> CVE-2026-33870 RFC violation: HTTP Request Smuggling primitive via Chunked Extension Quoted-String Parsing </li> <li><a href="https://github.com/keycloak/keycloak/issues/47932">#&#8203;47932</a> [CVE-2026-4628] Improper Access Control on Keycloak Server through UMA resource management endpoints via PUT parameters <code>authorization-services</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48049">#&#8203;48049</a> [CVE-2026-37980] Stored XSS in select-organization.ftl - FreeMarker HTML-escape insufficient in inline JS handler <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48275">#&#8203;48275</a> CVE-2026-5588 Bouncy Castle Crypto Package For Java: Use of a Broken or Risky Cryptographic Algorithm vulnerability in bcpkix modules <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48388">#&#8203;48388</a> [CVE-2026-6856] Acceptable AAGUID policy bypass via packed self-attestation in WebAuthn registration <code>authentication/webauthn</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48570">#&#8203;48570</a> [CVE‐2026‐0636, CVE‐2026‐3505, CVE‐2026‐5598] Multiple bouncycastle CVEs <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/49108">#&#8203;49108</a> [CVE-2026-7307] Denial of service when sending a crafted request to the /saml endpoint </li> <li><a href="https://github.com/keycloak/keycloak/issues/49109">#&#8203;49109</a> [CVE-2026-7504] Security Vulnerability Report: Redirect URI Validation Bypass in Keycloak </li> <li><a href="https://github.com/keycloak/keycloak/issues/49110">#&#8203;49110</a> [CVE-2026-7571] Access token disclosure and implicit flow bypass via forged client data </li> <li><a href="https://github.com/keycloak/keycloak/issues/49111">#&#8203;49111</a> [CVE-2026-7507] Session fixation in OIDC login flow leading to account takeover </li> <li><a href="https://github.com/keycloak/keycloak/issues/49112">#&#8203;49112</a> [CVE-2026-37982] Execute-actions token replay allows unauthorized WebAuthn credential enrollment on victim account </li> <li><a href="https://github.com/keycloak/keycloak/issues/49113">#&#8203;49113</a> [CVE-2026-37979] OIDC Introspection endpoint does not enforce audience restriction, leaking claims from lightweight access tokens </li> <li><a href="https://github.com/keycloak/keycloak/issues/49114">#&#8203;49114</a> [CVE-2026-37978] Cross-role PII leakage via evaluate-scopes endpoints bypasses user view permission </li> <li><a href="https://github.com/keycloak/keycloak/issues/49115">#&#8203;49115</a> [CVE-2026-4630] Keycloak Authorization Services Protection API IDOR (Cross-Resource Server Access) </li> <li><a href="https://github.com/keycloak/keycloak/issues/49116">#&#8203;49116</a> [CVE-2026-37981] Broken Access Control in Account Resources User Lookup allows PII enumeration </li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47728">#&#8203;47728</a> Monitor backups for CNPG - describe how to monitor it in the CNPG for backups installation guide </li> <li><a href="https://github.com/keycloak/keycloak/issues/47734">#&#8203;47734</a> Add dedicated "Monitoring Standbys" section to the general installation documentation </li> <li><a href="https://github.com/keycloak/keycloak/issues/48329">#&#8203;48329</a> JDBC_PING in 26.6 should not fail with 26.7 schema changes </li> <li><a href="https://github.com/keycloak/keycloak/issues/48348">#&#8203;48348</a> Escape expressions in JS blocks in FTL pages </li> <li><a href="https://github.com/keycloak/keycloak/issues/48687">#&#8203;48687</a> Upgrade to Quarkus 3.33.1.1 </li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/38526">#&#8203;38526</a> Duplicate user attribute values cannot be removed <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/40602">#&#8203;40602</a> Account UI reports "Something went wrong" when opening an unknown path <code>account/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47882">#&#8203;47882</a> Broken link in deploy-cnpg <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47901">#&#8203;47901</a> Realm import with --import-realm fails with ModelValidationException when Admin Permissions is enabled <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47915">#&#8203;47915</a> FreeMarker templates allow instantiation of new objects and even running OS commands <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47987">#&#8203;47987</a> FGAP v2 Specific Group permission has no scopes found in resource <code>admin/fine-grained-permissions</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48030">#&#8203;48030</a> Update to operator version 26.6.0 needs deletion of all objects <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48040">#&#8203;48040</a> User session limit generates fatal error <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48094">#&#8203;48094</a> Wrong referenced resource type in Workflow handling for clients <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48123">#&#8203;48123</a> Clarify canonicalization in X.509 authentication <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48143">#&#8203;48143</a> Ordering of permission and policy calls leads to exposure of a client ID <code>admin/api</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48185">#&#8203;48185</a> Deleted workflow still attempting to run <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48241">#&#8203;48241</a> JavaScript Injection in frontchannel-logout.ftl via frontchannel-logout.title <code>authentication</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48259">#&#8203;48259</a> Kubernetes identity providers docs still mention it to be a preview feature <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48313">#&#8203;48313</a> No escape approach for JS code inside the front channel logout FTL <code>login/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48536">#&#8203;48536</a> Review migration guide for rolling updates changes <code>workflows</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48629">#&#8203;48629</a> WindowsServiceDistTest.testServiceLifecycle fails on slower runners due to insufficient startup timeout <code>ci</code></li> </ul> </div> ### [`v26.6.1`](https://github.com/keycloak/keycloak/releases/tag/26.6.1) [Compare Source](https://github.com/keycloak/keycloak/compare/26.6.0...26.6.1) <div> <h2>Upgrading</h2> <p>Before upgrading refer to <a href="https://www.keycloak.org/docs/latest/upgrading/#migration-changes">the migration guide</a> for a complete list of changes.</p> <h2>All resolved issues</h2> <h3>Security fixes</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47276">#&#8203;47276</a> CVE-2026-4366 Blind Server-Side Request Forgery (SSRF) via HTTP Redirect Handling <code>core</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47619">#&#8203;47619</a> CVE-2026-4633 Keycloak user enumeration via identity-first login <code>core</code></li> </ul> <h3>Enhancements</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47839">#&#8203;47839</a> Update CloudNativePG to 1.29 </li> <li><a href="https://github.com/keycloak/keycloak/issues/47909">#&#8203;47909</a> Database data at rest encryption </li> </ul> <h3>Bugs</h3> <ul> <li><a href="https://github.com/keycloak/keycloak/issues/47435">#&#8203;47435</a> AuroraDB IT CI workflow not cleaning up databases <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47737">#&#8203;47737</a> deploy-testsuite profile is incomplete, causing discrete testsuite execution to fail <code>testsuite</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47776">#&#8203;47776</a> False session type of access token in offline_access refresh token flow with scope parameter without offline_access scope <code>oidc</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47827">#&#8203;47827</a> az vm create fails with JSON parsing error <code>ci</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47872">#&#8203;47872</a> v26.6.0 Operator flood logs with warnings <code>operator</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47889">#&#8203;47889</a> Not possible to sync latest keycloak-admin-client to keycloak-client <code>admin/client-java</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47904">#&#8203;47904</a> @&#8203;keycloak/keycloak-admin-client fails to install in version 26.6.0 <code>admin/client-js</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47905">#&#8203;47905</a> invalid package reference in keycloak-admin-ui <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47908">#&#8203;47908</a> MigrateTo26_6_0 modifies custom browser flows, breaking existing realm authentication <code>organizations</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47929">#&#8203;47929</a> User profile multiselect options not highlighted as selected in dropdown <code>admin/ui</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/47955">#&#8203;47955</a> IdentityProviderAuthenticator creates an infinite redirect loop when an IdP returns an error (e.g. access_denied) and the login was initiated with kc_idp_hint <code>identity-brokering</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48015">#&#8203;48015</a> Missing explicit docs anchor for organizations <code>docs</code></li> <li><a href="https://github.com/keycloak/keycloak/issues/48032">#&#8203;48032</a> Endpoint Response Text during Bootstrap contains Typo: Boostrap <code>dist/quarkus</code></li> </ul> </div> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODUuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjE1NS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Update Keycloak packages to v26.6.1
All checks were successful
/ Verify (pull_request) Successful in 1m13s
/ Verify (push) Successful in 1m13s
0efe1e9228
renovate force-pushed renovate/keycloak-packages from 0efe1e9228
All checks were successful
/ Verify (pull_request) Successful in 1m13s
/ Verify (push) Successful in 1m13s
to dada6353a0
All checks were successful
/ Verify (pull_request) Successful in 54s
/ Verify (push) Successful in 54s
2026-05-19 14:46:56 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.6.1 to Update Keycloak packages 2026-05-19 14:46:56 +02:00
renovate changed title from Update Keycloak packages to Update Keycloak packages to v26.6.2 2026-05-19 15:02:06 +02:00
renovate force-pushed renovate/keycloak-packages from dada6353a0
All checks were successful
/ Verify (pull_request) Successful in 54s
/ Verify (push) Successful in 54s
to 3420dbce3b
All checks were successful
/ Verify (push) Successful in 53s
/ Verify (pull_request) Successful in 53s
2026-05-19 15:02:06 +02:00
Compare
renovate force-pushed renovate/keycloak-packages from 3420dbce3b
All checks were successful
/ Verify (push) Successful in 53s
/ Verify (pull_request) Successful in 53s
to 5624d45198
All checks were successful
/ Verify (push) Successful in 53s
/ Verify (pull_request) Successful in 1m9s
2026-06-04 19:02:21 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.6.2 to Update Keycloak packages 2026-06-04 19:02:23 +02:00
renovate force-pushed renovate/keycloak-packages from 5624d45198
All checks were successful
/ Verify (push) Successful in 53s
/ Verify (pull_request) Successful in 1m9s
to edcdb200e6
All checks were successful
/ Verify (pull_request) Successful in 46s
/ Verify (push) Successful in 46s
2026-06-04 19:47:07 +02:00
Compare
renovate changed title from Update Keycloak packages to Update Keycloak packages to v26.6.3 2026-06-04 19:47:09 +02:00
renovate force-pushed renovate/keycloak-packages from edcdb200e6
All checks were successful
/ Verify (pull_request) Successful in 46s
/ Verify (push) Successful in 46s
to 372a08713a
All checks were successful
/ Verify (pull_request) Successful in 1m13s
/ Verify (push) Successful in 1m13s
2026-06-26 12:46:41 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.6.3 to Update Keycloak packages 2026-06-26 12:46:41 +02:00
renovate force-pushed renovate/keycloak-packages from 372a08713a
All checks were successful
/ Verify (pull_request) Successful in 1m13s
/ Verify (push) Successful in 1m13s
to b907bb5ae8
All checks were successful
/ Verify (push) Successful in 52s
/ Verify (pull_request) Successful in 51s
2026-06-26 21:47:15 +02:00
Compare
renovate changed title from Update Keycloak packages to Update Keycloak packages to v26.6.4 2026-06-26 21:47:17 +02:00
renovate force-pushed renovate/keycloak-packages from b907bb5ae8
All checks were successful
/ Verify (push) Successful in 52s
/ Verify (pull_request) Successful in 51s
to e8dce3f49d
All checks were successful
/ Verify (push) Successful in 1m14s
/ Verify (pull_request) Successful in 1m14s
2026-07-09 09:01:50 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.6.4 to Update Keycloak packages 2026-07-09 09:01:51 +02:00
renovate changed title from Update Keycloak packages to Update Keycloak packages to v26.7.0 2026-07-09 09:46:43 +02:00
renovate force-pushed renovate/keycloak-packages from e8dce3f49d
All checks were successful
/ Verify (push) Successful in 1m14s
/ Verify (pull_request) Successful in 1m14s
to f2bc46abf3
All checks were successful
/ Verify (push) Successful in 47s
/ Verify (pull_request) Successful in 48s
2026-07-09 09:46:44 +02:00
Compare
renovate force-pushed renovate/keycloak-packages from f2bc46abf3
All checks were successful
/ Verify (push) Successful in 47s
/ Verify (pull_request) Successful in 48s
to 1ea041dc7c
All checks were successful
/ Verify (pull_request) Successful in 57s
/ Verify (push) Successful in 57s
2026-07-18 14:16:59 +02:00
Compare
renovate force-pushed renovate/keycloak-packages from 1ea041dc7c
All checks were successful
/ Verify (pull_request) Successful in 57s
/ Verify (push) Successful in 57s
to 55794f5801
All checks were successful
/ Verify (pull_request) Successful in 1m8s
2026-08-05 18:02:09 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.7.0 to Update Keycloak packages to v26.7.1 2026-08-05 18:02:09 +02:00
renovate changed title from Update Keycloak packages to v26.7.1 to Update Keycloak packages to v26.7.2 2026-08-19 07:47:04 +02:00
renovate force-pushed renovate/keycloak-packages from 55794f5801
All checks were successful
/ Verify (pull_request) Successful in 1m8s
to f56bfbb03f
All checks were successful
/ Verify (pull_request) Successful in 1m13s
2026-08-19 07:47:04 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.7.2 to Update Keycloak packages to v26.7.3 2026-08-31 11:47:03 +02:00
renovate force-pushed renovate/keycloak-packages from f56bfbb03f
All checks were successful
/ Verify (pull_request) Successful in 1m13s
to ebc6c137b4
All checks were successful
/ Verify (pull_request) Successful in 1m11s
2026-08-31 11:47:04 +02:00
Compare
renovate force-pushed renovate/keycloak-packages from ebc6c137b4
All checks were successful
/ Verify (pull_request) Successful in 1m11s
to b50ec6da61
All checks were successful
/ Verify (pull_request) Successful in 57s
2026-09-16 17:02:43 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.7.3 to Update Keycloak packages to v26.7.4 2026-09-16 17:02:44 +02:00
renovate force-pushed renovate/keycloak-packages from b50ec6da61
All checks were successful
/ Verify (pull_request) Successful in 57s
to c45ff84f8b
All checks were successful
/ Verify (pull_request) Successful in 1m12s
2026-10-01 04:20:22 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.7.4 to Update Keycloak packages to v26.7.5 2026-10-01 04:20:30 +02:00
renovate force-pushed renovate/keycloak-packages from c45ff84f8b
All checks were successful
/ Verify (pull_request) Successful in 1m12s
to c74594ed24
All checks were successful
/ Verify (pull_request) Successful in 52s
2026-10-01 10:19:31 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.7.5 to Update Keycloak packages to v26.8.0 2026-10-01 10:19:34 +02:00
renovate force-pushed renovate/keycloak-packages from c74594ed24
All checks were successful
/ Verify (pull_request) Successful in 52s
to df370ad252
All checks were successful
/ Verify (pull_request) Successful in 1m9s
2026-10-13 16:18:35 +02:00
Compare
renovate changed title from Update Keycloak packages to v26.8.0 to Update Keycloak packages to v26.8.1 2026-10-13 16:18:38 +02:00
All checks were successful
/ Verify (pull_request) Successful in 1m9s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/keycloak-packages:renovate/keycloak-packages
git switch renovate/keycloak-packages

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff renovate/keycloak-packages
git switch renovate/keycloak-packages
git rebase main
git switch main
git merge --ff-only renovate/keycloak-packages
git switch renovate/keycloak-packages
git rebase main
git switch main
git merge --no-ff renovate/keycloak-packages
git switch main
git merge --squash renovate/keycloak-packages
git switch main
git merge --ff-only renovate/keycloak-packages
git switch main
git merge renovate/keycloak-packages
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
CCCHH/keycloak-attribute-endpoints-provider!18
No description provided.