FusionAuth Release Notes
FusionAuth releases come in three flavors: major, minor, and patch.
You can tell what a release is from the rightmost non-zero number in the version: <major>.<minor>.<patch>. For example:
1.0.0: major release, may significantly change the API1.63.0: minor release, may make small changes to the API1.45.1: patch release, never changes the API
For more information about upgrading your instance of FusionAuth, see our Upgrade FusionAuth Guide.
To jump to a specific version that interests you, choose a version from the dropdown:
To filter release notes by category, select a category or multiple categories below:
Version 1.63.0 (Proof Pangolin) #
To use the new show password toggle for password input fields, you must add new macros to your theme. See Upgrade an Advanced Theme for additional information about the upgrade process. See Advanced Theme Upgrade Notes for details on updating an existing advanced theme specific to this release.
Removed the deprecated (since 1.50.0) User API JWT authentication method, retrieveUserViaJWT, from client libraries.
Introduced support for Demonstrating Proof-of-Possession (DPoP), a method of binding access and refresh tokens to a client key pair for additional security. This protects against token theft and replay attacks.
Added the AuthenticationType parameter to the MFA Requirement Lambda. This enables prompts for MFA based on the method the user used to login.
Added more relevant information to the summary tab in the setup wizard.
Thanks to @mark-robustelli !
In the setup wizard, added a link to the licensing agreement.
Thanks to @mark-robustelli !
Following NIST password guidelines, added a check that prevents users from configuring a password that matches their username.
Fixed a bug where one application’s SSO session could prevent login to another application when a user had not yet completed registration.
Fixed a bug where a reconcile lambda could fail to set a value for an IdP linking strategy when the IdP’s value is null.
Fixed an issue where the SAML metadata API returned a 500 response when the configuration specified a custom Name ID.
Added validation to fix a bug where nonfunctional signing keys could be successfully created by mismatching the type label with the PEM.
Fixed a bug introduced in 1.62.1 where the Simple Theme login page displayed a Face ID login graphic over content.
Fixed a bug where hosted login pages for universal applications sometimes showed IdPs scoped to another tenant.
Fixed a longstanding bug where the monthly active user table did not display data from the month of December.
Thanks to @Robert-Janeczek !
Fixed a bug in self-service registration where a user could alter a hidden field (using browser developer tools) and cause Failed decrypt registration state errors to appear in the event log.
Fixed a bug where autocomplete did not function correctly when accessing the Admin UI over HTTP (instead of HTTPS).
In the setup wizard, the checkbox for accepting the licensing agrement was not marked as required. It is indeed required, so now it is marked with an asterisk (*).
In System Settings > UI , a form field labeled “Menu font” controlled the menu font color. Added the suffix “color” to this label to clarify the field’s purpose.
Thanks to @brob !
API Key endpoint permissions didn’t allow for row selection, despite text that indicated otherwise.
Thanks to @brob !
In the setup wizard, marked “tell us more” field as required with an asterisk (*) when the “Other” acquisition channel is selected.
Thanks to @brob !
Fixed backwards toggle logic when requiring encrypted SAML assertions. When creating or editing a SAMLv2 and IdP-initiated SAML IdP, under the Options tab, the Require encrypted assertions toggle should expose the decryption key selector when it’s on and hide it when it’s off. The logic was backwards, hiding the selector when it’s on and exposing it when it’s off.
Fixed a bug where the SCIM create operation returned error code 400 (instead of 409) when both user.email and user.username are duplicated.
Switched from MD5 hash generation to the built-in Postgres gen_random_uuid() function. This improves our FIPS support.
Cleaned up the root template for the FusionAuth instance to make it easier to reach the Admin UI.
Thanks to @brob !
Changed first-time setup links to flexible pointers that we can update without releasing a new version.
Thanks to @brob !
Updated the following dependencies:
Java:
ch.qos.logback:logback-classic1.5.19 -> 1.5.25ch.qos.logback:logback-core1.5.19 -> 1.5.25com.inversoft:inversoft-license4.9.0 -> 4.10.0io.fusionauth:fusionauth-jwt6.0.0 -> 6.1.0io.fusionauth:fusionauth-samlv21.1.3 -> 2.0.0org.primeframework:prime-mvc5.7.0 -> 5.9.0
Javascript:
@ctrl/tinycolor4.1.0 -> 4.2.0@floating-ui/core1.6.9 -> 1.7.4@floating-ui/dom1.6.13 -> 1.7.5@floating-ui/utils0.2.9 -> 0.2.10@fusionauth/typescript-client1.57.0 -> 1.62.0@lit-labs/ssr-dom-shim1.3.0 -> 1.5.1@lit/react1.0.7 -> 1.0.8@lit/reactive-element2.0.4 -> 2.1.2@tailwindplus/elements1.0.20 -> 1.0.22@types/react19.1.0 -> 19.2.13csstype3.1.3 -> 3.2.3lit3.2.1 -> 3.3.2lit-element4.1.1 -> 4.2.2lit-html3.2.1 -> 3.3.2lodash4.17.21 -> 4.17.23- added
brace-expansion1.1.12 - removed
cli/node_modules/brace-expansion(was 1.1.12) - removed
jshint/node_modules/brace-expansion(was 1.1.12)
Version 1.62.1 #
The Simple Theme login page displays a large Face ID login graphic over content.
Resolved in version 1.63.0 via
#3295
.
Hosted login pages for universal applications sometimes show IdPs scoped to another tenant.
Resolved in version 1.63.0 via
#3308
.
When using database search mode, user searches could fail due to FreeMarker template errors introduced in the 1.62.0 UI update.
When a custom theme was missing a template, FusionAuth could fail to render the fallback template from the default theme. In some cases this could prevent a user from completing various workflows.
Version 1.62.0 (Refined Reindeer) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
To use the new pre-verification feature in Advanced Registration Forms, you must add new templates to your theme. See Upgrade an Advanced Theme for additional information about the upgrade process. See Advanced Theme Upgrade Notes for details on updating an existing advanced theme specific to this release.
When upgrading from older versions of FusionAuth with a customized theme, upgrade to 1.61.2 first, add missing templates to your theme, and then upgrade to 1.62.0.
This release makes changes to API key requirements for the /api/identity-provider endpoint. Tenant-scoped API keys can only be used to configure identity providers belonging to the same tenant. A global API key is required to configure global identity providers.
Introduces the MFA Requirement Lambda, which dynamically decides whether a user should receive an MFA challenge, even if trust has already been established. Used for adaptive MFA and step-up workflows.
Added a mode that supports FIPS-compliant verified cryptographic modules. For more details, see Compliance Frameworks.
Added pre-verification of user identities. This forces email address or phone number verification before creating a user.
Added the ability to create tenant-scoped instances of identity providers. Tenant-scoped identity providers can only be used for authentication workflows within that tenant and are only configurable for applications belonging to that tenant, as well as universal applications. Managed domains may be reused on identity providers belonging to different tenants. Managed domains on global identity providers remain globally unique.
Tenant-scoped identity provider configurations can be managed by tenant-scoped API keys and requests.
Tenant-scoped identity providers are especially useful if you want to restrict identity provider availability to users belonging to a specific tenant.
Added support for using EdDSA key pairs using the Ed25519 algorithm to sign and validate JWTs.
Updated the styling of the Admin UI. Does not affect custom themes, but does improve (at least, to our eyes) the default theme.
Reports on the Admin UI could load slowly or time out during high user traffic or when a large number of applications exist.
IdP (federated) logins do not work for Universal Apps. Instead, shows the error message: Invalid_Request. Missing_tenant_id.
When family settings are enabled, including requiring a parent email, the parent email does not persisted after self-service registration by a child. This prevents an email from being sent to the parent email.
When creating a new lambda, changing the lambda type does not update the lambda body to the default body for that type.
Updated the following dependencies:
- Upgrade
io.fusionauth:fusionauth-jwt5.3.3->6.0.0 - Upgrade
org.primeframework:prime-mvc5.6.1->5.7.0 - Add
org.bouncycastle:bc-fips2.1.2 - Add
org.bouncycastle:bctls-fips2.1.22
Version 1.61.2 #
Improved signature processing of encrypted SAML assertions to mitigate an identified vulnerability. If you are using using a SAML IdP that allows IdP-initiated login, you should upgrade.
Updated the following dependencies:
- Upgrade
io.fusionauth:fusionauth-samlv21.1.1->1.1.3
Version 1.61.1 #
The logout button was not visible on account self-service pages. The button is now displayed with the correct icon.
Resolved in version 1.62.1 via
#3282
.
When using database search mode, user searches could fail due to FreeMarker template errors introduced in the UI update. User search now works correctly in database search mode.
Resolved in version 1.62.1 via
#3285
.
When testing Email Templates in the FusionAuth admin UI, rendering some template types resulted in an error. All template types can now be tested in the admin UI.
When a Minimum Password Age is configured for the tenant, creating a user without a password resulted in an exception. You can now create users without a password in tenants with a minimum password age requirement; password age rules apply once the user sets a password.
Providing an expired Id Token to the /oauth2/logout endpoint using the id_token_hint parameter resulted in an OAuth error. The /oauth2/logout endpoint once again accepts expired Id Tokens in accordance with the specification.
Version 1.61.0 (Flexible Fox) #
Several changes are required to support multiple configurations of various identity provider types that were previously restricted to a single configuration per FusionAuth instance. References to the legacy sign with Google JavaScript library, deprecated by Google in 2023, have been removed from FusionAuth. Please migrate to the updated Sign in with Google integration to continue using the Google identity provider.
Identity Provider API
For /api/identity-provider PUT/PATCH/DELETE:
The variant of these APIs that resolve the identity provider by a type query string parameter are deprecated. Use the variant that provides the identityProviderId via a URL path segment instead.
You can now create multiple instances of any identity provider type, each with its own distinct configuration and reconcile lambda. This is especially useful if you have users mapped to different tenants, and want the ability to have an identity provider of the same type in each tenant, each having its own distinct config.
Added the ability to set maximum sizes on both the HTTP request header and body. These can be useful for blocking invalid requests before they are processed by FusionAuth’s HTTP server.
Added support for the SAML v2.0 ForceAuthn attribute. When using FusionAuth as an IdP, this attribute will force re-authentication of the user, regardless of their SSO session state.
In version 1.59.0 we started indexing the new user.phoneNumber field for searches. IndexUser had a new field added, but the doc annotation was missing the version.
The GET /api/user/change-password endpoint does not allow a loginId type of phoneNumber. Additionally, client libraries are incorrectly passing a username parameter instead of a loginId parameter in checkChangePasswordUsingLoginId calls. This API endpoint is also lacking documentation.
When federating with a Google IdP, there are situations where a user can be re-prompted for authentication when already having valid FusionAuth and Google IdP sessions. SSO should now be honored correctly in these cases.
After establishing MFA trust on a device, a user is being re-challenged during a voluntary password reset, even during the trust period. The user should be able to change their password without completing another MFA challenge.
During startup, FusionAuth can output duplicate log entries. This was especially present with silent mode enabled. Logging should now be more efficient.
When a user first logs into a tenant configured with a connector, they will see an error when MFA is required and/or an updated and stronger password policy is in place. Subsequent logins behave normally.
Searches for users using nested searches involving registration fields may return incomplete results in some cases.
When using SCIM PATCH to add a user field, exiting fields are being removed. PATCH should now be handled as expected.
Performing a user reindex intermittently results in an email, username, or phoneNumber being omitted from Elastic/OpenSearch and not being searchable.
Some unwanted JavaScript errors are reported in the browser console on some pages, including the maintenance mode page and the application scope management page. These errors should now be handled more gracefully.
SCIM group searches are not properly honoring the eq operator. This operator should be doing an exact (but case-insensitive) search, but instead is doing a wildcard search.
Webhook user.delete events were not populating email, username, or phoneNumber fields when users were deleted under certain circumstances.
Updated the following dependencies:
- Upgrade
io.fusionauth:fusionauth-jwt5.3.2->5.3.3 - Upgrade
io.fusionauth:java-http0.3.7->1.4.0 - Upgrade
org.freemarker:freemarker2.3.33->2.3.34 - Upgrade
org.primeframework:prime-email0.21.1->0.22.0 - Upgrade
org.primeframework:prime-js1.7.0->1.8.0 - Upgrade
org.primeframework:prime-mvc4.36.0->5.6.1 - Upgrade
ch.qos.logback1.5.16->1.5.19 - Upgrade
org.mybatis:mybatis3.5.16->3.5.19 - Upgrade
com.fasterxml.jackson.*2.17.2->2.19.2 - Upgrade
org.slf4j:slf4j-api2.0.13->2.0.17 - Upgrade
org.postgresql:postgresql42.7.3->42.7.7 - Upgrade
io.fusionauth:fusionauth-samlv21.0.0->1.1.1
Version 1.60.2 #
When using FusionAuth as a SAML Service Provider (SP), receiving a SAML Response containing an Assertion with an attribute value of null or of an unsupported type will result in a failure to parse the Response.
This issue was introduced in version 1.60.0 and has been corrected.
Version 1.60.1 #
When upgrading from 1.60.0 you must revert the workaround noted on GitHub Issue #3183 before or immediately after this upgrade.
When using FusionAuth as a SAML IdP with a SAML Populate lambda that reads or modifies the SAML assertion will fail causing the login request to fail.
This issue was introduced in version 1.60.0 and has been corrected.
Version 1.60.0 (Prompt Param Piranha) #
Some changes have been made to the way JWTs are produced and validated:
Moved claims
- The
gtyclaim has been moved from the JWT header to the body.- This claim is present in an access token or id token produced by an OAuth grant.
- The
useclaim has been moved from the JWT header to the body.- This claim is present in an access token produced by an OAuth client credentials grant to authenticate a FusionAuth SCIM server.
New and reserved claims
The following claims are now reserved:
auth_time- Reserved for all user tokens, excludes client credentialsgty- Reserved for all tokenstty- Reserved for all tokensuse- Reserved for the client credentials grant
We do not expect this change to impact our customers. If you are adding, removing or modifying these claims using a lambda function, you will need to plan to modify your integration.
These claims are not considered reserved for the Vend API.
Token validation
It is possible that an existing access token or id token that has not yet expired will no longer be considered valid by FusionAuth. If you are using a short lived access token with a refresh token, refreshing the access token will correct itself. These changes will not have any affect on your use of the JWTs produced by FusionAuth.
Client credentials
The aud claim will always be returned as an array.
Previously this claim may be returned as an string or an array depending upon the request. The following examples show different scope values and their prior affect on the aud claim:
scope=target-entity:1:read->aud: 1scope=target-entity:1:read target-entity:2:read->aud: [1, 2]
To simplify integration requiring an integrator to only account for a single data type this claim will now always be returned as an array. If you have only ever used a single entity in the scope parameter, it is possible your integration is not expecting an array. Please be sure to account for this change prior to upgrade.
SCIM client integrations
If you are using FusionAuth as a SCIM server and you have integrated with a third-party SCIM client by manually performing a client credentials grant please be aware that you will need to adjust your integration.
The preferred integration with a SCIM client is to use the client credentials grant. By using a single long lived token you have functionally created an API key that cannot be revoked.
If your SCIM clients authentication configuration does not offer a way to configure the scope parameter you may add this to the Token endpoint as a query string. For example the Microsoft configuration does not offer a separate scope field so you will need to append ?scope={scope} to the Token endpoint where the value of {scope} is the scope you are using to obtain an access token.
If your SCIM client authentication only allows for a token and does not directly support the client credentials grant, we would recommend that you programatically generate and rotate the access token by using an API to ensure that you are not creating very long lived access tokens for a SCIM client.
Deprecated features removed
The User API JWT authentication method which was deprecated in version 1.50.0 has now been removed.
OAuth Logout
Now that we identify an id_token using the newly added tty claim, the OAuth2 Logout endpoint will now correctly reject an access_token when sent as the id_token_hint parameter according to spec. If you have any integrations that are sending an access_token in the id_token_hint parameter instead of the id_token you will need to correct your integration prior to upgrading.
When using FusionAuth as a SAML IdP with a SAML Populate lambda that reads or modifies the SAML assertion will fail causing the login request to fail. If you have encountered this issue, please upgrade to 1.60.1 if possible, or click on the linked GitHub issue to review the temporary workaround.
Resolved in version 1.60.1 via
#3183
.
Resolved in version 1.61.0 via
#3186
.
When using FusionAuth as a SAML Service Provider (SP), receiving a SAML Response containing an Assertion with an attribute value of null or of an unsupported type will result in a failure to parse the Response. If you have encountered this issue, please upgrade to 1.60.2 if possible.
Resolved in version 1.60.2 via
#3190
.
/oauth2/logout endpoint using the id_token_hint parameter results in an OAuth error.
Resolved in version 1.61.1 via
#3251
.
Added support for the OIDC prompt parameter! This enables silent authentication, re-authentication requests, consent prompting, and more.
Thanks to all of the community members that have helped us define this requirement, and waited patiently for it!
General improvements to how we handle and process JWTs in the form of access tokens and refresh tokens:
- Adding
ttyclaim to all tokens produced to easily differentiate between an access token and id token. - Moving the
gtyclaim from the header to the body for tokens produced by an OAuth grant. - Moving the
useclaim from the header to the body for tokens produced by the client credentials grant for a SCIM server. - Better support of the
token_type_hinton the Introspect endpoint. - Allow the use of refresh tokens on the Introspect endpoint with a
token_type_hintofrefresh_token
Move the gty and use claims from the JWT header to the body. This should improve interoperability with various identity providers such as AWS and Microsoft.
The gty claim will be present for all tokens produced by an OAuth grant. The use claim will be present in an access token produced to authenticate the SCIM server.
Significantly improved performance for the bulk User Import API.
Performance will particularly be improved when you have thousands of configured applications.
Our release process now auto-updates the the example JSON payload for usage data on collected metrics.
This documentation will remain up to date going forward.
For example data, see Collected Metrics.
In version 1.59.0 the password is now optional when creating or updating a user.
When returning from a third-party login, a user may be prompted to complete registration by entering a password when self-service is enabled and is configured to require a password.
This was unintended and has been corrected.
During a password reset workflow, for a user that has MFA configured, the user will be prompted to complete the MFA challenge.
When the user completes the challenge, the remember this device checkbox even when checked may not be honored.
The result is that once the user completes the change password workflow by completing an MFA challenge, the user will be prompt again on next login. This can be frustrating, and has been corrected.
When performing the initial setup of FusionAuth outside of FusionAuth Cloud maintenance mode assists you with configuring the connecting to the database and search service.
When we cannot connect to the database, or you have not provided enough information to make these connections an error page is displayed.
This page has been enhanced to provide better messaging and links to documentation to help you out if you need to troubleshooting the setup process.
FusionAuth now supports multiple assertions in the SAML AuthN response.
If the AuthN response contains multiple assertions, all will be made available to the SAML reconcile lambda function.
We significantly improved performance of User API searches returning expanded user records, and user reindex actions as well!
When decommissioning a license in a FusionAuth cluster, the change may not be reflected in all cluster nodes immediately. This can provide intermittent and inconsistent access to licensed features, depending on which node is handling a request.
A user can be shown a rendering error while attempting to complete an email based MFA login.
The error occurs when send rate limiting has been enabled as part of Advanced Threat Detection. When the user reached the rate limit threshold for requesting emails to be sent to complete login, the intended error was not shown an instead a page rendering error was displayed.
When a user completes a forgot password workflow, the failed login count will be reset.
This should reduce frustration for a user that changed their password after exceeding the configured failed login count. In this scenario, if the user had entered the the incorrect password again they would be required to wait for the configured time period before attempting login again. This could be quite frustrating.
Now that the failed count has been reset, the user will at least be allowed to enter the wrong password a few more times before we thwart their efforts.
When running in dark mode, or using a dark theme with a FusionAuth simple theme, some QR code scanners are unable to read the QR code for setting up MFA. We have added a light border to ensure that the QR code is still readable on a dark background. The QR code should have a high-contrast border to allow these readers to work.
When previewing the Phone verification required, Complete registration, and Passwordless theme templates in an advanced theme preview window, a FreeMarker exception is displayed to the user.
This was introduced in version 1.59.0.
A race condition exists, when attempting to activate FusionAuth using an air-gapped license without any outbound network access that may cause the the request to fail and not correctly persist the license.
When this issue is encountered the system becomes un-licensed.
When regenerating Reactor’s encryption key, the Breached Password Detection status may take longer than expected to return to Active.
If you were to encounter this issue, deactivating and reactivating your license will also correct the state. You can also reach out to support if you see something like this as well.
Improved MFA configuration workflow during self-service registration when configured as required.
In version 1.59.0, changes were introduced that made it impossible to set webhooks for a handful of event types as transactional.
See release notes for 1.59.1 below for additional information.
FusionAuth accepts access tokens to authenticate requests and to initiate user authentication workflows.
Improvements have been made to how tokens are accepted, processed and validated to ensure they are suitable to authenticate the request. This will improve security now and will be necessary to support access tokens more extensively for authenticating requests.
Improvements have been made to how FusionAuth processes signed SAML assertions to mitigate an identified vulnerability. If you are using using a SAML IdP, especially when allowing IdP initiated login, please plan to upgrade at your earliest convenience.
Updated the following dependencies:
- Upgrade
io.fusionauth:fusionauth-usage-stats:fusionauth-usage-stats-common0.6.0->0.6.1 - Upgrade
org.primeframework:prime-mvc4.34.0->4.35.1 - Upgrade
io.fusionauth:fusionauth-samlv20.11.1->1.0.0
Version 1.58.3 #
An upgrade to FusionAuth version 1.58.2 or 1.59.0 fails if the Default Admin Registration provided by FusionAuth form (shipped in 1.20.0) is renamed or deleted prior to the upgrade.
Version 1.59.1 #
Admins control whether users must have passwords for an application by modifying the application’s advanced registration form. Basic registration forms always have a password field, so a password is always required. IdP logins (such as Login with Google) create users without passwords. If the users are using an IdP to log in to an application with a required password field, the user is forced to set a password.
Resolved in version 1.60.0 via
#3159
.
Updating the tenant will cause the following webhok events when enabled to be configured as non-transactional. This will only affect you if you have configured one or more of these event types as transactional:
user.identity.updateuser.identity.verifieduser.registration.createuser.registration.deleteuser.registration.updateuser.registration.verifieduser.update
Resolved in version 1.60.0 via
#3175
.
IdP logins do not work for Universal Apps. Instead, the error message Invalid_Request. Missing_tenant_id is displayed.
Resolved in version 1.62.0 via
#3161
.
Performing a user reindex occasionally results in an email, username, or phoneNumber, for a small fraction of users, to not be searchable via Elasticsearch/OpenSearch.
Resolved in version 1.61.0 via
#3186
.
An upgrade to FusionAuth version 1.58.2 or 1.59.0 fails if the Default Admin Registration provided by FusionAuth form (shipped in 1.20.0) is renamed or deleted prior to the upgrade.
Version 1.59.0 (Identity Ibex) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
This version of requires several changes to your theme to support users without passwords.
Registration verification is deprecated and will be removed in a future version of FusionAuth.
User API
For /api/user GET:
user.verified is now a deprecated field that only indicates whether or not the User’s primary email identity has been verified. This does NOT indicate whether phone number identity types are verified. Use user.identities[x].verified and user.identities[x].verifiedReason instead.
For /api/user POST:
sendSetPasswordEmail is deprecated. Use sendSetPasswordIdentityType instead.
For /api/user/forgot-password POST:
sendForgotPasswordEmail is deprecated. Use sendForgotPasswordMessage instead.
User Registration API
sendSetPasswordEmail is deprecated. Use sendSetPasswordIdentityType instead.
An upgrade to FusionAuth version 1.58.2 or 1.59.0 fails if the Default Admin Registration provided by FusionAuth form (shipped in 1.20.0) is renamed or deleted prior to the upgrade. If you are planning an upgrade to version 1.59.0, it is recommended that you upgrade to version 1.59.1. If upgrading to 1.59.1 does not resolve this, please contact support.
Resolved in version 1.59.1 via
#3153
.
Performing a user reindex occasionally results in an email, username, or phoneNumber, for a small fraction of users, to not be searchable via Elasticsearch/OpenSearch.
Resolved in version 1.61.0 via
#3186
.
Previewing the phone verification required, complete registration, passwordless theme templates shows a template error.
Resolved in version 1.60.0 via
#3148
.
When a Minimum Password Age is configured for the tenant, creating a user without a password results in an exception.
Resolved in version 1.61.1 via
#3247
.
A reconcile lambda could fail to set a value for an IdP linking strategy when the IdP’s value is null.
Resolved in version 1.63.0 via
#3237
.
This release adds support for phone number as a first-class identity type. A user can now have phone number as their sole identifier, use SMS-based passwordless login, and much more. Read on for more information on related features!
With support for phone number as a first-class identity type, phone number can now be used as the sole identity type for a user, allowing phone-only registration.
FusionAuth now supports Passwordless Authentication through SMS. Previously, a user was only able to use an email address for passwordless authentication.
Additional usage stats are collected for the use of grace periods with application refresh tokens, and for non-retrievable and expiring api keys.
When a messenger fails to deliver a message, FusionAuth now adds an event log for the error. This enhancements should help with troubleshooting message delivery issues.
Importing a password hash longer than 255 characters no longer fails. This limit was increased to 2048 characters.
Update copy for the first Enable SMS step. It’s using the word two instead of too.
The exp claim in the FusionAuth JWT can now be modified in a JWT Populate lambda, but only to a smaller value. This means you cannot extend the default lifetime of a JWT, however you can choose to shorten it. This allows for stricter JWT expirations to be applied dynamically based on user data or other information. Additionally, scope is now available to JWT Populate lambdas.
Passwords are now optional on users. This allows for passwordless-only and/or federated-only authentication, and simplifies the importing of users that don’t currently have passwords.
When using a generic messenger in interactive workflows, no error is shown to the user if the message delivery attempt returns a non-200 response code. The user should be alerted to the fact that something went wrong.
During the slow migration of a user using a generic or LDAP connector, the known device cookie is not created. If the new device email or a new device webhook is configured, FusionAuth sends a second new device email and/or new device webhook the next time the user logs in.
There are cases where we are not returning appropriate errors for invalid inputs to APIs. Errors with appropriate and descriptive messages should be returned.
A potential vulnerability was identified that could lead to unwanted access to protected resources via an injection attack. Addition protections were added to prevent this.
Updated the following dependencies:
- Upgrade
com.inversoft:inversoft-api-authentication0.30.0->0.30.2 - Upgrade
com.inversoft:inversoft-config0.9.13->0.10.0 - Upgrade
com.inversoft:inversoft-database0.10.2->0.10.3 - Upgrade
com.inversoft:inversoft-license4.8.0->4.8.1 - Upgrade
com.inversoft:inversoft-maintenance-mode0.23.1->0.23.3 - Upgrade
com.inversoft:inversoft-support0.14.1->0.14.2 - Upgrade
jakarta.mail:jakarta.mail-api2.1.2->2.1.3 - Upgrade
jakarta.activation:jakarta.activation-api2.1.2->2.1.3 - Upgrade
org.primeframework:prime-email0.21.0->0.21.1
Version 1.58.1 #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
An upgrade to FusionAuth version 1.58.2 or 1.59.0 fails if the Default Admin Registration provided by FusionAuth form (shipped in 1.20.0) is renamed or deleted prior to the upgrade. If you are planning an upgrade to version 1.58.1, it is recommended that you upgrade to version 1.58.3. If upgrading to 1.58.3 does not resolve this, please contact support.
Resolved in version 1.58.3 via
#3153
.
A race condition was identified in the 1.58.0 release that could affect a cluster of FusionAuth instances during the upgrade, preventing the upgrade from completing. This race condition has been addressed.
Version 1.58.2 #
An upgrade to FusionAuth version 1.58.2 or 1.59.0 fails if the Default Admin Registration provided by FusionAuth form (shipped in 1.20.0) is renamed or deleted prior to the upgrade. If you are planning an upgrade to version 1.58.2, it is recommended that you upgrade to version 1.58.3. If upgrading to 1.58.3 does not resolve this, please contact support.
Resolved in version 1.58.3 via
#3153
.
The SCIM create operation returns error code 400 (instead of 409) when both user.email and user.username are duplicated.
Resolved in version 1.63.0 via
#3149
.
The Add Webhook page and the Login Records report can show errors in some circumstances. These error conditions should be handled more gracefully.
Version 1.58.0 (Delegation Dolphin) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
After releasing FusionAuth version 1.58.0 we identified a race condition that could prevent an upgrade to version 1.58.0 from successfully completing in a clustered environment. We removed this release from distribution. If you happened to install version 1.58.0 during the brief time that it was available, it is recommended that you upgrade to version 1.58.3.
Resolved in version 1.58.1 via
#3124
.
An upgrade to FusionAuth version 1.58.2 or 1.59.0 fails if the Default Admin Registration provided by FusionAuth form (shipped in 1.20.0) is renamed or deleted prior to the upgrade. If you are planning an upgrade to version 1.58.0, it is recommended that you upgrade to version 1.58.3. If upgrading to 1.58.3 does not resolve this, please contact support.
Resolved in version 1.58.3 via
#3153
.
FusionAuth now includes a Tenant manager application. The Tenant Manager application is used for managing users within a single FusionAuth tenant, and you can grant access to this application to ordinary users (i.e. not FusionAuth admins). This is useful for delegating user administration to users in your, or your customers’ organizations.
FusionAuth introduces Universal Applications! Formerly, in FusionAuth an application belonged to one and only one tenant. This can be cumbersome when you want to expose your application in many tenants, as you need to create an application record in each tenant. With universal applications, a single application entry in FusionAuth can be used in all tenants.
FusionAuth was not handling a malformed Set-Cookie response header from another identity provider gracefully. The parsing done by FusionAuth was updated to handle this scenario better.
Thanks to @konvergence !
Searching for entities using the Entity Search API can produce results that have duplicate or missing items on response pages when a sort field isn’t specified. Results should have an implicit ordering when no sort field is specified.
In certain circumstances, the FusionAuth admin UI and self-service account applications can fail to refresh an expired access token, causing a user to be logged out.
Calling the Search Reindex API while a reindex is in progress yields a 500 error. This API now returns a 400 status if a reindex operation is already running.
Using PATCH calls from HTTPConnect in a lambda fails in some cases. PATCH should be generally supported.
Interacting with a date picker can generate errors in the broswer’s console. FusionAuth should handle these errors more gracefully.
A few forms in the FusionAuth admin UI are setting the input focus in nonstandard ways. These include the setup wizard, the add API key view, and the edit API key view.
When handling an HTTP request with a content type of multipart/*, FusionAuth now more accurately returns an HTTP status code of 422 if the request contains a file and a file upload was not expected for the intended HTTP request path.
Enhance developer feedback when rejecting unexpected multipart/* encoded requests containing files. Added additional file management configuration to allow for a per request persistence policy.
Version 1.57.1 #
Only for users who have manually installed fusionauth using the RPM or Debian packages: when upgrading from releases prior to 1.57.1, you must ensure that both the fusionauth-app and fusionauth-search services are stopped. To do this, run the following command:
sudo systemctl stop fusionauth-app fusionauth-searchThe upgrade will run a usermod command to modify the fusionauth user account so both processes must be stopped in order for the upgrade to succeed.
Fixed a bug introduced in version 1.56.0 that caused FusionAuth to fail to start after being installed using RPM and Debian packages.
Version 1.57.0 (Webhook Wombat) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Two enhancements were added to the configuration for controlling webhook event logging behavior:
- Webhook event logging can now be turned off, which is the default for new FusionAuth installations. Previously, you were only able to reduce the retention period to a very small window, however in this case the logging and log management would still occur.
- Deleting webhook event logs according to a configured retention period is now enabled by default. Previously, it was disabled by default.
Webhook event log searching was improved by setting a default 1-hour search window when no duration parameters are provided. Webhook event logging can create a large number of log records, and the performance of unbounded searches scaled roughly linearly with the number of log records, leading to less performant searches as the data size increased.
The process that applies webhook event log retention rules is getting some performance improvements. This is a background process that generally does not impact performance but could consume a disproportionate amount of system resources when under heavy load.
When prompted for how you heard about FusionAuth in the setup wizard, you may now supply “ChatGPT/LLMs/AI” as a standard response.
The process for deleting webhook event logs according to retention rules was formerly turned off by default, causing all webhook event log entries to be retained forever. This will now be enabled by default in new FusionAuth installations. Existing installations that are being upgraded will retain their former setting.
The client libraries were missing PATCH support for Entities. Support for this operation has been added.
Client libraries are missing full support for PUT and PATCH operations for entity types, forms, form fields, IP ACLs, webhooks, and families. This fix adds support for these.
Version 1.56.0 (SSO Snake) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Very large webhook event log volumes could impact performance during log cleaning operations. If you are currently using a version of FusionAuth earlier than 1.53.0 and use webhooks, we recommend upgrading to version 1.57.0.
FusionAuth now allows you to create non-retrievable API keys. If you select this option when creating a key, the key will only be visible during creation and not thereafter. Make a copy and keep it secure!
Allow the post-login bootstrapping of a FusionAuth SSO session using an access token. This can be useful if you’ve authenticated a user outside of an OAuth workflow, or if you’ve lost access to the SSO session cookie.
FusionAuth returns a 500 when supplying a malformed application Id in an IdP-initiated SAML login, making it hard to troubleshoot. The error should be handled more gracefully, and a more meaningful error message should be returned.
The Application > Multi-Factor > SMS Template tooltip incorrectly referenced an email template instead of an SMS template. Updated this to reference the correct template type.
Thanks to @JCelentano !
The passwordless API returns a 500 error when a non-existent application Id is provided. This should return a correct response code and meaningful error.
When posting an invalid grant type to the /oauth2/token endpoint, the list of supported grant types in the error message is missing the device grant type
Users are being prompted to re-submit a form when first logging into a new deployment using Firefox. The request should proceed on the first attempt.
When creating an entity grant for a user using the API, some invalid payloads will yield a 500 error. A more meaningful error should be returned.
FusionAuth shows a notification for getting a free license even after a license has been installed. This notification should disappear after a FusionAuth instance has been licensed.
Executing a manual system reset in development mode with a valid kickstart file fails. This should work as expected.
Supplying a malformed license key to Reactor is producing a generic error. A specific error would be more helpful.
The Daily Active Users report is missing data from the most recent day. The report should include this data.
After setting an application-level email verification template, the tenant-level template is still being used. The application-level setting should be honored.
The standard first name field intended for use in user edit forms has an incorrect name in MySQL installations, which is preventing it from showing up in the user edit form
The webhook event log can return fewer records per page than requested with the Results per page dropdown, even when more results are available. Ensure that the number of results equals the requested number.
A nondescript error is returned when trying to save system settings via the FusionAuth admin application. It is still possible to update system settings using the API.
The simple theme editor’s right-hand panel did not constrain content properly, allowing content to spill over the bottom border.
Updated the following dependencies:
- Upgrade
ch.qos.logback:logback-core1.5.6->1.5.16 - Upgrade
org.primeframework:prime-mvc4.27.0->4.29.2 - Upgrade
org.graalvm.polyglot:polyglot22.3.3->24.1.2 - Upgrade
org.graalvm.js:js22.3.3->24.1.2 - Upgrade
com.inversoft:inversoft-cache0.6.0->0.6.1 - Upgrade
com.inversoft:inversoft-api-authentication0.29.0->0.30.0
Version 1.55.1 (Holiday Hippo) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Increased the length of the refresh token from 54 to 64 characters. If you hardcode a specific length, you must account for this change.
Very large webhook event log volumes could impact performance during log cleaning operations. If you are currently using a version of FusionAuth earlier than 1.53.0 and use webhooks, we recommend upgrading to version 1.57.0.
You can’t save the System Settings in the admin UI.
Resolved in version 1.56.0 via
#2970
.
Allow for the sending of usage stats. Enabling usage stats allow FusionAuth to better understand how our users use our product. Usage data does not contain configuration, user data or any information that can be used to identity a company or individual. This information will help us know where we need to invest in new features and enhancements.
If you are using FusionAuth Cloud, this feature will be enabled by default and cannot be disabled.
The rate limit error message was added to the default theme messages to make it more obvious that it is customizable. The [RateLimitedException] message key was previously supported, but not easily discoverable.
Thanks to @juansedo !
Add an additional refresh token revocation policy to revoke a one-time use token on reuse. This policy helps protect against token theft by revoking the token if it were to be stolen and reused.
FusionAuth can now accept encrypted SAML assertions when acting as a SAML service provider. Support for encrypted assertions when FusionAuth is the SAML identity provider was added in version 1.47.0 .
API keys can now be optionally set to expire at a given date/time. An expired key will not be deleted but will cause a 401 response to be returned when used. The expiration value can be edited to allow the expiration to be extended.
Additional parameters are now accepted on the hosted backend /app/login and /app/registration endpoints. This means you can pass things like login_hint, idp_hint, and analytics parameters that will be available on the respective OAuth hosted pages.
The First-time Setup wizard was improved with more descriptive and consistent text around using a Community plan license.
Improved handling of a SAML RelayState in an IdP-initiated login. Previously, FusionAuth would only look for a valid ACS URL in the RelayState. Now, if the ACS URL can be resolved via other means, the RelayState value will be preserved and passed as a parameter in the final call to the ACS URL.
Added support for providing connect and read timeout values when making a fetch call from a lambda.
You can now configure a grace period for single-use refresh tokens, during which time the previous token will remain active. This is required for various use cases, including when clustered OAuth clients employ eventual consistency when synchronizing a refresh token, and some nodes of a client can find themselves with an out-of-date refresh token.
The confirmation page shown when users are completing verification and other workflows shows a FreeMarker error when some cookies are unavailable. This could happen when cookies are deleted by a user, removed by a proxy, or when running in an iframe.
When an OAuth workflow ends in redirecting with an error to a redirect_uri that contains query parameters, the resulting URL is being built incorrectly.
The SCIM ResourceTypes endpoint is returning resource type URLs with incorrect paths. The endpoint is returning a path prefix of /api/scim/v2/ when it should be /api/scim/resource/v2/.
Thanks to @runely !
The OAuth scopes consent form has text that cannot be localized. Hosted pages should be fully localizable for users.
When viewing user data in the Manage user view, a boolean value is always shown as -, regardless of its actual value.
Thanks to @rod-martens-alida !
The JWT populate lambda is not executed when a user is logged in using the login API, but only when that user does not have a registration for the application named in the API call. This could lead to inconsistent behavior between a login using the hosted OAuth pages and a login using the login API.
The PHP client library is not handling libcurl errors gracefully, making it difficult to troubleshoot integration problems when using this library. See the client library issue for more details.
When downloading login records from System -> Login Records , the exported file format contains a place for zip code, however the zip code values are not being populated in the export.
The POST /api/user/registration call is documented as returning a refreshTokenId, but this value is not being returned on the response.
Thanks to @cezarneaga !
When editing a user’s password in the FusionAuth admin UI after a new hashing scheme is set on the tenant, the password is not re-hashed using the new scheme. The re-hashing occurs as expected on a login or when the user changes their own password.
Correct validation for configured authorized redirect URLs when using wild card support has been enabled.
Add additional validation of an authorizing JWT when using the Issue JWT API (/api/jwt/issue).
Added tests to verify correct handing of wildcards in URLs in various places in the application. This change does not contain any functional changes.
Better exception handling in extreme edge cases related to licensing of Breached Password Detection.
Version 1.54.0 (Express Free Trial (EFT) Elephant) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Very large webhook event log volumes could impact performance during log cleaning operations. If you are currently using a version of FusionAuth earlier than 1.53.0 and use webhooks, we recommend upgrading to version 1.57.0.
The SCIM Groups API does not properly perform atomic updates to groups and members. This can lead to consistency issues when multiple SCIM update requests are simultaneously processed requiring membership changes.
A vulnerability was discovered in the FusionAuth hosted pages. Under specific application configurations, and with insufficient authorization validation being performed on an access token, a malicious user could bypass required steps in post-authentication workflows, allowing unauthorized access to protected resources.
This vulnerability was introduced in version 1.41.0. It is recommended that you upgrade to version 1.54.0 at your earliest convenience.
Version 1.53.3 #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
A fix for FusionAuth SSO session management with external identity providers requires a change to Google IdP usage.
Very large webhook event log volumes could impact performance during log cleaning operations. If you are currently using a version of FusionAuth earlier than 1.53.0 and use webhooks, we recommend upgrading to version 1.57.0.
In order to better protect 3rd party logins via SAML v2, OpenID Connect, and other 3rd party identity providers, a CSRF (cross site request forgery) token was added in version 1.47.0. This token was not being used when all identity providers configured for the requested client_id were also configured to use managed domains, and the authorize request also contained the idp_hint request parameter.
In this specific configuration, because the token was not being utilized, the login workflow would fail with the error The request origin could not be verified. Unable to complete this login request.
When using the hosted login pages, the end user is generally shown a checkbox named Keep me signed in, which indicates whether the user wishes to create an SSO session after logging in.
When using an external identity provider along with an idp_hint or login_hint parameter, a user may be taken directly to the identity provider, bypassing the page with this checkbox. In this case, the user will not have the option of making a choice to establish or not establish an SSO session.
This behavior has been improved in order to provide additional control on how the SSO session should be created.
FusionAuth will now use the following order of operations in this non-interactive workflow to decide if the SSO session should be created:
- The user’s previous selection, if available. This past choice will have been stored in an HTTP only cookie.
- The optionally supplied
rememberDevicequery parameter.
In the event that the user has never seen the login page, the value of the rememberDevice query parameter will be the deciding factor. A value of true indicates that an SSO session should be created and a value of false indicates that an SSO session should not be created. If this parameter is omitted, the default behavior will be to create the SSO session.
For more information on using the idp_hint and login_hint parameters, see the Identity Providers Overview documentation.
When using the login validation lambda with a 3rd party identity provider such as OpenID Connect, when the validation lambda causes the login to fail, the end user will not see the specific error returned by the lambda. Instead the user will see the following generic error (unless this message has been modified in a theme):
A validation error occurred during the login attempt. An event log was created for the administrator to review.
The reason for this generic message is that in most cases if FusionAuth cannot complete a login request to a 3rd party we do not want to show the end user the technical reason. When a login validation lambda is the cause of the login failure, we do intend to the show the end user a more specific message. This issue has been corrected and if the login validation lambda was the cause of the failure, the event log is created when the identity provider has enabled debug.
Version 1.53.2 #
Very large webhook event log volumes could impact performance during log cleaning operations. If you are currently using a version of FusionAuth earlier than 1.53.0 and use webhooks, we recommend upgrading to version 1.57.0.
The kickstart.success event may not fire correctly after Kickstart completes due to a timing issue when creating the webhook in your Kickstart definition.
Navigating to the System -> About page in the FusionAuth admin UI may fail to render if you start up without an internet connection.
Navigating to the System -> Webhook Log in the FusionAuth admin UI may display a general error and fail to return search results if there are any events of type user.login.failed displayed.
You may work around this issue by selecting a specific event type, or narrowing the scope of the results by using any of the additional search criteria found in the Advanced search controls.
Version 1.53.1 #
Very large webhook event log volumes could impact performance during log cleaning operations. If you are currently using a version of FusionAuth earlier than 1.53.0 and use webhooks, we recommend upgrading to version 1.57.0.
A user may fail to enroll a new Passkey (WebAuthn credential) used for reauthentication during a login workflow. Previously configured Passkeys should continue to work as expected. This bug was introduced in version 1.53.0.
Version 1.53.0 (Lambda Llama) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
This release ends support for the Docker image for the linux/arm/v7 architecture.
This deprecation was announced in version 1.52.0, and while we had planned to continue publishing this build for the next few releases, Java 21 is not being built for this architecture which means we can no longer support it. Please see thread in Adoptium support or the Adoptium release status for additional details.
Very large webhook event log volumes could impact performance during log cleaning operations. If you are currently using a version of FusionAuth earlier than 1.53.0 and use webhooks, we recommend upgrading to version 1.57.0.
A user may fail to enroll a new Passkey (WebAuthn credential) used for reauthentication during a login workflow. Previously configured Passkeys should continue to work as expected.
Resolved in version 1.53.1 via
#2861
.
FusionAuth’s hosted login pages no longer create an SSO session when signing in using an external IdP.
Currently, FusionAuth’s Webhook Event Log does not set a retention policy by default and may grow too large in volume which can result in an impact to performance when searching Webhook Event Logs. See issue for workaround.
Introduced the Webhook Event Log, which contains a record of each triggered event and the corresponding attempts to deliver the event to each configured webhook. This log will be useful for monitoring events that have succeeded or failed to be received by your configured webhooks. The attempt log will provide you with timing, the status code returned by your webhook, and other metadata.
The longer term goal of this feature will be to allow events to be retried when one or more webhooks failed to receive the event, or for some reason was unable to process the event. This is the first step towards that goal. You will find this new feature in the Admin UI under System -> Webhook Log .
For more information, see the API reference.
Introduced the Login Validation Lambda, which can prevent login based on information in a user record, an application registration, and more. This allows the notion of a valid login to be extended beyond the standard items such as credential checks and MFA.
Introduced dropdown menus for actions in Admin UI tables. The number of buttons on some pages grew to the point that it was becoming difficult to differentiate between the buttons, and was also visually cluttering up the view. We hope you like it!
When using the start and end times in the Advanced search criteria in the Admin UI for the Audit Log, Event Log, and Login Records the selected values were incorrectly adjusted. This bug was introduced in version 1.52.0.
Thanks to @runely !
An SSO TTL of 0 seconds or a very small number may make it impossible to complete login using hosted login pages. To work around this issue in prior versions, increase the TTL to something larger than 0, ideally at least 30 seconds.
The potential for this issue has existed for some time, but some changes made in version 1.50.0 made it more likely for this to occur.
Improved database connection resiliency under heavy load by separating interactive and non-interactive tasks into separate connection pools. This change should improve performance and scalability.
If you self-host, you may see an increase in the number of open connections to the relational database from FusionAuth. Previously each FusionAuth node would open 10 connections. Starting in this release, this number will increase to a minimum of 21, and can scale to a maximum of 50. These numbers are subject to change in future releases.
To calculate the total number of connections to the relational database, multiple these numbers by the number of nodes in your cluster. If you have a 3 node FusionAuth cluster, the minimum number of connections open to your database will be 63 with a maximum of 150.
Version 1.52.1 #
Version 1.52.0 (Passkey Platypus) #
User Registrations API
When using the User Registrations API, the data field for the FusionAuth application with Id 3c219e58-ed0e-4b18-ad48-f4f92793ae32 may now contain a preferences object. This object is reserved and should not be modified.
As part of our move to the GraalVM Java distribution, we plan to discontinue publishing Docker images for the following architectures which GraalVM does not support:
linux/arm/v7linux/ppc64lelinux/s390x
We do not believe these architectures are actively being used.
We plan to stop publishing Docker images for these architectures at the end of 2024. If you are actively using any of these architectures, please let us know.
Air-gapped instances of FusionAuth must complete the following steps to preserve access to premium features:
- Navigate to the Plan page in your FusionAuth account
- Pick up your license key and newly generated license text
- Navigate to
Reactorin your Admin UI on your FusionAuth instance - Decommission your license
- Reactivate FusionAuth Reactor using the license key and text
For more information about activating and deactivating your license, see the Licensing documentation.
Group Member API
The user field on the Group Member API responses is being deprecated.
This field was not documented, and has never been populated on the API response. However, because this field was generated and part of the domain in FusionAuth client libraries, we are providing a deprecation notice in case this may affect your integration. Client library users should remove references at your earliest convenience.
Removal of this field is targeted for the end of 2024.
A new date picker element with enhanced styling and mobile support is now available.
In the Admin UI, Advanced search criteria start and end times for the Audit Log, Event Log and Login Records incorrectly adjusted the selected value.
Introduced the free Community license, which adds WebAuthn (Passkeys) to the Community plan. All Community license users will now find a license key on their FusionAuth account plan page.
Added the new health check endpoint (/api/health) that was added in 1.51.1 to the client libraries.
Clicking the toggle checkbox element in the admin UI quickly caused the checkbox state to be inverted. This can be easily fixed by refreshing the page. You should now be able to click as fast as you want!
Attempting to sort API keys by key value in the admin UI by clicking the key value header resulted in an error.
Attempting to create a tenant-scoped API key with an invalid tenantId failed with a 500 status code. This error has been corrected, and an appropriate validation error is now returned.
The date picker used for birthdates and custom date fields was not styled correctly based upon the selected theme. The date picker has been changed to the browser-default date picker, which should work much better on mobile devices. This picker style will now be used in themed hosted login pages, as well as the admin UI for searching a date range or selecting a birthdate. This change should not affect any existing advanced theme that may still use the older style date picker. See theme upgrade notes for details on updating an existing advanced theme to use this new option.
Adding custom message keys to theme messages using the Admin UI failed to persist these changed messages. The UI for editing messages in the simple theme editor has also been improved to make it easier to understand which messages have been modified.
When the Browser preview button was used to open a new tab for simple themes in the Admin UI, the page would render without any applied CSS when using the Firefox browser. Sorry Firefox users, we ask for your forgiveness.
The default orderBy parameter value for the Group Member Search API did not provide a consistent ordering of results because the default sort was on insertInstant ASC which may not always be unique. This API is used by the SCIM Groups Resource API which then can cause inconsistent results for the SCIM client. The default orderBy is now set to insertInstant ASC, userId ASC, groupId ASC to ensure a consistent result between API calls.
When using the simple theme editor in the admin UI, the color picker did not always render next to the input field. The color picker will now always correctly render adjacent to the input field you select.
Newlines and tabs were not rendered when viewing audit entries in the view dialog from the admin UI. If you use new lines or tabs in your audit log messages, you may now enjoy viewing them in all their intended glory!
It sometimes required two Submit button clicks to exit interactive maintenance mode to upgrade your database schema. We are sorry if you had to click the Submit button twice.
Query parameter values containing an equals sign (=) were not parsed correctly. Typically, query parameter values URL encode equals signs as %3D, but since there are legal uses of the un-encoded character, we have added support for (=).
When detecting impossible travel or similarly suspicious login events, it is possible that not all device trust cookies were correctly revoked. These are now automatically revoked.
Removed an unused template from the self-service login workflow. In practice this page was never rendered and was not included in the theme configuration. This change should not impact anyone using themes.
Updated the following dependencies:
- Upgrade
org.freemarker:freemarker2.3.32->2.3.33 - Upgrade
org.primeframework:prime-mvc4.22.7->4.22.12 - Upgrade
org.apache.kafka:kafka-clients3.6.1->3.7.1 - Upgrade
com.fasterxml.jackson.*2.15.4->2.17.2 - Upgrade base docker image
ubuntu:jammy (22.04)->ubuntu:noble (24.04)
Version 1.51.2 #
Version 1.51.1 #
Introduced the Health API, /api/health. Previously, the /api/status endpoint was the best option for performing health checks. The Status API may not be ideal for all use cases because it returns a JSON body and the status code is used to indicate the status of various health checks that may not be valuable by a load balancer to indicate if requests should be routed to this node. This new endpoint provides a binary indication of the healthiness or unhealthiness of a FusionAuth instance by only returning a 200 or 500 status code w/out a JSON response. This new API also runs fewer health checks and may perform better than the Status API.
An HTTP request sent to FusionAuth with non-ASCII characters in request header values caused the request to be rejected and caused the connection to be closed without a response. Generally speaking values outside of the ASCII character set are not allowed, but in practice they may be used, and so these values are now treated as opaque and ignored by the HTTP request parser.
Fixed a typo on the Tenant edit page in the description of the user.password.reset.send event.
The SCIM API did not properly handle reading, creating, and updating groups with more than one hundred memberships. Responses containing groups with more than one hundred memberships only returned the first one hundred. Create and update operations only created or updated one hundred, deleting the remainder. This defect also caused the FusionAuth event for group.member.update and group.member.update.complete to contain the same truncated list of members.
Version 1.51.0 (Theming Toucan) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Introduced WYSIWYG theme editing with Simple Themes, along with a visual editor. This first version of visual theme editing allows you to change the basic styling of FusionAuth hosted pages, including logos and background images, colors, fonts, and more.
In version 1.45.0 we added a hosted OAuth backend capability, allowing a developer to write a front end-only application, but still take advantage of an authorization code grant workflow by leveraging the backend provided by FusionAuth. Multi-segment domain suffixes (e.g. .co.uk) are not handled correctly by this hosted backend when setting the domain on cookies. Cookie domains are now set properly.
A SAML login request that is missing a Content-Type header yields a cryptic error message. A more meaningful error message is now provided. Additionally, sending a binding parameter would lead to an error message, when this parameter is not one we process. We now ignore this parameter if it is provided.
A SMS two factor messages template can be set at the Tenant level and should be overridable at the Application level. When a template is set at the Application level it is not being honored and the Tenant-level template is always used. Application overrides of SMS two-factor templates are now used correctly.
Updated the following dependencies:
- Upgrade
org.graalvm.sdk:*:22.3.3toorg.graalvm.polyglot:*:23.1.2 - Upgrade
org.graalvm.js:js22.3.3to23.0.3 - Upgrade
io.fusionauth:java-http0.3.2to0.3.4
Version 1.50.1 #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Fixes usability items related to the First Time Setup wizard (introduced in 1.50.0):
- Items related to the first time setup wizard were shown after upgrades, when the intent was to only show them for new installations. These are now only being shown for unconfigured FusionAuth instances.
- The First Time Setup summary page displayed sample configuration for various quickstarts. The configuration for the React quickstart corresponded to a previous version of the quickstart and was incompatible with the current version. The React quickstart configuration is now formatted for the current quickstart version.
Version 1.50.0 (Scopes Salamander) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
The new consent prompt themed page requires the scopeConsentField macro and resolveScopeMessaging function to be defined in the Helpers template in order to render scope consent form fields. These must be added to a custom theme in order for it to function.
This release makes significant changes to the default behavior of new Applications with regard to scopes in OAuth workflows.
The database migration will update existing Applications to behave in a backwards compatible manner.
See the OAuth Scopes documentation for more information, in particular the Relationship, Unknown scope policy, and Scope handling policy configurations.
If you are using an iframe to access the FusionAuth hosted login pages, the src must use the same domain as the FusionAuth pages.
FusionAuth uses cookies to manage user state with the SameSite attribute set to Lax or Strict. Browsers will block Set-Cookie headers on cross-domain requests.
This release introduces a new redirect into the OAuth flows to /oauth2/consent as part of the OAuth Scopes
feature. This redirect will occur during each browser-based interactive OAuth workflow. Prior to this version it was possible to complete an OAuth code grant
flow without cookies being set as long as there were no additional redirects to FusionAuth before the final redirect to the configured
redirect_url . As a result it did not matter if the Set-Cookie headers were blocked. The redirect with the code would still work.
However, in this version the browser will not be able to send the FusionAuth cookies required to maintain user state along with the redirect to
/oauth2/consent and the login flow will fail. The user will be redirected back to /oauth2/authorize and will be unable to log in.
The /oauth2/userinfo endpoint now requires the aud claim to be present on the provided access token, allowing for tighter compliance with the OIDC spec. See the UserInfo endpoint for more detail.
If you are not using OAuth, and your JWT does not contain the aud claim, consider using the JWT validate API instead.
JWT authentication for the /api/user API
This functionality will be removed in a future release.
If you are using this API with JWT authentication, you will need to modify your integration to use the /oauth2/userinfo endpoint if you have obtained your JWT using an OAuth2 grant, or authenticate the request to the User API using an API key.
Removal of this authentication type is targeted for the end of 2024.
An SSO TTL of 0 seconds or a very small number may make it impossible to complete login using hosted login pages. To work around this issue, increase the TTL to something larger than 0, ideally at least 30 seconds.
There was the potential for an error in the setup wizard if the timezone was not set on the machine running the browser. This has been corrected.
Resolved in version 1.62.1 via
#3290
.
Custom OAuth scopes are now supported for applications. Custom OAuth scopes come along with a number of related features, including support for third-party applications, themeable user consent, and much more.
See the API docs and OAuth Scopes documentation for more detail.
Thanks to @badaz !
Applications may now be designated as third-party applications. In addition to the prompting for authorization that comes with the Custom OAuth Scopes feature (see above), limitations are being added to how third-party applications may interact with FusionAuth.
Introduced UserInfo Populate Lambda, which can customize the UserInfo response for an application.
Thanks to @themobi !
Added a new, optional First Time Setup wizard, which guides a developer through the basic setup needed to integrate their first application. After installing FusionAuth, you’ll be able to access this from the main admin dashboard, as well as from the top of the left hand navigation.
Added a maximum password length of 256 characters in the tenant password policy. This decision was made to strike a balance between allowing very secure passwords and maintaining acceptable performance when using a large number of hash iterations.
Added locale and timezone information to the Oauth UserInfo endpoint.
Thanks to @soullivaneuh !
Applications now offer an Unknown Scope Policy. This can be used to enhance security by rejected or removing unrecognized scopes during an OAuth workflow. See the application Scopes tab for more detail.
The Refresh Token Grant request now supports requesting a subset of the original scopes. Previously, the request responded with an invalid_scope OAuth error.
Applications now have a new Scope Handling Policy. The Strict option provides behaviors that are more compliant with the OIDC specification, while the Compatibility option provides backwards-compatible behavior. Specifically, Strict mode limits information in access tokens and populates Id tokens and UserInfo responses based on the requested OAuth scopes. This option also restricts the UserInfo endpoint to accepting only access tokens containing the openid scope.
New applications will default to the Strict option. If your integration requires the Compatibility policy because you need backwards compatible behavior, please specify that option when creating the application.
For more information, see the Scope handling policy documentation.
Thanks to @awoodobvio !
Added support for optional expansion of the application.roles and application.scopes properties on the Application Search API.
This change is backwards compatible, but you may optionally request the Search API omit these properties on the response which may improve performance. See the Application Search API for additional details on using the expand request parameter, and the expandable response value.
The /oauth2/device/user-code endpoint now returns the scope parameter value that should be used in the interactive portion of the Device Code Grant workflow. See Device User Code for more detail.
The bcrypt algorithm now limits passwords to 50 characters. This restriction is due to limitations in the bcrypt algorithm. This limit will be enforced even when the tenant policy allows for a maximum password length greater than 50.
There are several scenarios where implicit email verification can occur. They are, during registration verification, password change, passwordless authentication, and MFA code validation. In these cases, a configured email verification email was not being sent, and the email verification event was not being generated. The email and event will both be triggered during implicit verification now.
Thanks to @ashutoshningot and @mou !
When configuring MFA for an application, the Trust policy selector was not shown when MFA is required for the application, but only shown when MFA enabled for optional use. The selector is now shown when the On login policy is set to either Enabled or Required.
When using FusionAuth behind a proxy, a missing X-Forwarded-Proto header could incorrectly cause a warning of a missing X-Forwarded-Port header. These warnings are now reported accurately. Additionally, FusionAuth will now be smarter about determining the forwarded port, taking it from one of multiple sources including X-Forwarded-Host, X-Forwarded-Port, or inferring it from X-Forwarded-Proto. This should make FusionAuth work with more proxies out of the box without additional configuration.
When authentication with an identity provider fails due to misconfiguration, and a user falls back to logging in with a username and password, the authenticationType reported by FusionAuth is for the original identity provider despite the user having logged in with a username and password. FusionAuth now correctly reports the authentication type as PASSWORD.
Thanks to @charlesericjs !
Updated the following dependencies:
- Upgrade
ch.qos.logback:logback-*1.4.14to1.5.6 - Upgrade
com.fasterxml.jackson.*2.15.3to2.15.4 - Upgrade
io.fusionauth:java-http0.2.10to0.3.2 - Upgrade
org.mybatis:mybatis3.5.15to3.5.16 - Upgrade
org.primeframework:prime-mvc4.22.0to4.22.7 - Upgrade
org.postgresql:postgresql42.7.2to42.7.3 - Upgrade
org.slf4j:slf4j-api2.0.7to2.0.13
Version 1.49.2 #
The search index default refresh interval may now be configured. In general this should not be modified, but the configuration option has been added and will default to 1s. The new configuration is named fusionauth-app.search.default-refresh-interval. For more information, see the Configuration reference.
Added email and registration verification Ids to the User and Registration API responses when available for consistency and to better enable out of band management of these verification workflows.
When configured to use an email verification strategy of Form Field without setting the unverified behavior to Gated the verification strategy was always functionally using Clickable Link which means the user would receive an email with a clickable URL instead of a short code.
With this fix, you may now use an unverified behavior of Allow with a verification strategy of Form Field. When you configure FusionAuth this way, it is assumed that you will be handling the verification process in your own application.
When using the Bulk User Import API /api/user/import the search index refresh interval is modified to improve performance. Specifically the index refresh_interval is set equal to -1. When this API is called in parallel, it is possible that this index setting is not reset and will stay configured as -1. The symptom of this error is that changes to the index are not reflected by the Search API and the search results may no longer be accurate.
When Advanced Threat Detection is enabled, an IP location database will be downloaded and used for IP address resolution. For these licensed customers, it is possible that a corrupted IP location database was downloaded and not correctly discarded and as a result the IP address location data may not be available.
You may have been impacted if you were using version 1.47.0 or later, between February 1st, 2024 and February 23rd, 2024. The observable symptom would be that your license status for the Advanced Threat Detection will show Pending instead of Active.
This condition has already been corrected for FusionAuth Cloud. If you are self-hosting FusionAuth, upgrading will correct this condition. If you have a support contract and believe you are currently in this state and are not able to upgrade, please reach out to support for assistance.
Version 1.49.1 (Bugfix Beluga) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
In prior versions of FusionAuth, if a new themed page was added, until you upgraded your theme by adding this new page, the end user may be shown a page indicate the page was missing. This was shown because it was assumed that a new page would only be shown for a new feature that had not been enabled, and this page would only ever been seen during development. In this release added a new page that may be shown without any additional features being enabled. For this reason, we have removed this place holder page, and we will always fall back to the default theme when a page is missing. You will still want to upgrade your theme as part of your upgrade process, but this change will ensure that we will not break any new or existing workflows when a new page is added.
Link checkers are great. They aim to protect end users from malicious links and phishing attacks. However, they wreak havoc and pain on identity providers using email based workflows to complete passwordless login, or email verification. And FusionAuth is one of those identity providers!
FusionAuth has employed various tactics over the years to stay ahead of the techniques used by these 3rd party tools. Their techniques continue to evolve making it difficult or impossible to know the difference between a link checker and a real human interacting with the link.
A new confirmation page has been added that is intended to protect the user, and make our email workflows immune to link checkers.
For example, when a user initiates a request such as passwordless login, and then completes the request in the same browser, the user will not observe any change. If the user completes the request on a different browser, or completes a request they did not initiate - such as clicking on an email verification link sent when a use is provisioned by an administrator, the user will be prompted to confirm they wish to complete the request.
If you are using a custom theme, you will want to upgrade your theme to include this new page. Until you complete this upgrade, the default theme will be used for this new page. In the FusionAuth admin UI, the theme page will be named Confirmation required.
Ensured the Login API never fails validation due to a timing issue with an Application cache. This rarely affects runtime, but this can be useful for testing where you may create an application and immediately perform a login.
Added a trusted proxy configuration to the System Configuration. This new configuration allows you to define one or more trusted upstream proxies using an IP address, or range of addresses using a CIDR notation.
A client IP address will be captured in a login record, sent to webhooks, and used to provide access when IP ACLs are configured. To correctly resolve the client IP address, we often will need to use the X-Forwarded-For request header.
This header is modified when it passes through a proxy. In order to trust the contents of this header and resolve the client IP address, FusionAuth must know if it can trust all proxies implicitly, or to only trust those that are explicitly configured as trusted. The change is to optionally configure FusionAuth to no longer trust any upstream proxy that is not explicitly configured as trusted.
This new configuration can be found in the FusionAuth admin UI by navigating to Settings > System > Networking, or on the System Configuration API.
The default permissions in AWS RDS PostgreSQL version 15.2 caused the initial configuration of FusionAuth to fail to create the tables required to complete the initial configuration. The required permissions are now being explicitly granted, and the errors reported back to the user have been improved.
If a user starts a Forgot Password flow, and clicks on a change password link in an email after the link has expired, the redirect back to the original Forgot Password form will not include the locale parameter. This fix ensures that a locale parameter, when present in the change password link, is preserved through this workflow and allows for localization to remain consistent.
When setting up a Facebook IdP, an option was provided in the admin UI to select Use vendor JavaScript as a Login method. This option is not applicable and has been removed.
Fixed the SCIM filter when filtering on userName eq {username} to always return a single result.
The LinkedIn APIs have changed, and the LinkedIn IdP no longer worked for new LinkedIn applications. This update allows FusionAuth to work with new and legacy LinkedIn applications.
The FusionAuth TypeScript client library was incorrectly encoding arrays values into query parameters. This bug was preventing a few specific search queries from working correctly.
When using MySQL, the default Admin user form was missing the First name field. The field could be added to the form, but was missing in the default version.
When an invalid Tenant Id was provided on the .well-known/openid-configuration the default configuration was returned. This has been updated to return a 404 status code.
When creating a User with a group membership with a specified member Id that was already in use, the requested completed w/out a validation error and the membership was ignored. The API now correctly validates this condition and will return a 400 and a JSON response.
When retrieving all refresh tokens for a user, the response may contain the user’s SSO token. The SSO token can be identified because it does not contain an applicationId and it may not be refreshed. Validation has been improved when using the Refresh Grant, or the Refresh API to ensure FusionAuth correctly fails indicating the token is invalid and may not be refreshed.
A regression was introduced in version 1.47.0 to the Change Password themed page. The issue is that the passwordValidationRules variable may be null on the first render. If you had been referencing this field in your template, the render may fail.
The Identity Provider Link API states that a token parameter can be accepted during a create. When provided, the token was not being persisted on the link.
When viewing a User’s Consents in the FusionAuth admin UI, if one or more of the consents have been granted by another user that is not a member of their family, an error is shown in the Given by column.
When you have configured the JWT signing key with the ES512 algorithm, the generated signature may be intermittently invalid. This means that JWTs may seemingly fail to validate randomly and you may think you are crazy. You are not crazy. If you are using this signing algorithm, it is recommended you use a different algorithm until you are able to upgrade.
SCIM PATCH requests may fail to parse if an op path value contains a named schema containing a . (dot). This parsing error has been corrected.
For example: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department
When an SCIM create or update request contains schemas for which no properties exist, subsequent PATCH requests to those schema namespaces may fail.
For example, if the initial request contains a schema urn:ietf:params:scim:schemas:extension:enterprise:2.0:User without any properties, the default lambda function used to map this request to FusionAuth was not persisting this schema namespace. Then a subsequent PATCH request to add a member to that namespace such as urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department would fail.
The default SCIM request converter (Lambda function) has been updated to correct this behavior.
Disabled additional JNDI settings in the LDAP connector. This update is proactive, there are no known exploits.
Added additional protection against cross-site attacks when FusionAuth is acting as a SAML IdP.
Audit log entries added by the FusionAuth admin application may contain sensitive information. Sensitive fields will now be masked when written to the audit log. This does not affect the Audit Log API, only the use of this API by the FusionAuth admin app.
Added additional protection against cross-site attacks when using the self-service account pages.
The Nashorn JavaScript engine has been removed from FusionAuth. All Lambda functions will now use the GraalJS engine which has been available since version 1.35.0. No action is required, but please note that if you had any Lambda functions still configured to use the Nashorn engine they will be migrated to use GraalJS.
Updated the following dependencies:
- Upgrade
org.postgresql:postgresqlfrom42.6.0->42.7.2 - Upgrade
com.fasterxml.jackson.*from2.15.2->2.15.3 - Upgrade
org.mybatis:mybatisfrom3.5.13->3.5.15
During a reindex operation, log the progress based upon a fixed time interval instead of every 250k records. This ensures the output is predictable regardless of the reindex performance.
Version 1.48.3 #
Updated the refresh token TTL when using the sliding window with a maximum lifetime JWT Expiration Policy. The symptom of this bug is that a refresh token will expire before the maximum configured lifetime.
Version 1.48.2 #
When paging beyond 10,000 in the FusionAuth admin UI for Users or Entities, the bottom set of pagination controls may not work. If you encounter an error when clicking on the pagination controls, use the top set of controls instead. This bug is specific to the new pagination introduced in version 1.48.0.
In some cases when using with FusionAuth-hosted pages in an non-secure context, such as accessing FusionAuth on localhost, the PublicKeyCredential JavaScript API will not be available. This may cause an error on your JavaScript console PublicKeyCredential is not defined. This error kept the form on the page from correctly submitting.
In version 1.48.0, a change was made to reject a link request from an OpenID Connect IdP when the email_verified claim is supplied with a value of false. An assumption was made that the email and email_verified claims would both be present in the Userinfo response or the id_token. Some providers may split these claims, so this assumption has been removed.
Corrected the validation of the post_logout_redirect_uri parameter on the OAuth2 Logout request for relative URIs intended for use for FusionAuth applications.
Improved JWT validation for internal security schemes by failing faster on invalid tokens.
Version 1.48.0 (Webhook Walrus) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
A bug was identified in a change made in this version that may affect performance for those with > 1M users.
Resolved in version 1.48.1 via
#2535
.
We are officially announcing the end of life for the Nashorn JavaScript engine used by FusionAuth Lambda functions. All new functions have defaulted to the GraalJS since version 1.35.0. The engine is not being removed in the release, but this is an official notice that we plan to remove this engine in early 2024. Please review your lambda functions and ensure the engineType is set to GraalJS.
We are officially announcing the end of life for the fusionauth-search package. This is currently available in a .deb, .rpm and .zip bundle for various platforms. This package is still available, but the plan is to stop building this at the end of 2023. Please make plans to discontinue use of the fusionauth-search package if you are currently using it.
When the OpenID Connect or External JWT Identity Provider is configured to Link by Email and the IdP returns a claim named email_verified and the value is false, the link request will be rejected. This change is intended to reduce the risk of linking on an un-verified email address.
Enhanced the User and Entity Search APIs to paginate beyond 10,000 results. The Search API response will now include a nextResults value that can be used to ask for the next set of search results which enables the API to paginate through the entire available result set.
See the Entity Search APIs and User Search APIs for API details.
The Webhook test action in the FusionAuth admin UI now returns additional information if the webhook returns a non-200 status code. This should make it simpler to debug your webhook integration. Prior to this change, the response would only indicate if the response was successful or not.
The Webhook test action in the UI, now preserves changes to the example request body. Changes will now be preserved across send requests for the browser session. This means a test can be run repeatedly without having to perform the same edits to the default event request body.
Added support for specifying webhook SSL certificates from Key Master. Prior to this enhancement, if you needed to specify an SSL certificate, it had to be added to the webhook in PEM format. You may now store this certificate in Key Master and then use this same certificate between webhooks.
This change is backwards compatible, but the ability to manually specify X.509 certificates in PEM format on the webhook configuration has been deprecated and may be removed in the future. See the Webhook API sslCertificateKeyId field for additional details.
Modal dialogs in the FusionAuth admin UI can now be closed by using the escape key or by clicking outside of the modal.
Added support for signing webhook events with a SHA-256 hash function. This feature will allow consumers of FusionAuth events to verify the message body has not been modified. The signature is contained in a JWT and will be sent using an HTTP request header named X-FusionAuth-Signature-JWT. You may use existing JWT verification strategies including consuming the public key from the JWKS endpoint.
See the Signing Webhooks and Webhooks APIs for signing and verification details.
Exposed the id_token returned by the Identity Provider to the Reconcile Lambda function when available. If the id_token is returned by the IdP and the signature can be verified it will be now be passed to the lambda function in the tokens argument. Example: tokens.id_token.
Added the curl command to the FusionAuth Docker image. This allows you to use the curl command for use in health checks or anytime you need to use curl!
Added support for optional expansion of the user.registrations and user.memberships properties on the User Search API.
This change is backwards compatible, but you may optionally request the Search API omit these properties on the response which may improve performance. See the User Search API for additional details on using the expand request parameter, and the expandable response value.
Enhanced the error messaging returned to the end user when using the Test SMTP button in the FusionAuth admin UI. This makes it easier to test your SMTP configuration.
Updating a theme now returns a validation error if you are missing messages. Currently the error response does include the missing message keys. This error response is now enhanced to return the keys and the default values from the default theme. This allows you to optionally parse the response for the missing keys and values.
Exposed the access_token returned by the Identity Provider to the Reconcile Lambda function. The access_token will now be passed to the lambda function in the tokens argument. Example: tokens.access_token.
When the id_token is returned from the IdP and the signature can be verified it will now be used to optionally resolve the uniqueIdClaim in addition to the emailClaim and usernameClaim. This means you can configure the uniqueIdClaim to a claim that is only available in the id_token. Prior to this change, the id_token could only be verified if it was signed using the an HMAC algorithm using the client_secret. With this change, if the IdP publishes public keys using the JWKS endpoint that is resolved from the .well-known/openid-configuration FusionAuth will attempt to validate the signature.
Enhanced the widget used in multi-value select controls to accept a value when pasting. For example, you may now paste a value from the clipboard directly into the Authorized redirect URLs field. While previously the paste operation worked, the user would have to click the value to confirm. If you clicked off of the field, the value would not be saved.
Corrected the error message when a user has enabled MFA and a webhook returns a non-200 status code for the user.login.success event. The message will now correctly indicate the webhook has failed instead of the previously incorrect error indicating an invalid token was used.
When viewing an Email Template in the FusionAuth admin UI, two dialogs open instead of one. This was the result of two event handlers being bound instead of one.
When using the asynchronous tenant delete, it is possible for the delete job to fail if the system is under heavy load. When this occurs the delete job status may not be correctly updated and you are stuck in a Deleting state. The asynchronous job processor has been enhanced to account for this potential failure condition so the job can be correctly restarted if necessary.
Corrected a potential race condition that could cause a request to the /.well-known/jwks.json endpoint to exception and return a 500 status code when under heavy load.
The Lambda metrics introduced in version 1.47.0 may not always correctly increment the failed count when a lambda invocation failed. This affects the lambda.[*].failures and lambda.[{webhookId}].failures metric names.
When using the PATCH method on the Tenant API, if you previously had any explicit webhooks configured for this tenant, the association between the tenant and the webhook was lost. If you are not using webhooks, or all of your webhooks are configured for All tenants (webhook.global), this bug would not affect you.
Improved the validation for the Entity API to correctly validate the type.id value. Because this value was not being correctly validated, it means the API caller may receive a 500 status code instead of a 400 with a developer friendly JSON response body to indicate how the input can be corrected.
A critical bug was identified that caused FusionAuth to incorrectly identify users eligible for deletion based upon the tenant policy to delete users with an unverified email address. Until you have upgraded to version 1.48.0 please disable Delete unverified users if you currently have enabled Email verification, Verify email when changed and Delete unverified users.
A bug was identified that affected several APIs when using the PATCH method with fields that require custom deserializers in FusionAuth. Affected APIs included Application, Connector, Message Template and Identity Provider. The symptom you will observe is a failed request with a 500 status code.
When using PostgreSQL, under heavy load, a potential deadlock conditions exists when attempting to write login metrics to the database. MySQL database was not affected by this bug. If you were to encounter this bug you may observe some exceptions in the log related to the LoginQueue.
Fixed a JavaScript error that was preventing Audit Log searches by user from returning results.
Resolved an issue where users could not enable two-factor authentication during authentication when they were not registered for the application.
Thanks to @wproffitt-elder !
When using the Refresh Token API, un-expired SSO sessions may be incorrectly omitted from the API response. The result of this bug is that an active SSO session may not be displayed in the FusionAuth admin UI. This has now been corrected, and the FusionAuth admin UI and the Refresh Token API will correctly return all valid SSO sessions.
If the search.servers configuration value was not added to the fusionauth.properties configuration file, and you omit the SEARCH_SERVERS environment value, FusionAuth would fail to start. The correct behavior is for FusionAuth to default to http://localhost:9021.
Resolved a bug in the multipart/form-data parser that may cause elevated CPU usage in some specific cases.
- When an IdP is configured to Link by Email or Link by Username and a user already exists with this email or username respectively, perform additional validation to ensure the user does not already have an existing link to the current Identity Provider. This only affects IdP that allow for one to many tenants to be accessed through a single IdP configuration. In practice this means that the IdP cannot guarantee that an email address is considered globally unique and only assigned to a single user.
Updated the following dependencies:
- Upgrade
com.google.inject:guice5.1.0to6.0.0 - Upgrade
com.google.guava:guava30.1.0to32.1.2 - Upgrade
io.fusionauth:java-http0.2.0to0.2.9 - Upgrade
org.apache.kafka:kafka-clients2.8.2to3.6.0 - Upgrade
org.primeframework:prime-mvc4.11.0to4.17.1 - Upgrade
org.xerial.snappy:snappy-java1.1.8.1to1.1.10.4
Updated the logging configuration when using the fusionauth-search distribution (.deb, .rpm, or .zip) to be more consistent with the fusionauth-app logging configuration. If you are using Elasticsearch or OpenSearch in Docker or other off the shelf installation of Elasticsearch or OpenSearch this change will not affect you.
Updated the FusionAuth static file resolution configuration to further limit class path resolution.
Version 1.48.1 #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
A bug was identified in a change made in version 1.48.0 that may affect performance for those with > 1M users.
Version 1.47.1 #
Revert the GC (garbage collection) logging change introduced in version 1.47.0 for compatibility with the FusionAuth Docker image.
Thanks to @pigletto and @patricknwn !
Version 1.45.4 #
Fixed handling of truncated or malformed oauth_context request parameters when using the hosted login pages.
Version 1.47.0 (Performance Panther) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
This version changes OAuth2 origin validation code. This change is not expected to cause any change in behavior for anyone with configured Authorized Origin URLs. The change is to inspect the port in addition to the schema and host when comparing the request and the Referer or Host header to determine if the request has originated from FusionAuth. One possible edge case that could be affected is if you using localhost in development for both FusionAuth and another application. In this example, it is possible that FusionAuth was not validating the Origin of requests from your application running on localhost correctly. If you encounter this case, you can either remove all Authorized Origin URLs from your configuration, or add the origin of your application so that it can be correctly validated.
Due to the necessary change related to adding a CSRF token when performing a federated login, a manual change may be required to your themed login pages. Please read through these details to understand if you will be affected:
-
If you are using any 3rd party IdP configurations such as OpenID Connect, SAML v2, Google, Facebook with a custom theme, you will need to make a modification to your template in order for federated login to continue to work correctly.
-
If you are not using any 3rd party IdP configurations, or you are not using a custom theme, no change will be necessary.
-
If you will be affected by this change, please review the following details and update to your theme as part of your upgrade process:
-
Find the
alternativeLoginsmacro usage inoauth2Authorizeandoauth2Registerand addfederatedCSRFToken=federatedCSRFTokenas the last argument to this macro.[#-- Updated macro usage. Line breaks added for readability. --] [@helpers.alternativeLogins clientId=client_id identityProviders=identityProviders passwordlessEnabled=passwordlessEnabled bootstrapWebauthnEnabled=bootstrapWebauthnEnabled idpRedirectState=idpRedirectState federatedCSRFToken=federatedCSRFToken/] -
Find the macro named
alternativeLoginsinhelpersand addfederatedCSRFToken=""as the last argument to this macro.[#-- Updated macro in helpers. Line breaks added for readability. --] [#macro alternativeLogins clientId identityProviders passwordlessEnabled bootstrapWebauthnEnabled=false idpRedirectState="" federatedCSRFToken=""] -
Find the element
<div class="login-button-container">in the macro namedalternativeLoginsinhelpersand addid="login-button-container"anddata-federated-csrf="${federatedCSRFToken}"attributes.[#-- Updated div in alternativeLogins macro. Line breaks added for readability. --] <div id="login-button-container" class="login-button-container" data-federated-csrf="${federatedCSRFToken}">
-
The garbage collection logging change introduced in version 1.47.0 was not compatible with the way the FusionAuth docker image was built. You will need to use version 1.47.1 if you will be using the FusionAuth docker image.
Resolved in version 1.47.1 via
#2392
.
The passwordValidationRules variable may be null on the first render of the Change Password themed page. If you had been referencing this field in your template, the render may fail.
Resolved in version 1.49.1 via
#2616
.
The CSRF token used with federated login is not being applied when all configured IdPs for an application use managed domains and an /oauth2/authorize request for the application includes an idp_hint parameter.
Resolved in version 1.53.3 via
#2764
.
Added support for SAML v2 assertion encryption when FusionAuth is acting as the SAML v2 IdP. This means FusionAuth is now compatible with a SAML v2 SP that requires encrypted assertions.
Thanks to @annismckenzie !
Added user.preferredLanguages to the basic self-service registration to allow a user’s preferred language to be collected and then utilized to send localized emails without using advanced self-service registration.
Thanks to @glen-84 and @geoalexidis !
Improved handling of cache reload requests under heavy load. This should improve system performance at scale when mass creating or deleting of various items such as applications and keys.
Added timers and metrics around lambda invocations and the use of HTTP Connect within a lambda function. This should help customers tune and manage lambdas by providing additional insight into the total execution time.
Added configuration to accept any named parameter as a login hint coming from the SAML v2 SP when FusionAuth is acting as the SAML v2 IdP. Prior to this change, FusionAuth would accept login_hint if provided on the request. However, this value can not be configured or optionally disabled.
Ensure a signed AuthN request always has the Signature element as the next sibling after the Issuer element. This bug may cause some SAML v2 services provides to reject the signature of an AuthN request sent from FusionAuth.
Upgraded phone number validation to include the Kosovo country code of +383 as well as various other country codes.
Defend against corporate link “checkers” such as Outlook Safe Links and Google Workspace during the Change Password email workflow. This fix resolves a specific symptom that may occur when a link sent to a user during a change password workflow and the user has multi-factor authentication enabled. The symptom the end user may encounter is that multiple codes may be sent to the user during this workflow. When the two-factor method is email, multiple emails may be received, and when two-factor method is SMS, multiple SMS messages may be received. The cause of this symptom is that the link is being inspected by an intermediate party prior to the user’s browser loading the link which functionally means the request is made more than once.
Improved locale validation, and restrict the number of preferred languages per user to 20. This should not have any practical impact on users of FusionAuth, but it will better protect FusionAuth from storing erroneous values for the user’s preferred languages.
Improved username validation. This length limitation was already enforced by the schema, but the error message was not developer friendly. This change will add a proper validation error in the API response.
Updated the Tenant view dialog in the admin UI to reflect the changes made to the /.well-known/openid-configuration endpoint in version 1.46.0. This is a cosmetic change only, and does not include any functional fixes.
Fixed Tenant select control on Group index page in the admin UI when only a single tenant is configured. This is just a cosmetic fix to how the form was being rendered.
Protected the Kafka event sender from sending events related to it’s own failure. This protects us from overloading the Kafka topic.
Fixed the user.registration.update.complete event to include the updates roles if applicable.
Thanks to @sjswami !
Improved defense against truncated oauth_context request parameters. This parameter is passed around during various OAuth2 workflows to maintain context. This changes allows FusionAuth to fail more gracefully if this is value is intentionally or un-intentionally modified by a 3rd party.
Enabled queries of the username and fullName fields using the .exact suffix on these fields which does an exact match.
Thanks to @patrickvalle !
A race condition exists when using a refresh token with a one-time-use policy where the same token value could successfully be used twice to obtain a new access token. In practice this would be very difficult to replicate outside of a scripted example.
Thanks to @avitsrimer !
All federated login requests now use a CSRF token. This change will add additional protection when using a federated login to ensure the login is completed from the same browser that started the login workflow. This mitigates an attack vector that can be used in phishing attacks where a victim could be convinced to click on a link that would cause the user to unknowingly complete a login.
Added aggregate HTTP request timers and metrics that can be retrieved by the Status API and Prometheus Metrics API.
Enabled GC (garbage collection) logging. A new log named fusionauth-app.gc.log will be found in the log directory.
Improve performance and overhead when downloading and storing the IP location database required for resolving location meta-data for logins by IP address.
Version 1.46.0 (Octagonal Ocelot) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Added the ability to complete Device Grant out of band.
- New API
/oauth2/device/approve - New API
/oauth2/device/user-code
Added a new API to retrieve a pending IdP link: /api/identity-provider/link/pending.
A token obtained from the Client Credentials Grant may now be used with the OAuth2 Introspect endpoint.
Added a JWT Expiration Policy to configure a sliding window with a maximum lifetime.
The OpenID Connect discovery endpoint now accepts the tenantId as a URL segment. This should make it easier to integrate with providers that would not otherwise allow a query parameter on this URL to specify the tenantId.
Provide a validation error when using the /api/jwt/reconcile API with any IdP type ExternalJWT.
Added configuration to allow unauthenticated access to /api/status and /api/prometheus/metrics APIs from localhost.
Added more support in the default theme to use Google reCAPTCHA v2 in an invisible mode w/ CAPTCHA fallback.
Allow any string value in the metaData.device.type property on various APIs.
Resolved a JavaScript bug when enabling MFA during login. The bug caused an error to be written to the JavaScript console, but no functional errors occurred.
When the user.login.success is configured to be transactional and the webhook returns a non 200 status code when the event is fired during the final step of the change password workflow, the failed webhook may not fail the login attempt.
When enabling IdP initiated login on a SAMLv2 IdP, the base ACS URL is hidden in the view dialog
When an applicationId is provided on a Two Factor Start or Send APIs, the application variable may not available in the email template.
APIs that optionally take a sourceId to indicate you wish to copy will now fail validation if you provide additional parameters in the body that will otherwise be ignored.
Thanks to @Pycnomerus !
When adding a user to multiple Groups using the /api/group/member API, the request may fail. Fixed.
When using a wildcard for authorized origin URL, you may receive an invalid origin error. Fixed.
Thanks to @beezerk23 !
Ensured that the memory value for fusionauth-app.memory set in the fusionauth.properties file is always set correctly.
When using custom data with nested values such as user.data.company.name and user.data.company.id in an Advanced Registration form the nested values may not be properly persisted. Fixed.
Using the admin UI to update an IdP with over 6k applications the request may cause a database error. Fixed.
When using the validateJWT method in the FusionAuth Java REST Client, the exp or iat claims may have the incorrect precision.
A change in behavior was introduced in version 1.41.0 that may cause an error when accessing FusionAuth in Docker. The change was how the Host header was being parsed to pick up the local port.
Thanks to @MarekUniq and @java-http !
The user.create.complete and user.registration.create.complete events may be sent before the transaction has closed during IdP Login.
Corrected the internal authentication to receive an internal webhook between FusionAuth service nodes. If you encounter this error, you may see errors in the event log that mention returned response code [401] when sending [JWTRefreshTokenRevoke] event. This error was introduced in version 1.37.0 and the error only occurs when you have more than one FusionAuth service node.
When you have enabled Implicit Email Verification, when completing a Multi-Factor login, a user.email.verified event may be sent even if the user has already verified their email address.
When the user.reactivate event is configured to be transactional and the webhook returns a non 200 status code, the transaction may not be correctly rolled back.
When making a request to the self-service pages, such as /account/ ensure any additional query parameters are preserved through a login workflow.
When the user.create event is configured to be transactional, ensure the Setup Password email is not sent if a user.create webhook returns a non 200 status code.
When using the Device Grant with the /oauth2/device themed page, you may be shown a Logout button if an SSO session exists during this workflow. Clicking this button will log the user out of the SSO session and return to this page. This fixes the logout link so that you do not receive an error when returning to the /oauth2/device page. A workaround is documented in the linked GitHub issue.
Fixed an edge case where the CAPTCHA could be bypassed when using Advanced Registration forms.
Added more validation on the user_code when completing a Device Grant by way of the Authorization Code Grant, Implicit Grant, or Password Credentials Grant.
Mitigated a potential directory traversal attack. CloudFlare, AWS and similar cloud providers will generally block these requests by default. FusionAuth Cloud customers are not vulnerable to this type of attack.
Version 1.45.3 #
Update fusionauth/java-http to the most recent version to pick up a bug fix.
This fixed a very low level HTTP server bug. In some rare cases, the HTTP response handler may not identify the end of the stream and effectively truncate the response body. It is difficult to say how may affect your integration if you were to encounter it. If you were to make an API call with a large response body, it may be possible the response would not include a valid JSON object if the response is truncated. When this error occurs, the HTTP status code will be valid, but the response will be truncated or non-existent.
Version 1.45.2 #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
For more information about database migrations, see Database Migrations.
Access token signing keys specific to an entity type may revert to the tenant configuration after upgrading to this version.
It is recommended to upgrade to this version at a minimum if you are coming from a version prior to version 1.45.0. For more information on this issue, see the Known Issues in the 1.45.0 release notes.
Version 1.45.1 #
Added more validation when adding authorized origin to the OAuth2 configuration to ensure the values do not include a path or query string. This change will only affect validation when adding or editing the application configuration. This change will not affect existing configured origins or their use at runtime.
Added support for wildcard configuration when using post_logout_redirect_uri parameter on the OAuth2 Logout request.
Fixed salt validation for the phpass-md5 or phpass-sha512. This will allow the import of users with this password hash when the salt includes a . (period) character.
Version 1.45.0 (Dapper Duck) #
When importing users using the phpass-md5 or phpass-sha512 schemes shipped in this release, if the salt contains a period (.) the import will fail validation.
Resolved in version 1.45.1 via
#2206
.
If you configured an access token signing key specific to an entity type, the signing key configuration may revert to the tenant configuration after upgrading to this version.
If you wish to upgrade before a fix is available, please document your access token signing key configuration for each entity type that has provided a specific signing configuration. Then, once the upgrade has completed, review each entity type and confirm the correct signing key configuration. If the configuration is not correct, set the signing key to the previously documented signing key.
To verify if this issue may affect you during upgrade, confirm your signing configuration for each configured entity type.
- Navigate to Entity Management -> Entity Types -> Edit -> JWT .
- If you have not enabled Entity Type specific JWT signing, this section will be collapsed and this entity type will not be affected during upgrade. If the signing configuration is enabled and you have configured a key for the
Access token signing keyfield, you may be affected. Please record this setting and ensure it has not changed after the upgrade has completed.
If you have not yet upgraded to version 1.45.0, it is recommended to move to version 1.45.2 or later at a minimum and skip this version if you have confirmed you may be affected by this issue.
Resolved in version 1.45.2 via
#2249
.
Added a policy to require a user to provide their current password when changing a password on the self-service account pages. See Applications -> Edit -> Registration -> Form settings -> Require current password .
Integrated the Authorization Code grant workflow into FusionAuth for use with single page web applications. This feature may be used with the FusionAuth React or Angular SDKs to support the use of the Authorization Code grant without having to write any backend code.
Added new Search APIs. These new APIs provide search and pagination capability across more APIs and may increase performance when using the FusionAuth admin UI with larger numbers of Tenants and Applications. Added Search APIs include: Applications, Consents, Groups, Tenants, Themes, Keys, API keys, User Comments, Email Templates, Identity Providers, Webhooks, and Lambdas.
Resolves issues #2055, #2056, #2057, #2058, #2059, #2060, #2061, #2064, #2065, #2066, #2067, and #2068
Added support for Drupal MD5, SHA-512 hashes for easier import. New schemes include phpass-md5 and phppass-sha512.
For more information, see the documentation for phpass MD5 and phpass SHA-512.
De-coupled the self-service themed account pages from SSO. You may now use the self-service account pages even if you choose not to preserve your SSO session. For example, you can un-check the “Keep me signed in” checkbox and still use the self-service pages.
Also allow the self-service account session to be bootstrapped from a mobile application using token authentication, also known as the Bearer authentication scheme. This mechanism provides access to the self-service themed pages even if you are unable to share cookies with the web view used to complete login.
Example request header: Authorization: Bearer <access_token>
Thanks to @ansonallard !
Added validation for the length of an entity name in order to provide a more friendly validation error message.
Updated usage of verificationId on gated email or registration verification pages when configured to use a clickable link instead of a short code.
Updated 3rd party dependencies:
- Upgrade Elasticsearch client from version
7.10.2to7.13.4. - Upgrade GraalJS from version
22.3.0to22.3.1.
Version 1.44.0 (Original Orange) #
This version makes significant changes to the database schema. Upgrading to this version requires a migration. While in development mode you will be prompted to upgrade the database by maintenance mode before you may login. In a production runtime mode, or with silent configuration enabled, the upgrade will occur automatically during startup.
This migration adds an index to the identity_provider_links table. It is not expected to negatively impact the migration time during upgrade, but please be aware that deployments with millions of Identity Provider Links may experience additional processing time during the migration.
For more information about database migrations, see Database Migrations.
Apple IdP-assigned keys may fail to delete.
Resolved in version 1.63.0 via
#3275
.
In self-service registration, a user can alter a hidden field (using browser developer tools) and cause Failed decrypt registration state errors to appear in the event log.
Resolved in version 1.63.0 via
#3313
.
Added default configuration for read and connect timeouts to the SMTP server configuration. This helps protect FusionAuth against an SMTP server that never closes a socket. From time to time we observed an SMTP server hold open a socket, and tie up a send thread which may block other senders. This includes the mail.smtp.timeout and mail.smtp.connectiontimeout settings. The default value is 2000 for each. These may be overridden by navigating to the Advanced tab in your tenant and adding them to the SMTP settings section.
Changed Link API request body to match the response. Backwards compatibility is maintained, but this provides a more consistent API feel.
Updated the Google IdP JavaScript in the themed pages. This change removes the deprecated Google JavaScript library, and adds support for One Tap. Thanks to @forteilgmbh for their contribution.
Thanks to @Brunom50 and @harishreddy-m !
Returns a 404 with status only for anything under /api/* instead of rendering a 404 page with HTML. It just seems like the right thing to do. Nobody wants HTML in their APIs!
Added apiMode: [Public|Partner] to allow the user to select between the public or partner Steam API. The Partner API is preferred if you have access to it because it is not rate limited.
A Lambda invocation may incorrectly fail indicating a recursive call was attempted. This is unlikely to occur, but under heavy load, it is possible.
The Application API was failing to make a copy when using sourceApplicationId when the source Application has enabled and configured the SAML v2 IdP. This is a bug in a new feature that was added in version 1.43.0.
For release notes older than 1.44.0, see the release notes archive.