Upgrading Guide


Red Hat build of Keycloak 26.2

Red Hat Customer Content Services

Abstract

This book is a guide to upgrading Red Hat build of Keycloak from 26.0.x to 26.2.9.

Chapter 1. Upgrading Red Hat build of Keycloak

This guide describes how to upgrade Red Hat build of Keycloak from version 26.0.x to version 26.2.9. Use the following procedures in this order:

  1. Review the release-specific changes from the previous version of Red Hat build of Keycloak.
  2. Upgrade the Red Hat build of Keycloak server.
  3. Upgrade the Red Hat build of Keycloak adapters.
  4. Upgrade the Red Hat build of Keycloak Admin Client.

If you want to upgrade from an earlier version of Red Hat build of Keycloak, such as version 22.x or 24.x, review all the changes in each upgrading guide published between your version and 26.2. See these upgrading guides:

Then, you can perform the upgrade procedures described in this guide.

For Red Hat Single Sign-On 7.6 customers, use the Migration Guide instead of this guide.

Chapter 2. Release-specific changes

2.1. Notable changes at version 26.2.8

Notable changes where an internal behavior changed to prevent common misconfigurations, fix bugs or simplify running Red Hat build of Keycloak.

2.1.1. UTF-8 management in the email sender

Since this release, Red Hat build of Keycloak adds a new option allowutf8 for the realm SMTP configuration (Allow UTF-8 field inside the Email tab in the Realm settings section of the Admin Console). For more information about email configuration, see the Configuring email for a realm chapter in the Server Administration Guide.

Enabling the option encodes email addresses in UTF-8 when sending them, but it depends on the SMTP server to also supports UTF-8 via the SMTPUTF8 extension. If Allow UTF-8 is disabled, Red Hat build of Keycloak will encode the domain part of the email address (second part after @) using punycode if non-ASCII characters are used, and will reject email addresses that use non-ASCII characters in the local part.

If you have an SMTP server configured for your realm, perform the following migration after the upgrade:

  • If your SMTP server supports SMTPUTF8:

    1. Enable the Allow UTF-8 option.
  • If your SMTP server does not support SMTPUTF8:

    1. Keep the Allow UTF-8 option disabled.
    2. Verify that no email addresses of users have non-ASCII characters in the local part of the email address.
    3. Update the validation of email addresses to prevent allow non-ASCII characters in the local part of the email address, for example, by adding a regex pattern validation in the user profile for the email address field similar to \p{ASCII}*@.* with an error message similar to Local part of the address must contain only ASCII characters.

2.2. Notable changes at version 26.2.6

Notable changes concern an internal behavior that is changed to prevent common misconfigurations, bug fixes, or a simplification to running Red Hat build of Keycloak.

If you are upgrading Red Hat build of Keycloak by downloading the distribution, the upgrade procedure has been changed. Previously, that procedure recommended copying over the contents of the conf/ folder from the old to the new installation. The new procedure recommends that you re-apply any changes to cache-ispn.xml or a custom cache configuration based on the file included in the new version.

This step prevents you from accidentally downgrading functionality, for example, by using an old cache-ispn.xml file from a previous version.

2.2.2. Problematic cache configurations ignored

Previous versions of Red Hat build of Keycloak warned about problematic configurations, for example, if a wrong number of owners was configured or a cache size was set when it should not have been set when enabling volatile user sessions. The docs also stated to update the cache-ispn.xml configuration file for volatile user sessions.

The current version will always use safe settings for the number of owners and maximum cache size for the affected user and client session caches, and will log only an INFO message. With this behavior, there is no need any more to update the cache-ispn.xml configuration file. If you previously used a custom cache-ispn.xml in order to use volatile user sessions, we recommend reverting those changes and use the standard configuration file.

The execution Verify Existing Account By Email is one of the alternatives that the First Login Flow has to allow a brokering account to be linked to an existing Red Hat build of Keycloak user. This step is executed when the user logs in into Red Hat build of Keycloak through the broker for the first time, and the identity provider account is already present in Red Hat build of Keycloak. The execution sends an email to the current Red Hat build of Keycloak address in order to confirm the user controls that account.

Since this release, the Verify Existing Account By Email execution is only attempted in the First Login Flow if the linking attributes (email and username) sent by the external identity provider are not modified by the user during the review process. This new behavior avoids sending verification emails to an existing Red Hat build of Keycloak account that can inadvertently accept the linking.

In case the provider needs to modify the information sent by the identity provider (because emails or usernames are different in the broker), only the other alternative Verify Existing Account By Re-authentication is available to link the new account to the existing Red Hat build of Keycloak user.

If the data received from the identity provider is mandatory and cannot be modified, then the Review Profile step in the First Login Flow can be disabled to avoid any user intervention.

For more information, see the First login flow section of the Server Administration Guide.

The user-profile-commons.ftl changed to improve support for localization. As a result of this change, pages might start displaying a locale field if you extend this template. To avoid that situation, update the theme template with the changes aforementioned.

2.3. Breaking changes at version 26.2.x

At version 26.2.x, some breaking changes exist. Breaking changes are identified as requiring changes from existing users to their configurations.

The X-Forwarded-Host header can optionally also contain the port. In previous versions when the port was omitted from the header, Red Hat build of Keycloak fell back to the actual request port. For example if Red Hat build of Keycloak was listening on port 8080 and the request contained X-Forwarded-Host: example.com header, the resolved URL was http://example.com:8080.

This is now changed and omitting the port results in removing it from the resolved URL. The resolved URL from the previous example would now be http://example.com.

To mitigate that, either make your reverse proxy include the port in the X-Forwarded-Host header or configure it to set the X-Forwarded-Port header with the desired port.

2.3.2. Changes to installing Oracle JDBC driver

The required JAR for the Oracle JDBC driver that needs to be explicitly added to the distribution has changed. Instead of providing ojdbc11 JAR, use ojdbc17 JAR as stated in Installing the Oracle Database driver.

2.3.3. H2 Credentials

With this version, the default H2 based dev-file database changed its credentials. While migrating from an instance using this dev only database is not supported, you may be able to continue to use your existing H2 database if you explicitly provide the old defaults for the database username and password. For example in the keycloak.conf specify:

db-username=sa

db-password=password

The latest draft version of the OpenID Connect core specification changed the rules for audience validation in JWT client assertions for the Client Authentication methods private_key_jwt and client_secret_jwt.

Previously, the aud claim of a JWT client assertion was loosely defined as The Audience SHOULD be the URL of the Authorization Server’s Token Endpoint, which did not exclude the usage of other URLs.

The revised OIDC Core specification uses a stricter audience check: The Audience value MUST be the OP’s Issuer Identifier passed as a string, and not a single-element array..

We adapted the JWT client authentication authenticators of both private_key_jwt and client_secret_jwt to allow only a single audience in the token by default. For now, the audience can be the issuer, token endpoint, introspection endpoint or some other OAuth/OIDC endpoint, which is used by client JWT authentication. However since there is single audience allowed now, it means that it is not possible to use other unrelated audience values, which is to make sure that JWT token is really only useful by the Red Hat build of Keycloak for client authentication.

This strict audience check can be reverted to the previous more lenient check with a new option of OIDC login protocol SPI. It will be still allowed to use multiple audiences in JWT if server is started with the option:

--spi-login-protocol-openid-connect-allow-multiple-audiences-for-jwt-client-authentication=true

Note that this option might be removed in the future. Possibly in Red Hat build of Keycloak 27. So it is highly recommended to update your clients to use a single audience instead of using this option. It is also recommended that your clients use the issuer URL for the audience when sending JWT for client authentication as that is going to be compatible with the future version of OIDC specification.

2.3.5. Changes involving newly supported features

At version 26.2.x, the following changes are major improvements that provide new support for existing features.

2.3.6. Standard token exchange

In this release, Red Hat build of Keycloak added support for the Standard token exchange (Feature token-exchange-standard:v2). In the past Red Hat build of Keycloak releases, Red Hat build of Keycloak had only a preview token exchange feature, which is now referred to as Legacy token exchange (Feature token-exchange:v1). The legacy token exchange is still in preview and it works the same way as in previous releases. If you used the internal-internal token exchange,consider migrating to the new standard token exchange.

If you prefer to continue using the legacy token exchange, no need exists to disable the standard token exchange feature. Your clients will use the standard token exchange only if it is enabled on the Red Hat build of Keycloak client. However, migration to the standard token exchange is recommended. It is the officially supported method and the priority for enhancements.

Consider the following notes as you plan for migration to the new standard token exchange:

  • The feature token-exchange-standard, which represents the new Standard token exchange, is enabled by default. It is recommended to disable the token-exchange feature, which represents the Legacy token exchange, to make sure that requests will be served by the new standard token exchange.
  • You can have both the standard and legacy token exchange features enabled, which can be useful if you need to cover standard use cases (internal-internal) together with the other token exchange use cases that are implemented only by legacy token exchange. For instance, external to internal token exchange is implemented only by the legacy token exchange. In this case, Red Hat build of Keycloak serves the standard internal-to-internal requests preferably by the standard token exchange while the other requests are served by the legacy token exchange. The choice of standard or legacy token exchange is determined based on the parameters of the particular request. For example, requests containing non-standard parameters such as requested_issuer or requested_subject are considered legacy.

    If you still need the legacy token exchange feature, you also need Fine-grained admin permissions version 1 enabled (FGAP:v1) because version 2 (FGAP:v2) does not have support for token exchange permissions. This is on purpose because token-exchange is conceptually not really an "admin" permission and therefore token exchange permissions were not added to FGAP:v2.

  • Standard token exchange requires enabling a switch on the client. See How to enable token exchange.

Consider these additional changes in the behavior of the two types of token exchange:

  • Fine-grained admin permissions are no longer needed or supported for the standard token exchange.
  • The most notable change regarding the behavior of scopes and audiences is that the applied client scopes are based on the client triggering the token exchange request rather than the "target" client specified by the audience parameter. Support exists for multiple values of the audience parameter as mentioned in the specification. See How to enable token exchange.
  • Public clients are no longer allowed to send the token exchange requests. Legacy token exchange allowed public clients to exchange tokens with themselves to downscope the original token. This use case can instead be covered by using the refresh token grant, in which the scope parameter can be used to downscope the refreshed access token, as mentioned in the OAuth2 specification.
  • Exchanging an access token for a SAML assertion is not supported in this release. In other words, using requested_token_type=urn:ietf:params:oauth:token-type:saml2 is not supported.
  • Exchanging an access token for a refresh token is allowed only if it is explicitly enabled on the client as mentioned in How to enable token exchange.

Currently, it is not supported to request offline tokens or exchange a refresh token when the subject token was issued from an offline session. The recommended approach is to exchange for access tokens instead of a refresh token when possible.

2.3.7. Fine-grained admin permissions

Red Hat build of Keycloak introduces fine-grained admin permissions V2, offering an improved and more flexible authorization model for administrative permissions.

  • FGAP:V2 feature is enabled by default.
  • FGAP:V1 feature remains in preview and can be enabled using --features=admin-fine-grained-authz:v1. However, V1 may be deprecated and removed in a future release.
2.3.7.1. Migration from V1 to V2

Due to fundamental changes in the permission model, automatic migration from V1 to V2 is not available. To simplify the transition:

  • A new admin-permissions client is introduced. This client is created when you enable the capability for the realm. The client holds the authorization model for FGAP:V2.
  • The existing FGAP:V1 authorization model remains unchanged within the realm-management client.
  • Administrators must recreate permissions and policies using the new model, which can be configured in the updated Permissions section of the Admin Console.
  • Realm-level enablement:

    • FGAP:V2 can be enabled for a realm using the new Admin Permissions switch in Realm Settings.
  • Centralized management:

    • The resource-specific Permissions tabs (for users, groups, clients, and roles) have been removed.
    • A new Permissions section provides centralized management for all administrative permissions from a single place in the Admin Console.
  • Explicit operation scoping:

    • Transitive dependencies between permissions have been removed.
    • Administrators must now explicitly assign each required permission.
    • Example: To both view and manage a resource, both view and manage scopes for a permission must be assigned separately.
  • Permission model changes:

    • The user-impersonated user permission has been removed.
  • The configure client permission has been removed. With the introduction of explicit operation scoping in V2, the distinction between manage and configure became ambiguous. Permissions to manage-members of a group do not allow a realm administrator to unassign members from groups. The reason for that restriction is that V1 allowed a member of a group to become a regular realm user, and workaround permissions to create users in a realm. Future releases may provide additional scopes to allow deletion of members from groups.
  • Flexible resource scoping:

    • Unlike V1, where permissions were granted either to a single resource (for clients, groups, and roles) or all resources (for users), V2 introduces greater flexibility.
    • Administrators can now define permissions for:

      • A specific resource
      • A set of selected resources
      • All resources of a given type
      • This applies to all resource types: clients, users,groups, and roles.

2.4. Additional changes at version 26.2.x

The following changes concern internal behavior changes to prevent common misconfigurations, changes to address issues, and other changes that simplify running of Red Hat build of Keycloak.

For clustering multiple nodes, Red Hat build of Keycloak uses distributed caches. Starting with this release for all TCP-based transport stacks, the communication between the nodes is encrypted with TLS and secured with automatically generated ephemeral keys and certificates.

If you are not using a TCP-based transport stack, it is recommended to migrate to the jdbc-ping transport stack to benefit from the simplified configuration and enhanced security.

If you provided your own keystore and truststore to secure the TCP transport stack communication in previous releases, it is now recommended to migrate to the automatically generated ephemeral keys and certificates to benefit from the simplified setup.

If you are using a custom transport stack, this default behavior can be disabled by setting the option cache-embedded-mtls-enabled to false.

If you are using a service mesh, configure it to allow direct mTLS communication between the Red Hat build of Keycloak Pods.

For more details, see Securing Transport Stacks.

When adding new users, groups, or roles, the LDAP provider would always store them in the same base DN configured for the searches. However, in some deployments admins may want to configure a broader DN with subtree scope to fetch users (or groups/roles) from multiple sub-DNs, but they do not want new users (or groups/roles) to be stored in this base DN in LDAP. Instead, they would like to choose one of the sub-DNs for that.

It is now possible to control where new users, groups, or roles will be created using the new Relative User Creation DN config option in the LDAP provider and also in the LDAP group and role mappers. For more details, see LDAP admin

Built-in X.509 client certificate lookup providers now reflect the proxy-trusted-addresses config option. A certificate provided through the HTTP headers will now be processed only if the proxy is trusted, or proxy-trusted-addresses is unset.

The Red Hat build of Keycloak Operator now creates by default a NetworkPolicy to restrict traffic to internal ports used for Red Hat build of Keycloak’s distributed caches.

This strengthens a secure-by-default setup and minimizes the configuration steps of new setups. This change is intended to be backwards compatible to existing deployment, so no additional steps are necessary at the time of the upgrade. You can return to the previous behavior by disabling the creation of NetworkPolicies in the Keycloak CR.

If your deployment scripts add explicit NetworkPolicies for Red Hat build of Keycloak, consider removing those and migrate to the new functionality provided in the Keycloak CR as a follow-up to the upgrade.

For more details, see Operator Advanced configuration.

Previously the reset credentials flow (forgot password feature) kept the user logged in after the reset credentials if the same authentication session (same browser) was used. For federated user providers, this behavior can be a security issue. Consider a scenario where a provider implementation detects the user as enabled and performs the password change successfully, but somehow the validation of the user password fails. In this scenario, the reset credentials flow allowed a user to log in after the successful password change; however, that login would have been denied using the normal browser flow. This is not a common scenario, but it should be avoided by default.

For this reason, now the authenticator reset-credential-email (Send Reset Email) has a new configuration option called force-login (Force login after reset) with values true (always force the login), false (previous behavior that keeps the user logged in if the same authentication session is used), and only-federated (default value that forces federated users to authenticate again and keeps the previous behavior for users stored in Red Hat build of Keycloak’s internal database).

For more information about changing this option, see Enable forgot password.

Any offline session in Red Hat build of Keycloak is created from an online session. When the offline_access scope is requested, the current online session is used to create the associated offline session for the client. Therefore, any offline_access request finished, until now, created two sessions: one online and one offline. This situation leads to unreliable behavior. For example, when just the login with scope=offline_access was requested, an unused online session could be created. This session is useless in most cases and causes unnecessary consumption of server resources.

Starting with this version, Red Hat build of Keycloak removes the initial online session if the offline_scope is directly requested as the first interaction for the session. The client retrieves the offline token after the code to token exchange that is associated to the offline session, but the previous online session is removed. If the online session has been used before the offline_scope request, by the same or another client, the online session remains active as today. This situation also means that the SSO session is not created in the browser if the login request with scope=offline_access is used and the user was not already authenticated in the SSO beforehand. Although the new behavior makes sense because the client application is just asking for an offline token, it can affect some scenarios that rely on having the online session still active after the initial offline_scope token request.

Red Hat build of Keycloak introduces a new client scope at the realm level called service_account. This scope is in charge of adding the specific claims for the client_credentials grant (client_id, clientHost and clientAddress) by using protocol mappers. This scope will be automatically assigned to and unassigned from the client when the serviceAccountsEnabled option is set or unset in the client configuration.

Previously, the three mappers (Client Id, Client Host and Client IP Address) were added directly to the dedicated scope when the client was configured to enable service accounts, and they were never removed.

The behavior should be effectively the same for most Red Hat build of Keycloak deployments because claims in the token are effectively the same as before. You might be affected in cases when you are using a client credentials grant and you are preparing the Red Hat build of Keycloak environment by some tooling that is manually removing or updating the three protocol mappers mentioned above. For instance, if you use an admin CLI script to enable a service-account for a client and then remove the built-in service-account protocol mappers, you may adjust your CLI to instead remove the assignment of the service_account client scope from the client instead of removing protocol mappers.

When a client is configured to authenticate using the Signed JWT or Signed JWT with Client Secret type, Red Hat build of Keycloak now enforces a maximum expiration for the token. This means that, although the exp (expiration) claim in the token may be much later, Red Hat build of Keycloak will not accept tokens issued before that max expiration time. The default value is 60 seconds. Note that JWT tokens should be issued right before being sent for authentication. As a result, the client has a one minute window to send the token for login. Nevertheless this expiration can be tuned using the Max expiration configuration option on the client Credentials tab. For more details, see Confidential client credentials.

2.4.9. Removed and deprecated features

At version 26.2.x, certain features have been removed and other features have been marked as deprecated for removal at a later release. For details on these changes, see the Release Notes.

You upgrade the server before you upgrade the adapters.

3.1. Preparing for upgrading

Perform the following steps before you upgrade the server.

Procedure

  1. Shutdown Red Hat build of Keycloak.
  2. Back up the old installation, such as configuration, themes, and so on.
  3. If XA transaction is enabled, handle any open transactions and delete the data/transaction-logs/ transaction directory.
  4. Back up the database using instructions in the documentation for your relational database.

    The database will no longer be compatible with the old server after you upgrade the server. If you need to revert the upgrade, first restore the old installation, and then restore the database from the backup copy.

Note

In case the feature persistent-user-sessions is disabled in your current setup and the server is upgraded, all user sessions will be lost except for offline user sessions. Users owning these sessions will have to log in again. Note the feature persistent-user-sessions is disabled by default in the Red Hat build of Keycloak server releases prior to 26.0.0.

Warning

Information about failed logins for the brute force detection and currently ongoing authentication flows is only stored in the internal caches that are cleared when Red Hat build of Keycloak is shut down. Users currently authenticating, changing their passwords or resetting their password will need to restart the authentication flow once Red Hat build of Keycloak is up and running again.

Once you have prepared for the upgrade, you can download the server.

Procedure

  1. Download and extract rhbk-26.2.9.zip from the Red Hat build of Keycloak website.

    After extracting this file, you should have a directory that is named rhbk-26.2.9.

  2. Move this directory to the desired location.
  3. Copy providers/ and themes/ from the previous installation to the new installation.
  4. Copy all files except cache-ispn.xml from conf/ from the previous installation to the new installation.
  5. If you modified cache-ispn.xml or created a custom cache configuration file:

    1. Re-apply your changes based on the cache-ispn.xml file shipped with the new installation, and place them in the new installation.
    2. Review the latest Red Hat build of Keycloak configuration options for cache sizes and transport stacks if they can be used instead of your modifications as they provide better documentation, additional validations and functionality, and a simpler upgrade experience.

3.3. Migrating the database

Red Hat build of Keycloak can automatically migrate the database schema, or you can choose to do it manually. By default the database is automatically migrated when you start the new installation for the first time.

Note

Before you migrate the database, shut down all Red Hat build of Keycloak nodes running the old version of Red Hat build of Keycloak.

Note

Migration is not supported with the default H2 based dev-file database type.

3.3.1. Automatic relational database migration

To perform an automatic migration, start the server connected to the desired database. If the database schema has changed for the new server version, the migration starts automatically unless the database has too many records.

For example, creating an index on tables with millions of records can be time-consuming and cause a major service disruption. Therefore, a threshold of 300000 records exists for automatic migration. If the number of records exceeds this threshold, the index is not created. Instead, you find a warning in the server logs with the SQL commands that you can apply manually.

To change the threshold, set the index-creation-threshold property, value for the connections-liquibase provider:

kc.[sh|bat] start --spi-connections-liquibase-quarkus-index-creation-threshold=300000
Copy to Clipboard Toggle word wrap

3.3.2. Manual relational database migration

To enable manual upgrading of the database schema, set the migration-strategy property value to "manual" for the default connections-jpa provider:

kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-strategy=manual
Copy to Clipboard Toggle word wrap

When you start the server with this configuration, the server checks if the database needs to be migrated. If migration is needed, the required changes are written to the bin/keycloak-database-update.sql SQL file. You can review and manually run these commands against the database.

To change the path and name of the exported SQL file, set the migration-export property for the default connections-jpa provider:

kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-export=<path>/<file.sql>
Copy to Clipboard Toggle word wrap

For further details on how to apply this file to the database, see the documentation for your relational database. After the changes have been written to the file, the server exits.

3.4. Migrating themes

If you created custom themes, those themes must be migrated to the new server. Also, any changes to the built-in themes might need to be reflected in your custom themes, depending on which aspects you customized.

Procedure

  1. Copy your custom themes from the old server themes directory to the new server themes directory.
  2. Use the following sections to migrate templates, messages, and styles.

    • If you customized any of the updated templates listed in Migration Changes, compare the template from the base theme to check for any changes you need to apply.
    • If you customized messages, you might need to change the key or value or to add additional messages.
    • If you customized any styles and you are extending the Red Hat build of Keycloak themes, review the changes to the styles. If you are extending the base theme, you can skip this step.

3.4.1. Migrating templates

If you customized any template, compare it to the new version of that template. This comparison shows you what changes you need to apply to your customized template. You can use a diff tool to compare the templates. The following screenshot compares the info.ftl template from the Login theme and an example custom theme:

Updated version of a Login theme template versus a custom Login theme template

Updated version of a Login theme template versus a custom Login theme template

This comparison shows that the first change (Hello world!!) is a customization, while the second change (if pageRedirectUri) is a change to the base theme. By copying the second change to your custom template, you have successfully updated your customized template.

In an alternative approach, the following screenshot compares the info.ftl template from the old installation with the updated info.ftl template from the new installation:

Login theme template from the old installation versus the updated Login theme template

Login theme template from the old installation versus the updated Login theme template

This comparison shows what has been changed in the base template. You can then manually make the same changes to your modified template. Since this approach is more complex, use this approach only if the first approach is not feasible.

3.4.2. Migrating messages

If you added support for another language, you need to apply all the changes listed above. If you have not added support for another language, you might not need to change anything. You need to make changes only if you have changed an affected message in your theme.

Procedure

  1. For added values, review the value of the message in the base theme to determine if you need to customize that message.
  2. For renamed keys, rename the key in your custom theme.
  3. For changed values, check the value in the base theme to determine if you need to make changes to your custom theme.

3.4.3. Migrating styles

You might need to update your custom styles to reflect changes made to the styles from the built-in themes. Consider using a diff tool to compare the changes to stylesheets between the old server installation and the new server installation.

For example:

$ diff RHSSO_HOME_OLD/themes/keycloak/login/resources/css/login.css \
RHSSO_HOME_NEW/themes/keycloak/login/resources/css/login.css
Copy to Clipboard Toggle word wrap

Review the changes and determine if they affect your custom styling.

After upgrading the Red Hat build of Keycloak server, you upgrade the adapters. Versions of adapters and Red Hat build of Keycloak are now decoupled, meaning that they are released on different schedules. Therefore, use these rules to determine which adapters you upgrade:

  • Earlier versions of an adapter might work with later versions of the Red Hat build of Keycloak server.
  • Earlier versions of the Red Hat build of Keycloak server might not work with later versions of an adapter.

Each adapter upgrade section provides details on supported adapter versions.

4.1. Upgrading the JBoss EAP SAML adapter

As of Red Hat build of Keycloak 26.0, the JBoss EAP SAML adapter is no longer released with Red Hat build of Keycloak. If you deployed an application with version 6.x or 7.x of that adapter, it is not supported by Red Hat build of Keycloak. Those versions of the adapter are only supported to be used in combination with Red Hat Single Sign-On 7.6.

The fully supported adapter for SAML is the Keycloak SAML Adapter feature pack or RPM for JBoss EAP 8.0.

To upgrade a JBoss EAP SAML adapter that has been copied to your web application, perform the following procedure.

Procedure

  1. Remove the previous adapter modules by deleting the EAP_HOME/modules/system/add-ons/keycloak/ directory.
  2. Install the new version of the adapter. For full details, see Installing JBoss EAP by using the RPM installation method.

As of Red Hat build of Keycloak 26.0, the JBoss EAP OpenID connect (OIDC) adapter is no longer released with Red Hat build of Keycloak. This adapter has reached end of life and it is only supported to be used in combination with Red Hat Single Sign-On 7.6. The supported adapter for OIDC is supplied by JBoss EAP 8.0.

To upgrade a JBoss EAP OIDC adapter that has been copied to your web application, perform the following procedure.

Procedure

  1. Remove the previous adapter modules by deleting the EAP_HOME/modules/system/add-ons/keycloak/ directory.
  2. Install the OIDC client supplied by JBoss EAP 8.0. For details, see Securing Applications with OIDC.

4.3. Upgrading the JavaScript adapter

The previous version of the JavaScript adapter is 26.0.11. For this release of Red Hat build of Keycloak, the supported version of this adapter is 26.2.0.

To upgrade a JavaScript adapter that has been copied to your web application, perform the following procedure.

Procedure

  1. Remove the previous version of the JavaScript adapter.
  2. Use these NPM commands to install the 26.2.0 version of the adapter:

    npm config set @redhat:registry https://npm.registry.redhat.com
    install: npm install @redhat/keycloak-js@latest
    Copy to Clipboard Toggle word wrap

4.4. Upgrading the Node.js adapter

The previous version of the Node.js adapter is 26.0.11. For this release of Red Hat build of Keycloak, the supported version of this adapter is 26.1.1.

To upgrade a Node.js adapter that has been copied to your web application, perform the following procedure.

Procedure

  1. Remove the previous version of the Node.js adapter.
  2. Use these NPM commands to install the 26.1.1 version of the Node.js adapter:

    npm config set @redhat:registry https://npm.registry.redhat.com
    npm install @redhat/keycloak-connect@latest
    Copy to Clipboard Toggle word wrap
  3. Change the dependency for keycloak-connect in the package.json of your application.

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