Connect2id server 19.6 introduces a web session bootstrap endpoint
Integrated web session bootstrap for native apps
Connect2id server 19.6 introduces a groundbreaking feature - a web session bootstrap endpoint. This new capability allows authorised native clients to initialise a WebView with a pre-established session for authenticated end-users. By skipping the user authentication step, web applications loaded in the WebView can benefit from a seamless login experience.
Key features of the integrated web session bootstrap:
-
No more redundant logins - users stay authenticated as they move between native and web apps.
-
Flexible configuration - deployments can control the
acrandamrattributes of the bootstrapped web sessions, for example by assigning them from the original ID token for the authenticated end-user. -
Supports DPoP (RFC 9449) and mTLS (RFC 8705), ensuring that web sessions are tied to the same client instance that obtained the ID token.
-
The access tokens for bootstrapping are single-use and short-lived, minimising exposure.
Use of the web session bootstrap endpoint is explained in the guide.
Connect2id server deployments that have implemented such a bootstrap using a token exchange grant handler plugin can continue using that, or switch to the new, built-in capability.
Reduced code lifetimes to protect against browser-swap attacks
To mitigate the risk of browser-swap attacks Connect2id 19.6 shortens the lifetime of authorization codes (see authzStore.code.lifetime):
- Minimum: 1 second
- Maximum: 180 seconds
- Default: 60 seconds
This reduces the opportunity for browser-swap attackers to misuse stolen codes, while still providing legitimate clients with sufficient time to complete their token requests.
SPI updates
Plugins implementing the TokenExchangeGrantHandler SPI can now request introspection of locally issued ID tokens. Previously this task required plugins to implemented their own ID token signature and claims validation.
Dependency updates
This release updates Log4j to address CVE-2025-68161, a medium vulnerability that affected the Socket Appender. Other Log4j appenders were not affected.
More information about this new release can be found in the notes below.
Download 19.6
For the signature validation: Public GPG key
Standard Connect2id server edition
Apache Tomcat package with Connect2id server 19.6: Connect2id-server.zip
GPG signature: Connect2id-server.zip.asc
SHA-256: 3a455706ebdbd275e283df18f058c87348fc699f748530f9a515564faebdbb11
Connect2id server 19.6 WAR package: c2id.war
GPG signature: c2id.war.asc
SHA-256: d1e24fc976032e00cdde7dd065dcd179a418ba3f364c652dc407380e22b03431
Multi-tenant edition
Apache Tomcat package with Connect2id server 19.6: Connect2id-server-mt.zip
GPG signature: Connect2id-server-mt.zip.asc
SHA-256: 843f14e416328689d6fe66132d4ce22772923dcd124da65d77a573a4afe3f69e
Connect2id server 19.6 WAR package: c2id-mt.war
GPG signature: c2id-mt.war.asc
SHA-256: 7e22cb3f0dcc88f459d759c20320fda70b6ce4ebe7caf63e54c247b4ee2dffcd
Questions?
For technical questions about this new release contact Connect2id support. To purchase a production license for the Connect2id server, renew or upgrade your support and updates subscription, email our sales.
Release notes
19.6 (2026-02-02)
Summary
-
A new web session bootstrap endpoint allows authorised native clients to
initialise a WebView with a pre-established session for an authenticated subject (end-user) at the Connect2id server. Web applications loaded in the WebView that rely on the Connect2id server can then skip the user authentication step, providing a seamless login experience.The web session bootstrap endpoint is disabled by default. To enable it, the
op.webSessionBootstrap.enableconfiguration property must be set totrue, and theop.webSessionBootstrap.cookie.nameconfiguration property must be set to the name of the cookie that stores the Connect2id server session ID for the subject (end-user). Additional optional configuration properties are available to configure policies for the cookies and the bootstrapped web sessions, such as the authentication strength (ACR value) to assign to them.For a client to bootstrap a web session, it must possess an ID token for the logged-in end-user. The ID token must have been issued with a scope that includes the
web_session_bootstrapvalue (or the scope value specified by
op.webSessionBootstrap.tokenScope), in addition to the requiredopenidvalue and any other scope values. ID tokens authorised for web session bootstrap include a booleanwsb(web session bootstrap) claim to indicate consent.To obtain an access token for the web session bootstrap endpoint, the client must submit a token exchange (RFC 8693) request to the Connect2id server, using the ID token as the
subject_token. The maximum allowed age of ID token (determined by theiatclaim) for web session bootstrap is controlled by theop.webSessionBootstrap.cookie.maxAgeIDTokenconfiguration property. Theexp(expiration-time) claim of the ID token is ignored, as it’s intended for validation by the client when the token is first received.For clients that support DPoP (RFC 9449), the entire flow - ID token issuance, token exchange, and web session bootstrap - can be DPoP bound. This ensures that web sessions are created by the same client instance that obtained the ID token (applicable to for native clients, such as mobile and desktop applications). Client X.509 certificate binding (RFC 8705) of the flow is also supported.
-
Reduced the minimum, maximum, and default lifetimes of authorization codes (
authzStore.code.lifetime) to 1 second (minimum), 180 seconds (maximum), and 60 seconds (default). This adjustment mitigates the risk of browser swap attacks and phishing-based authorisation code theft. By shortening the window during which codes are valid, the likelihood of an attacker successfully using a stolen code is significantly reduced. The configured lifetime should be long enough for legitimate clients to redeem them, even in high-latency environments. -
Connect2id server plugins implementing the
TokenExchangeGrantHandlerSPI (for the OAuth 2.0 token exchange grant, specified in RFC 8693) are able to request introspection of received subject tokens that are locally issued ID tokens.
Configuration
-
/WEB-INF/oidcProvider.properties
-
op.webSessionBootstrap.enable– New optional configuration property that enables / disables the web session bootstrap endpoint. Disabled by default. -
op.webSessionBootstrap.tokenScope– New optional configuration property that specifies the scope value for a client to request an ID token enabled for web session bootstrap, and then to exchange the ID token for an access tokens for the web session bootstrap endpoint. The default value isweb_session_bootstrap. -
op.webSessionBootstrap.tokenLifetime– New optional configuration property that specifies the lifetime of the access tokens for the web session bootstrap endpoint, in seconds. The default value is 60 seconds. -
op.webSessionBootstrap.cookie.name– New optional configuration property that specifies the name of the cookie used by the login page (seeop.authz.endpoint) to store the subject (end-user) session ID. Required when the web session bootstrap endpoint is enabled. -
op.webSessionBootstrap.cookie.domain– New optional configuration property that specifies the domain of the cookie that stores the subject (end-user) session ID. If omitted, the cookie uses the default domain. -
op.webSessionBootstrap.cookie.path– New optional configuration property that specifies the path of the cookie that stores the subject (end-user) session ID. The default value is/. -
op.webSessionBootstrap.cookie.secure– New optional configuration property that specifies the “Secure” attribute of the cookie that stores the subject (end-user) session ID. The default value is true. -
op.webSessionBootstrap.cookie.httpOnly– New optional configuration property that specifies the “HttpOnly” attribute of the cookie that stores the subject (end-user) session ID. The default value is true. -
op.webSessionBootstrap.cookie.sameSite– New optional configuration property that specifies the “SameSite” attribute of the cookie that stores the subject (end-user) session ID. The supported values areLAXandSTRICT. The default value isLAX. -
op.webSessionBootstrap.cookie.maxAgeIDToken– New optional configuration property that specifies the maximum allowed age of ID tokens (iatclaim) that clients may use to bootstrap web sessions, in seconds. The default value is 2592000 seconds (30 days). -
op.webSessionBootstrap.assumeIDTokenACR– New optional boolean configuration property that specifies whether bootstrapped web sessions are assigned the ACR value from the ID tokenacrclaim (if present). Iffalse, the ACR may instead be set viaop.webSessionBootstrap.defaultACR. The default value isfalse. -
op.webSessionBootstrap.defaultACR– New optional configuration property that specifies the ACR value to assign to bootstrapped web sessions if no ACR is assigned from the ID token. If blank, no default ACR is assigned. -
op.webSessionBootstrap.assumeIDTokenAMR– New optional boolean configuration property that specifies whether bootstrapped web sessions are assigned the AMR values from the ID tokenamrclaim (if present). Iffalse, the AMR may instead be set viaop.webSessionBootstrap.defaultAMR. The default value isfalse. -
op.webSessionBootstrap.defaultAMR– New optional configuration property that specifies the AMR value(s) to assign to bootstrapped web sessions if no AMR is assigned from the ID token, as a comma and / or space separated list. If blank, no default AMR is assigned.
-
-
/WEB-INF/authzStore.properties
authzStore.code.lifetime– Reduces the minimum, maximum and default lifetimes of authorisation codes. The minimum lifetime is reduced from 60 seconds to 1 seconds. The maximum lifetime is reduced from 600 seconds to 180 seconds. The default lifetime is reduced from 300 seconds to 60 seconds.
Web API
-
/token
-
Supports issue of ID tokens authorised for web session bootstrap. They include a boolean
wsb(web session bootstrap) claim, with a value oftrue.The Connect2id server supports the following OAuth 2.0 grant types for issuing ID tokens authorised for web session bootstrap:
-
authorization_code -
password -
urn:ietf:params:oauth:grant-type:jwt-bearer -
urn:ietf:params:oauth:grant-type:saml2-bearer -
urn:ietf:params:oauth:grant-type:token-exchange
The
implicitgrant type is also supported, however its use is not
recommended due to security concerns.ID tokens issued for web session bootstrap include a
cnf.jkt(JSON Web Key thumbprint confirmation) claim, if the token request included a DPoP proof. For token requests which include an X.509 client certificate, the ID token includes acnf.x5t#S256(X.509 certificate SHA-256 thumbprint confirmation) claim. -
-
Supports a proprietary token exchange (RFC 8693) profile to issue access tokens for the new web session bootstrap endpoint.
-
The
grant_typemust beurn:ietf:params:oauth:grant-type:token-exchange. -
The
subject_tokenmust be a locally issued ID token with thewsb(web session bootstrap) claim set totrue. Theexpclaim of the ID token is ignored. Theiatclaim must not be older than the configuredop.webSessionBootstrap.cookie.maxAgeIDTokenproperty. -
The
subject_token_type_hintmust beurn:ietf:params:oauth:token-type:id_token. -
The
scopeparameter must include theweb_session_bootstrapscope value, or the value configured in theop.webSessionBootstrap.tokenScopeconfiguration property. -
If the ID token was issued with a DPoP binding, the token request must include a
DPoPheader with the DPoP proof constructed for thesubject_token. The DPoP proof must include theath(access token hash) claim computed as the SHA-256 hash of the ID token. -
If the ID token was issued with a client X.509 certificate binding, the token request must include the client’s X.509 certificate.
The issued access token is a short-lived, single-use, identifier-based (opaque) token, which audience is to the issuer URL (
op.issuer) and its scopeweb_session_bootstrap, or the value configured in theop.webSessionBootstrap.tokenScopeconfiguration property. -
-
-
/web-session-bootstrap/rest/v1/
-
New web API resource for authorised native clients to bootstrap Connect2id server web sessions for an authenticated subject (end-user). The bootstrap is performed by making an HTTP POST request with an
Authorizationheader containing the access token. The following token schemes are supported:Bearer, for bearer access tokens and client certificate-bound token, andDPoP.If the access token is DPoP bound, the HTTP request must include a
DPoPheader with the DPoP proof constructed for the access token. The DPoP proof must include theath(access token hash) claim computed as the BASE64URL-encoded SHA-256 hash of the access token.If the access token is client X.509 certificate-bound, the HTTP request must include the client’s X.509 certificate.
On success the resource returns a
Set-CookieHTTP response header,
which the client can use to initialise the cookie jar for a WebView.Bootstrapped web sessions include the following members in the
dataJSON object:-
bootstrap– JSON object with members:-
client_id– The ID of the client that bootstrapped the session. -
id_token– Selected claims from the ID token was used to bootstrap the session:-
iat– Theiat(issued-at) claim of the ID token. -
auth_time– Theauth_timeclaim of the ID token (if present). -
acr– Theacr(authentication context class reference) claim of the ID token (if present). -
amr– Theamr(authentication methods references) claim of the ID token (if present).
-
-
-
-
-
/monitor/v1/metrics
-
wsbEndpoint.successfulRequests– New meter of successful web session bootstrap endpoint requests. -
wsbEndpoint.invalidRequestErrors– New meter of web session bootstrap endpoint requests rejected with an HTTP400 Bad Requesterror. -
wsbEndpoint.forbiddenErrors– New meter of web session bootstrap endpoint requests rejected with an HTTP403 Forbiddenerror. -
wsbEndpoint.invalidTokenErrors– New meter of web session bootstrap endpoint requests rejected with an HTTP401 Unauthorizederror. -
wsbEndpoint.serverErrors– New meter of web session bootstrap endpoint requests rejected with an HTTP500 Internal Server Errorerror.
-
SPI
-
Upgrades the Connect2id server SDK to com.nimbusds:c2id-server-sdk:5.15
-
Plugins implementing the
TokenExchangeGrantHandlerSPI (for the OAuth 2.0 token exchange grant, specified in RFC 8693) are able to request introspection of received subject tokens that are locally issued ID tokens. If the ID token issuer matches the OpenID provider issuer, the identifier of the requesting client (client_id) is found in the token audience (aud) and the token signature is valid, the introspection result returns the ID token claims. The ID token validation ignores the token expiration time (exp).The introspection of locally issued ID tokens is made available via a new
getIDTokenClaimsmethod of theTokenIntrospectionargument.Token exchange plugins may use this method to implement custom web session bootstrap logic in Connect2id server deployments.
-
Resolved issues
-
Native client group SSO token exchange must ensure the registered client
scopemetadata parameter includes thedevice_ssoscope value. Previously, the Connect2id server allowed SSO to proceed for a client by only checking that the received ID token anddevice_secretwere valid, and that their subject matches. Token exchange for native SSO will now be rejected with an OAuth 2.0unauthorized_clienterror if the clientscopemetadata parameter doesn’t include the requisitedevice_ssoscope value. The event is logged at INFO level underOP7112(issue server / 1146). -
Adds native client group SSO logging at INFO level for these client errors: ID token subject doesn’t match the session subject (
OP7113), ID tokends_hashhash (OP7115) (issue server / 1150). -
Limits the length of the current JWK set in the Connect2id server key store (in dynamic mode) to 500 thousand characters, to signal administrators that old superseded keys should be removed (issue key-store / 3).
-
Reject requests to the Connect2id server key store web API that include a JWK ID with illegal characters (issue key-store / 4).
-
Updates Log4j to address CVE-2025-68161 - a CVSS-B / 6.3 MEDIUM vulnerability that affected the Socket Appender, which did not not perform TLS hostname verification of the peer certificates. Other Log4j appenders were not affected (issue server / 1140).
Dependency changes
-
Upgrades to com.nimbusds:c2id-server-sdk:5.15
-
Upgrades to com.nimbusds:oauth2-oidc-sdk:11.32
-
Upgrades to com.nimbusds:c2id-server-jwkset:2.1
-
Updates to com.nimbusds:c2id-server-key-store:1.8
-
Updates to com.nimbusds:oauth2-authz-store:28.11
-
Updates to com.nimbusds:oidc-session-store:22.1.8
-
Updates to com.nimbusds:tenant-manager:10.1.8
-
Updates to Log4j 2.25.3