Release Notes


Red Hat build of Keycloak 26.4

Red Hat Customer Content Services

Abstract

This guide consists of release notes for Red Hat build of Keycloak.

Chapter 1. Overview

Red Hat build of Keycloak is based on the Keycloak project, which enables you to secure your web applications by providing Web SSO capabilities based on popular standards such as OpenID Connect, OAuth 2.0, and SAML 2.0. The Red Hat build of Keycloak server acts as an OpenIDConnect or SAML-based identity provider (IdP), allowing your enterprise user directory or third-party IdP to secure your applications by using standards-based security tokens.

Chapter 2. New features and enhancements

The following release notes apply to version 26.4.2 of Red Hat build of Keycloak. This release features new capabilities focused on security enhancements, deeper integration, and improved server administration. The highlights of this release are:

  • Passkeys for seamless, passwordless authentication of users.
  • Simplified experiences for application developers with streamlined WebAuthn/Passkey registration and simplified account linking to identity providers via application initiated actions.
  • Federated Client Authentication to use SPIFFE or Kubernetes service account tokens for client authentication.
  • Simplified deployments across multiple availability zones to boost availability.
  • FAPI 2 Final: the final specifications of FAPI 2.0 Security Profile and FAPI 2.0 Message Signing.
  • DPoP: The OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP) is now fully supported. Improvements include the ability to bind only refresh tokens for public clients, and securing all Keycloak endpoints with DPoP tokens.
  • Account recovery with 2FA recovery codes, protecting users from lockout. Broader connectivity with the ability to broker with any OAuth 2.0 compliant authorization server, and enhanced trusted email verification for OpenID Connect providers.
  • Asynchronous logging for higher throughput and lower latency, ensuring more efficient deployments.

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.

2.1. Security and Standards

2.1.1. Passkeys integration is now supported

Passkeys are now seamlessly integrated in the Red Hat build of Keycloak login forms using both conditional and modal UIs. To activate the integration in the realm, go to Authentication, Policies, Webauthn Passwordless Policy and switch Enable Passkeys to enabled.

For more information, see Passkeys.

2.1.2. FAPI 2 Final is now supported

Red Hat build of Keycloak has support for the latest versions of FAPI 2 specifications. Specifications FAPI 2.0 Security Profile and FAPI 2.0 Message Signing are already promoted to Final and Red Hat build of Keycloak supports them. Red Hat build of Keycloak client policies support the final versions and corresponding client profiles for FAPI 2 are passing the FAPI conformance test suite.

Apart from some very minor polishing of existing policies, Red Hat build of Keycloak has new client profiles (fapi-2-dpop-security-profile and fapi-2-dpop-message-signing) for the clients that use DPoP and are intended to be FAPI 2 compliant.

For more details, see FAPI Support.

2.1.3. DPoP is now supported

Red Hat build of Keycloak has support for OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP), which was previously a preview feature. Also, the supported version includes some improvements and minor capabilities of the DPoP feature such as the following:

  • Possibility to make only refresh tokens of a public client to be DPoP bound and omit the binding of an access token.
  • All Red Hat build of Keycloak endpoints that are secured by bearer token can now handle DPoP tokens. This includes, for example, the Admin REST API and Account REST API.
  • Possibility to require the dpop_jkt parameter in the OIDC authentication request.

For more information, see the DPoP section in the documentation.

2.1.4. FIPS 140-2 mode now supports EdDSA

With the upgrade to Bouncy Castle 2.1.x, the algorithm EdDSA can now be used.

2.2. Integration

The SAML clients can now be configured to automatically download the signing and encrypting certificates from the SP entity metadata descriptor endpoint. In order to use this new feature, in the client Settings tab, section Signature and Encryption, configure the Metadata descriptor URL option (the URL where the SP metadata information with the certificates is published) and activate Use metadata descriptor URL. The certificates will be automatically downloaded and cached in the public-key-storage SPI from that URL. This also allows for seamless rotation of certificates.

For more information, see Creating a SAML client.

2.2.2. Serving as an authorization server in MCP

MCP (Model Context Protocol) is an open-source standard for connecting AI applications to external systems. Using MCP, AI applications can connect to data sources, tools and workflows enabling them to access key information and perform tasks.

To comply with MCP specification, this version provides its OAuth 2.0 Server Metadata via a well-known URI whose format complies with RFC 8414 OAuth 2.0 Authorization Server Metadata specification. Therefore, Keycloak users can now use Keycloak as an authorization server for MCP.

The latest MCP specification 2025-06-18 additionally requires support for resource indicators which are currently not implemented in Red Hat build of Keycloak.

Client-initiated linking a user account to the identity provider is now based on application-initiated action (AIA) implementation. This functionality aligns configuring this functionality, simplifies the error handling in calling the client application, which makes it more useful for a broader audience.

The custom protocol, which was previously used for client-initiated account linking, is now deprecated.

In previous releases, Red Hat build of Keycloak already supported federation with other OpenID Connect and SAML providers, as well as with several Social Providers like GitHub and Google, which are based on OAuth 2.0.

The new OAuth 2.0 broker now closes the gap to federate with any OAuth 2.0 provider. As a result of this change, you can federate with Amazon or other providers. As this is a generic provider, you need to specify the different claims and a user info endpoint in the provider’s configuration.

For more information, see OAuth v2 identity providers.

Until now, the OpenID Connect broker did not support the standard email_verified claim available from the ID Tokens issued by OpenID Connect Providers.

Starting with this release, Red Hat build of Keycloak supports this standard claim as defined by the OpenID Connect Core Specification for federation.

Whenever users are federated for the first time or when they re-authenticate and the Trust email setting is enabled, Sync Mode is set to FORCE and the provider sends the email_verified claim, the user account will have their email marked according to the email_verified claim. If the provider does not send the claim, it defaults to the original behavior and sets the email as verified.

2.3. Administration

2.3.1. Update Email Workflow is now supported

Users can now update their email addresses in a more secure and consistent flow. Accounts are forced to both re-authenticate and verify their emails before any account updates.

For more information, see Update Email Workflow.

2.3.2. Optional email domain for organizations

In earlier versions, each organization required at least one email domain, which was a limitation for some scenarios. Starting with this release, an email domain is optional.

When no domain is specified, organization members will not be validated against domain restrictions during authentication and profile validation.

You can now control which identity providers appear in the Account Console based on different options using the Show in Account console setting. You can choose to show only those linked with a user or hide them completely.

For more information, see General configuration.

If you have enabled OTPs and recovery codes as a second factor for authentication, you can configure the OTP required action to ask users to set up recovery codes once they set up an OTP.

2.3.5. New conditional authenticator

The Conditional - credential is a new authenticator that checks if a specific credential type has been used (or not used) during the authentication process. This condition is related to the Passkeys feature. It is added by Red Hat build of Keycloak to the default browser flow to skip 2FA in case a passkey was used to log in as the primary credential.

For more information about conditional flows, see Conditions in conditional flows.

Users can get locked out of their accounts when they lose their 2FA credentials. For example, a user may have smart phone with a one-time-password (OTP) generator as a second factor for authentication. That user might lose his phone and be locked out.

To work around this issue, users can print a set of recovery codes as an additional second factor. The recovery codes become an alternative 2FA in the login flow. As a result, the user can gain access without using the OTP generated passwords.

With this release, the recovery codes feature is promoted from preview to a supported feature. For newly created realms, the browser flow now includes the Recovery Authentication Code Form as Disabled, and it can be switched to Alternative by admins if they want to use this feature.

For more information about this 2FA method, see Recovery Codes.

Both WebAuthn Register actions (webauthn-register and webauthn-register-passwordless), which are also used for Passkeys, now support a skip_if_exists parameter when initiated by the application (AIA).

This change should make it more convenient to use the AIA in scenarios where a user has already set up WebAuthn or Passkeys. The parameter allows skipping the action if the user already has a credential of that type.

For more information, see Registering WebAuthn credentials using AIA.

2.4. Configuring and Running

This release renamed multi-site to multi-cluster. The updated documentation describes how Red Hat build of Keycloak clusters can be optionally distributed across multiple availability-zones within a region for increased availability. The Red Hat build of Keycloak Operator now deploys Red Hat build of Keycloak across multiple availability zones within a Kubernetes cluster by default. Red Hat build of Keycloak also detects split-brains within a cluster.

This change should provide better availability for users who are running Red Hat build of Keycloak in Kubernetes clusters that span multiple availability zones.

With this release, we added support for the following new database vendors:

  • EnterpriseDB (EDB) Advanced 17.6
  • Azure SQL Database and Azure SQL Managed Instance

Where the previous documentation stated only tested database version, it now states all the supported database versions as well.

2.4.3. Expose management interface by HTTP

Previous versions exposed the management endpoint only by HTTPS when the main interface was using HTTPS.

Set the new option http-management-scheme to http to have the management interface use HTTP rather than inheriting the HTTPS settings of the main interface. This change allows monitoring those endpoints in environments where no TLS client is available.

With health-enabled set to true, you may set the http-management-health-enabled to false to indicate that health endpoints should be exposed on the main HTTP(s) port instead of the management port. When this option is false you should block unwanted external traffic to /health at your proxy.

This allows using the health endpoints in environments where the load balancer might need access to those ports to direct traffic to the correct nodes.

To support basic TLS termination (edge) deployments by the operator, you may now set the Keycloak CR spec.ingress.tlsSecret field to a TLS Secret name in the namespace.

2.4.6. Additional datasources configuration

Some Red Hat build of Keycloak use cases like User Federation might require connecting to additional databases. This was possible only through specifying unsupported raw Quarkus properties in previous Red Hat build of Keycloak versions. In this release, there are now dedicated server options for additional datasources. This allows users to leverage additional databases in their extensions in a supported and user-friendly way.

For more details, see Configure multiple datasources.

All available log handlers now support asynchronous logging capabilities. Asynchronous logging helps deployments that require high throughput and low latency.

For more details on this feature, see Asynchronous logging.

Red Hat build of Keycloak supports HTTP access logging to record details of incoming HTTP requests. While access logs are often used for debugging and traffic analysis, they are also important for security auditing and compliance monitoring.

For more details, see HTTP Access Logging.

The time it takes to run imports, exports or migrations involving a large number of realms has been improved. A cumulative performance degradation for each additional realm processed is no longer an issue.

2.5. Observability

The Operator now includes a ServiceMonitor for the management endpoint if metrics are enabled and the monitoring.coreos.com/v1:ServiceMonitor Custom Resource Definition is present on the Kubernetes cluster. The specification of the ServiceMonitor takes into account the various management endpoint configurations, to ensure that metrics can be scraped without any additional configuration. If you do not want a ServiceMonitor to be created, you can disable this by setting spec.serviceMonitor.enabled: false. For more details, see the Operator Guide. == HTTP access logging of incoming HTTP requests

Red Hat build of Keycloak supports HTTP access logging to record details of incoming HTTP requests. While access logs are often used for debugging and traffic analysis, they are also important for security auditing and compliance monitoring.

For more information, see Configuring logging.

Chapter 3. Technology preview features

The following new features are in a Technology Preview status:

Identity providers are now able to federate client authentication. This allows clients to authenticate with SPIFFE JWT SVIDs, Kubernetes service accounts, or tokens issued by a OpenID Connect identity provider.

In the previous release, the Keycloak Operator was enhanced to support performing rolling updates of the Keycloak image if both images contain the same version. This is useful, for example, when switching to an optimized image, changing a theme or a provider source code.

In this release, we extended this capability to perform a rolling update when the new image contains a future patch release from the same major.minor release stream as a preview feature. This can reduce the service’s downtime even further, as downtime is only needed when upgrading from a different minor or major version.

For more details, see Rolling updates.

3.3. Showing context information in log messages

You can now add context information via the mapped diagnostic context (MDC) to each log message like the realm or the client that initiated the request. This helps you to track down a warning or error message in the log to a specific caller or environment

For more details on this feature, see Adding context for log messages.

3.4. Existing technology preview features

Also, the following existing features remain in a technology preview status:

  • Client Secret Rotation
  • JavaScript support to write custom authenticators

Chapter 4. Adapter support

At this version of Red Hat build of Keycloak, the following adapters are supported:

  • JavaScript adapter: 26.2.1
  • Node.js adapter: 26.1.1
  • JBoss EAP OpenID Connect adapter: 8.0
  • Keycloak SAML Adapter RPM for JBoss EAP: 8.0

Chapter 5. Deprecated features

The following sections provide details on deprecated features.

SPI options ending in -enabled, -provider-default, or -provider are treated as build-time options. However, in some instances, this was not correct as a provider could have a configuration property ending in one of those suffixes as well.

To resolve this ambiguity, and any potential ambiguity involving SPI and provider names, a new SPI option format was introduced where the scopes and suffix are separated by --(double dash) instead of -(dash). The new format then reads as spi-<spi-name>--<provider-name>--....

An SPI property ending in -enabled, -provider-default, or -provider should use the new format or else a warning will be emitted. For example spi-<spi-name>--<provider-name>--enabled will be recognized as a build-time option without a warning.

For instance, the correct way to reference your custom email template is: --spi-email-template--mycustomprovider--enabled (not --spi-email-template-mycustomprovider-enabled).

Options using the legacy format and ending in -enabled, -provider-default, or -provider will still be treated as a build-time option, but may not be in future releases.

5.2. Kubernetes cache stack

The kubernetes cache stack has been deprecated and will be removed in a future release. Users should transition to the jdbc-ping stack.

Consequently, the Keycloak Operator now uses the jdbc-ping cache stack by default.

5.3. method RequiredActionProvider.getMaxAuthAge()

The method RequiredActionProvider.getMaxAuthAge() is deprecated. It is effectively not used now. Please use the method RequiredActionProvider.getMaxAuthAge(KeycloakSession session) instead. This is due to enable individual configuration for required actions.

5.4. spi-connections-infinispan-quarkus-site-name

The option spi-connections-infinispan-quarkus-site-name is deprecated and no longer used for multi-site setups, and it will be removed in the future. Use spi-cache-embedded-default-site-name instead in setups when running with embedded distributed caches. See All provider configuration for more details on these options.

When you want the user, who is authenticated to your client application, to link his or her account to a specific identity provider, consider using the Application initiated action (AIA) based mechanism with the action idp_link. The proprietary custom protocol for client initiated account linking is deprecated now and might be removed in the future versions. For more information, see the Client initiated account link section of the Server Developer Guide.

5.6. Instagram Identity Broker

In this release, the Instagram Identity Broker is deprecated for removal and is not enabled by default. If you are using this broker, it is recommended to use the Facebook Identity Broker instead.

If you are using the Instagram Identity Broker and want to re-enable it, you can do it by enabling the instagram-broker feature using the features server option:

--features=instagram-broker
Copy to Clipboard Toggle word wrap

5.7. Local admin

UrlType.LOCAL_ADMIN and the corresponding welcome theme variable localAdminUrl have been deprecated for eventual removal. The default welcome resource will now simply mention localhost rather than providing a URL when an admin user has yet to be created.

In relation to supported Recovery codes, we deprecated the password policy Recovery Codes Warning Threshold. This password policy might be removed in the future major version of Red Hat build of Keycloak. This password policy was not related to passwords at all, but was related to recovery codes, and hence using password policy is an inappropriate way to configure this threshold. It is better to use the Warning Threshold configuration option of the Recovery Authentication Codes required action. For more details, see Recovery Codes.

5.9. Scope.getPropertyNames

The org.keycloak.Config.Scope.getPropertyNames method has been deprecated for removal.

The displayTest field in the ConsentScopeRepresentation class returned by the Account REST service has been deprecated due to a typo in its name. A new field displayText with the correct spelling has been added to replace it. The old field will be removed in Red Hat build of Keycloak 27.0. The Typescript code ConsentScopeRepresentation for the Account Console already contains only the new field.

5.11. Lifetime of offline session caches

The options --spi-user-sessions--infinispan--offline-session-cache-entry-lifespan-override and --spi-user-sessions--infinispan--offline-client-session-cache-entry-lifespan-override are now deprecated for removal.

Instead use the options cache-embedded-offline-sessions-max-count and cache-embedded-offline-client-sessions-max-count to limit the memory usage if the default of 10000 cache offline user and client sessions does not work in your scenario.

5.12. Passkeys Conditional UI Authenticator

The authenticator Passkeys Conditional UI Authenticator is deprecated and disabled by default. It now requires the feature passkeys_conditional_ui_authenticator to be explicitly enabled during server startup. This allows administrators to start the server and re-configure authentication flows for passkeys authentication in a recommended way as described in the Passkeys chapter in the Server Administration Guide. A future major version will remove the feature and the Passkeys Conditional UI Authenticator.

All Red Hat build of Keycloak default cache configurations have been removed from conf/cache-ispn.xml. Configuration of the default cache configurations in conf/cache-ispn.xml, or in a custom file via --cache-config-file, without specifying --cache-config-mutate=true is now deprecated and will log a warning.

In a future major release, the start-up will fail if default cache configurations are stated in those files and the option is not specified.

5.14. Simplified API for UserSessionProvider

In order to retrieve a client session via UserSessionProvider#getClientSession, you no longer need to pass in the client session ID. The old methods have been deprecated and will be removed in a future release. You should also review the other methods that are deprecated for removal in this class.

The clientId note in the authenticated client session is an internal note present only when using the embedded caches, and is now deprecated for removal. Instead, use the getClient() method.

In a scenario where Red Hat build of Keycloak acts as a broker and connects by OpenID Connect to another identity provider, you can choose to send the client secret as Client secret sent as HTTP Basic authentication without URL encoding (client_secret_basic_unencoded). While this violates RFC6749, it can be used to keep the default behavior of earlier versions of Red Hat build of Keycloak.

Chapter 6. Removed features

The following features have been removed from this release.

6.1. jboss.site.name and jboss.node.name

Both system properties have been used internally within Keycloak and have not been part of the official documentation. Red Hat build of Keycloak will fail to start if those are present.

Instead, use the command line option spi-cache-embedded-default-site-name as jboss.site.name replacement, and spi-cache-embedded-default-node-name as jboss.node.name replacement. See All provider configuration for more details on these options.

6.2. KeycloakSessionTask.useExistingSession method

KeycloakSessionTask.useExistingSession was only useful to private server logic. Now that this logic has been refined, no need exists for this method.

In previous releases, there was a default implementation in the interface returning false and it is unlikely that it was overwritten in implementations.

Chapter 7. Fixed issues

This release includes the following fixed issues.

Chapter 8. Supported configurations

For the supported configurations for Red Hat build of Keycloak 26.4, see Supported configurations.

Chapter 9. Component details

For the list of supported component versions for Red Hat build of Keycloak 26.4, see Component details.

Legal Notice

Copyright © 2025 Red Hat, Inc.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Back to top
Red Hat logoGithubredditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust. Explore our recent updates.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Theme

© 2025 Red Hat