Safewhere Identify 5.19 Release Notes
This document summarizes all new features and bug fixes for version 5.19 as well as breaking changes when being upgraded from previous versions.
Breaking and high-risk changes
Identify 5.19 introduces significant updates that, while improving functionality, may impact existing Identify tenants. Thorough testing on a non-production environment is strongly advised before upgrading your production instance. Key changes include:
Handling of encoded client_id and client_secret in OAuth's HTTP Basic authentication scheme
Encoding the client_id
and client_secret
for the HTTP Basic authentication scheme can be tricky, especially when these values contain special characters such as spaces (' '
) or colons (':'
). As of version 5.19, client_id
and client_secret
must be encoded according to the guidelines described in this documentation.
If your application already encodes credentials according to the specification, which is the case for most popular client libraries, you should not encounter any issues.
Claim Filter transformation update
When the Claim Filter transformation is executed within the claim pipeline, it now correctly retains the NameClaimType
, RoleClaimType
, and AuthenticationType
from the original ClaimsIdentity
. This resolves issue #1340, which incorrectly cloned the ClaimsIdentity
without preserving these crucial claim types, leading to a "Value cannot be null" exception.
Move EnableLoadingDataInOneThread from web.config to System Setup
The EnableLoadingDataInOneThread
setting has been moved from web.config to System Setup for better configurability and improved cache reload handling. Its default value is now true
. When enabled, if the cache has been loaded and some data changes, such as through the REST API or the Admin interface, only one thread will reload the data, while the other threads continue using the existing cache.
Change in Security log event ID
Previously, event ID 4950
was assigned to both the OAuth20 Request Error
system log event and the OAuth2 Token Introspection Request
security event. To avoid this conflict, the Security log event ID for the OAuth2 Token Introspection Request
action has been changed from 4950
to 4953
. This update ensures that each event ID is unique and accurately represents the specific action being logged.
Changes in issued claims for the ID token and Access token
- The standard
sid
claim now replaces theuiId
claim for Session ID information. - The
token_usage
claim has been removed from both the ID token and Access token.
New features and improvements
OAuth20 improvements
Extend parameter validation for OAuth endpoints
You can now customize the validation of request parameters and the content of JWT tokens for OAuth/OIDC endpoints. For example, you can enforce PKCE as a requirement for authorization requests.
For more details on supported token endpoints, see the following resources:
- Additional rules validation on the token endpoint
- Additional rules validation on the authorization endpoint
- Impact of additional rules validation on the request object.
Support code_challenge
and code_challenge_method
parameters in a request object
You can now include the code_challenge
and code_challenge_method
parameters in a request object when sending it via an OAuth authorization request to Identify.
For more details, see this topic.
PKCE Enhancement settings for Generic OIDC provider
Previously, the code verifier was generated using a fixed length. In this release, you can now configure the code verifier settings:
- Code challenge method: Choose between
S256
orplain
. - Code verifier length: Specify a length between 43 and 128 characters.
Support POST method for OAuth Authorization endpoint
The OAuth 2.0 Authorization endpoint now supports both GET and POST HTTP methods, providing greater flexibility in authorization requests.
Confirmation for OIDC logout
When an OIDC logout request is received without an id_token_hint
parameter, the user will be prompted to confirm whether they want to proceed with the logout. This behavior is required by the RP-Initiated Logout specification. However, you can suppress the confirmation prompt by enabling the Do not prompt the user when logging out without an ID token hint
setting.
Identify Configurator
Initial REST API OAuth application for new Identify tenants
When creating a new tenant, you can automatically provision the Identify OAuth2 Token for REST APIs
connection, along with an initial refresh token for the admin
user. This is enabled by the new --provisionmyrestapikey
parameter in the Identify CLI. This feature is especially useful for automating the setup of your Identify tenant.
For more details, see this topic.
Unlocking users with the Reconfigure feature
You can now use the Configurator's Reconfigure feature to unlock user accounts. This is especially useful for unlocking critical accounts, such as the admin
user, if they become accidentally locked.
Additionally, resetting a user's password will automatically unlock the account if it is locked.
For more details, see this topic.
PIN code protection for new Identify tenants
You can now set a 6-digit PIN code during tenant creation to prevent unauthorized deletion or reconfiguration. For more details, see this topic.
Safewhere Admin
Enhanced certificate-related performance
Certificate operations are now significantly faster and more efficient:
- Optimized certificate loading: Certificate verification is skipped for REST API calls that do not require validity checks, reducing unnecessary overhead.
- Improved Certificate Selection dialog: Paging and search capabilities have been added to the Certificate Selection dialog, resulting in faster page loads and easier navigation.
- Faster certificate purging: The process for purging expired certificates, regardless of whether they are in use, has been optimized for much quicker execution.
ClientSecretPost
authentication method for REST APIs
The Identify OAuth2 Token for REST APIs application now supports the ClientSecretPost
authentication method for token exchange, in addition to the existing ClientSecretBasic
method.
New features for Generic OIDC Provider
The Generic OIDC Provider connection no longer requires the User information URL
setting. This is useful for OIDC providers that do not offer a userinfo
endpoint. Additionally, a new Issuer
setting has been introduced, which is used to validate the issuer of the token returned by the OIDC provider.
Algorithm setting for token signing
Algorithm setting for token signing
Identify introduces a new setting that allows you to specify the algorithm used by the OAuth/OIDC connection to sign the response token. The default value is RS256
. Note that, currently, signing the ID token is independent of the JWS algorithm
setting; asymmetric signing is always used.
Claim transformation type name alignment
Claim transformation type names in Identify have been updated to match the terminology used in the documentation for consistency and clarity.
Session hijacking mitigation
To enhance security and protect against session hijacking, Safewhere Admin now includes mitigation measures similar to those in Runtime. When the Enable Session id - User's IP pinning setting is enabled, the login session is pinned to the IP address used at sign-in. If subsequent requests to the Admin interface in the same session originate from a different IP address, those requests will be denied.
Other improvements
Native support for "sw" and "ew" operators to enhance user filter options
In versions prior to 5.19, the "sw" (starts with) and "ew" (ends with) operators were not natively supported for direct SQL query conversion. As a result, the system had to load all data into memory before applying these operators for filtering.
Starting with version 5.19, the "sw" and "ew" operators can now be directly converted into SQL queries. This enhancement avoids the need to load all data into memory, thereby improving performance and efficiency when filtering users.
Support for yyyy-MM-dd
and yyyy/MM/dd
formats in the loginmetrics endpoint
In addition to the 'dd/MM/yyyy' and 'dd-MM-yyyy' formats, the fromDate
and toDate
parameters accept date values in the 'yyyy-MM-dd' or 'yyyy/MM/dd' formats.
Disable all log items
To completely disable logging—so that no logs are written for Audit, Security, Billing, Revision, or Analysis, refer to this logging configuration sample.
New log events for Username & Password authentication
To improve monitoring and troubleshooting, new log event events have been added for Username & Password authentication. These logs provide detailed information about password change attempts and authentication failures.
Event ID | Type | Action/Result |
---|---|---|
6000 | Security log | Password change succeeded |
6001 | Security log | Password change failed |
502 | Audit log | Username & Password authentication failed |
Additionally, the OtpCodeAuthenticationFailed
log (event ID: 4414) now records all failed OTP input attempts.
Debug log capture for Microsoft.IdentityModel events
An event listener has been added to Identify Runtime to capture and log events from the Microsoft.IdentityModel and System.IdentityModel namespaces, but only when the SYS log level is set to Verbose
. This includes events triggered by features such as IdentityModel's ShowPII.
For more details, see the Security section of this topic.
New hosted forms
The following hosted forms have been added:
- MalformedRequestError
- ConnectionResolutionError
- OpenIdConnectLogoutConfirm
For more details about these changes, see PR 53.
Dependency package upgrades
Identify Admin has been upgraded to .NET 9.0, along with updates to all related NuGet and Node.js packages. These upgrades address security vulnerabilities present in older versions.
Optimized user filtering by Organization ID and Group ID
User filtering has been improved by supporting direct filtering with organization ID and group ID. Previously, filtering by organization or group name could cause performance issues due to excessive SQL subqueries. Now, filters using organization ID and group ID are translated more efficiently, resulting in significantly better query performance.
For filtering syntax details, see this topic.
Bug fixes
- Fixed: #1340 [Runtime] Exception during login (SP → Identity → Azure AD) caused by a claim filter transformation applied to the SP, Azure AD default claim mapping set to "Do not map to standard claim types," and an unregistered Azure AD user in the Identity user list.
- Fixed: #2335 [OAuth] "invalid_client" error occurs when sending a token request using client_secret_basic if the client_id contains special characters.
- Fixed: #1983 [OAuth] Error page displays "Internal server error" when the mandatory redirect_uri parameter is missing.
- Fixed: #772 [OAuth] "invalid_grant" error returns when authorization is pending in device flow.
- Fixed: #2790 [Runtime] User could not switch authentication when
Skip SSO and always re-authenticate users
was enabled on the service provider. - Fixed: #131 [IdentifyAdmin] Confirmation dialog appears when opening a dialog in the resource list, then opening and closing a resource within that list.
- Fixed: #262 [IdentifyAdmin] Users can get stuck in an infinite loop on the My Profile page if their roles change while the tenant's
Require that roles in access tokens must be a subset of the user's assigned roles
setting is enabled. - Fixed: #2305 [IdentifyAdmin] Select certificate dialog in 2nd signing certificate picks up certificates from local datastore.
- Fixed: #148 [IdentifyAdmin] Confirm dialog does not display in some cases when a resource is updated.
- Fixed: #217 [IdentifyAdmin] Some UIs in IdentifyAdmin are missing org-auth policy.
- Fixed: #597 [IdentifyAdmin] Error message "S.detail is undefined" occurs when switching between tabs after the adminv2 session has expired.
- Fixed: #459 [IdentifyAdmin] User unable to save the application after resolving the error: "Sorry, the connection name must only contain ASCII characters" during application update.
- Fixed: #597 [IdentifyAdmin] JavaScript error occurs when switching between resource lists after the session has expired.
- Fixed: #1409 [IC/CLI] OneAdmin application pool does not start after completing the "Reconfigure security settings" action.
- Fixed: #2357 [IC] Error when setting up claim uniqueness after upgrading from SW 5.12 to SW 5.19 using Azure SQL.
- Fixed: #860 [REST] Error incorrectly stated
OpenIdConnectLogoutRedirectUrl is invalid
when provisioning an OAuth 2.0 connection without theopenIdLogoutRedirectUrl
parameter. - Fixed: #147 [REST] The /rest/v2/users/myprofile endpoint returns a 200 status.
- Fixed: #504 [Logging] Log short token for event ID 8010 when calling the /userinfo.idp endpoint.
- Fixed: #1544 [Logging] Timestamp format in Runtime log is mixed between dd-mm-yyyy and mm/dd/yyyy.
- Fixed: #910 [Logging] The RevisionData is logged as "null" in the REV log during API call: /admin/api/rest/v2/certificates/purgeunusedexpiredcertificates.
- Fixed: #1587 [Logging] The applied claim transformation list in SP is not logged in SYS event ID 147.
- Fixed: #1663 [Logging] WARN log message "Ignore JWT validation because the JWS Algorithm is None" is logged with event ID 0.
- Fixed: #504 [Logging] Event ID 8010 logged redundant data when calling the
/userinfo.idp
endpoint.