1
0
mirror of https://github.com/keycloak/keycloak.git synced 2026-10-23 19:29:23 +03:00

2118 Commits

Author SHA1 Message Date
Alexander Schwartz
2f186dc572 Fix truncated option description parsing
Closes #54126

Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-23 18:21:58 +02:00
buket
09f6ce5e09 Document how to select OpenTelemetry trace propagators
Closes #33624

Signed-off-by: Buket Çoban <buket@keymate.io>
Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
Co-authored-by: Buket Çoban <buket@keymate.io>
Co-authored-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-23 10:45:09 +02:00
vramik
672f05e258 Require manage-realm to change realm-level default client scopes
Closes #54151

Signed-off-by: vramik <vramik@redhat.com>
2026-10-20 11:40:06 -03:00
Alexander Schwartz
1138b6d331 Fix broken AsciiDoc formatting and linking
Closes #54128

Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-20 16:31:21 +02:00
Alexander Schwartz
0d14bcb39d Include OID4VCI preview content, but not experimental content
Closes #54130

Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-20 15:15:13 +02:00
vramik
e203767c06 Service account user ID available on client representation instead of exposing separate endpoint returning whole user representation
Closes #54047

Signed-off-by: vramik <vramik@redhat.com>
2026-10-20 10:03:04 -03:00
Alexander Schwartz
d67e5c78d6 Pass connection properties to AWS JDBC Wrapper where applicable
Closes #52825

Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-19 15:20:15 -03:00
Giuseppe Graziano
3fb8fa9dca enforce client authentication for CIBA
Closes #53937

Signed-off-by: Giuseppe Graziano <g.graziano94@gmail.com>
2026-10-19 14:38:05 +02:00
Martin Kanis
e61e1e4e02 Deleted required client scope is removed from mixed client-scope policies
Closes #51248

Signed-off-by: Martin Kanis <mkanis@ibm.com>
2026-10-19 09:21:04 -03:00
Stefan Guilhen
6dab41f2e4 Add note to upgrade guide about new enforced validations
- also fix adapter-side validation

Signed-off-by: Stefan Guilhen <sguilhen@redhat.com>
2026-10-16 15:24:39 -03:00
andymunro
bc4b816124 Ensure asterisks are marked as passthrough
Closes #54068

Signed-off-by: AndyMunro <amunro@redhat.com>
Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
Co-authored-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-16 18:24:06 +02:00
Marek Posolda
eae20e964b Warnings about the fact that client administrator can assign any client scope (#54011)
closes #54010

Signed-off-by: mposolda <mposolda@gmail.com>
2026-10-16 08:43:36 +02:00
Stan Silvert
0b881862c6 Authorize receiver-driven SSF subject adds per subject (#53765)
* Authorize receiver-driven SSF subject adds per subject

Any SSF receiver with ssf.manage could subscribe to security events for
every user in the realm, since subjects/add only verified stream
ownership. Receiver adds are now gated by ssf.receiverSubjectAddPolicy
(AUTHENTICATED by default, ANY, NONE), and can no longer override a
subject an administrator explicitly ignored.

Fixes #53695

Signed-off-by: Stan Silvert <ssilvert@redhat.com>
Assisted-by: Claude Opus 5.5

* Ignore expired sessions in the SSF AUTHENTICATED add check

Session streams can return user and client sessions past their idle or
max lifespan, so an expired relationship still let a receiver add the
user. Require the same session validity checks as token refresh.

Also restore the default add policy in test cleanup by blanking the
attribute: a client update keeps attributes omitted from the
representation, so ANY/NONE leaked into later tests.

Fixes #53695

Signed-off-by: Stan Silvert <ssilvert@redhat.com>
Assisted-by: Claude Opus 5.5

---------

Signed-off-by: Stan Silvert <ssilvert@redhat.com>
2026-10-14 14:45:17 -04:00
Manas Choksi
adf2dd6104 Record the start of a periodic user-storage sync run as lastSync
The periodic sync gate (isSyncPeriod) skipped the next timer tick whenever
a sync run took longer than about a second, so the effective sync period
doubled. The timer schedules each run 'period' seconds after the start of
the previous run, but lastSync recorded the time the previous run
finished, so the tick landed less than period - 1 seconds after the
recorded time and was ignored.

Capture the start of the sync run before executing it and stamp that
into lastSync when the run succeeds, mirroring the timer's start-anchored
scheduling. A run that throws still leaves lastSync untouched, so the
next tick retries as before. Incremental sync also no longer misses
entries changed while the previous run was in progress, as syncSince now
receives the start of the previous run instead of its finish.

Fixes keycloak#53930

Signed-off-by: choksi2212 <choksi2212@users.noreply.github.com>
2026-10-14 15:17:33 -03:00
andymunro
ad10f341d1 Conditionalize reference to github to only be upstream (#53511)
Closes #53510

Signed-off-by: AndyMunro <amunro@redhat.com>
2026-10-14 17:40:15 +02:00
vramik
c104900549 Treat the admin-permissions client as an internal client
Closes #51630

Co-authored-by: waterWang <waterwang@users.noreply.github.com>
Signed-off-by: vramik <vramik@redhat.com>
2026-10-14 08:02:36 -03:00
Martin Kanis
77b0ffa825 Unverified broker email can satisfy an organization domain gate (#53858)
* Unverified broker email can satisfy an organization domain gate

Closes #53815

Signed-off-by: Martin Kanis <mkanis@ibm.com>
2026-10-14 07:59:58 -03:00
Alexander Schwartz
9703e101da Adjust links to upstream/downstream for the upcoming 26.8 release
Closes #53819

Signed-off-by: AndyMunro <amunro@redhat.com>
Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
Co-authored-by: AndyMunro <amunro@redhat.com>
2026-10-14 12:55:03 +02:00
Martin Kanis
19c5879a4a Realm client-session stats disclose hidden clients under FGAP v2
Closes #50917

Signed-off-by: Martin Kanis <mkanis@ibm.com>
2026-10-14 07:48:46 -03:00
erenkan
74d9c74a01 Validate workflow schedule and restart position values
Closes #53849

Signed-off-by: erenkan <eren@keymate.io>
2026-10-14 07:20:23 -03:00
Alexander Schwartz
e3c01e6a76 Fix callout numbering for nested blocks
Closes #53889

Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-13 14:54:21 -03:00
Giuseppe Graziano
f505504307 ssfr check for cimd
Closes #53812

Signed-off-by: Giuseppe Graziano <g.graziano94@gmail.com>
2026-10-13 16:06:13 +02:00
Alexis Rico
3fcada6036 Document accepting an organization invitation through an identity provider
The invitation docs only described the registration form. Explain that the
invitee can return to the login page and authenticate through an identity
provider instead, that the resulting membership is unmanaged, and that the
email of the account has to match the address the invitation was sent to.

Note that the invitation is accepted through any identity provider in the
realm, and that a user already linked to the provider skips first broker
login, so the invitation stays pending until it expires.

Signed-off-by: Alexis Rico <sferadev@gmail.com>
2026-10-13 07:36:51 -03:00
andymunro
2478d0b005 Conditionalize enhancement request suggestion (#53508)
Closes #53507

Signed-off-by: AndyMunro <amunro@redhat.com>
2026-10-13 12:24:36 +02:00
Erik Jan de Wit
4c3aaed150 Require client signature for SAML SessionIndex back-channel SLO (#53658)
Closes #53535.


Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
2026-10-13 09:19:38 +02:00
andymunro
7074a968fd Fix link to database documentation (#53570)
Closes #53569

Signed-off-by: AndyMunro <amunro@redhat.com>
2026-10-12 16:46:35 +02:00
andymunro
39fe4a5e94 Fix broken vault link for downstream (#53568)
Closes #53567

Signed-off-by: AndyMunro <amunro@redhat.com>
2026-10-12 15:03:04 +02:00
Eren Kan
f38eea8493 Reject workflow expressions with unrecognized characters (#53794)
* Reject workflow expressions with unrecognized characters

Closes #53790

Signed-off-by: erenkan <eren@keymate.io>
2026-10-09 15:29:22 -03:00
Yang Bai
27fd923ddf Declare null, not undefined, for admin client lookups that tolerate a 404
With catchNotFound the agent returns null for a missing resource, but most
of these methods declared T | undefined, and several declared no missing
case at all: findProtocolMapperById, findProtocolMappersByProtocol,
roles.findUsersWithRole, workflows.scheduled, getRequiredActionForAlias
(any) and the two policy lookups (void). The admin console now converts
the null where it stores the result as T | undefined, filters it out of
the user, role and policy selections, and shows an empty list where a
missing role or user made the Users in role and Workflows tabs fail.

Closes #43371

Signed-off-by: Yang Bai <271969568+ybai08@users.noreply.github.com>
2026-10-09 12:00:51 -03:00
Erik Jan de Wit
17e1425ab6 fixes CVE-2026-15943 by dropping when other values are changed (#53411)
* fixes CVE-2026-15943 by dropping when other values are changed

fixes: #50945
Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
2026-10-09 08:18:21 -03:00
Luca Tronchin
8539464b05 Resolve properties in the notify-user step subject
Closes #53312

The subject of the notify-user step was passed to the email provider
verbatim, where it ends up as a java.text.MessageFormat pattern when it
does not match a key from the email theme message bundle. A subject such
as "${user.firstName}, log in to keep your account active" therefore
failed with:

    IllegalArgumentException: can't parse argument number: user.firstName

The email was never sent, the step was still marked as completed, and
the following steps of the workflow ran as usual.

Resolve properties in the subject with the same resolver already used
for the custom message, and escape the resulting text so that it is not
interpreted as a MessageFormat pattern. Escaping is a no-op for a text
without MessageFormat meta characters, so a subject referencing a key
from the message bundle keeps being resolved and localized as before.
It also makes a subject with a single quote, like "your account's
review", keep its quote instead of silently losing it.

Signed-off-by: Luca Tronchin <ltronky@gmail.com>
2026-10-09 08:07:58 -03:00
andymunro
7a4a00a38c Fix obsolete link (#53572)
Closes #53571

Signed-off-by: AndyMunro <amunro@redhat.com>
2026-10-09 12:37:09 +02:00
AndyMunro
19e6f6e10c Correct links that fail or are coded only for upstream
Closes #53624

Signed-off-by: AndyMunro <amunro@redhat.com>
2026-10-09 11:47:30 +02:00
copilot-swe-agent[bot]
dfdbecacc2 Fix EntityManager API documentation link
Co-authored-by: vmuzikar <13906855+vmuzikar@users.noreply.github.com>
Signed-off-by: Václav Muzikář <vmuzikar@ibm.com>
Closes: #53757
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-08 16:04:58 -03:00
vramik
85cb6f17bb non-imported federated users returned in search results for query-users-only delegated admins
Closes #53693

Signed-off-by: vramik <vramik@redhat.com>
2026-10-08 11:29:44 -03:00
Tomas Kyjovsky
8dc9412247 Move the note about mandatory signature validation for OIDC IdP backchannel logout into changes-27_0_0.adoc
Signed-off-by: Tomas Kyjovsky <tkyjovsk@ibm.com>
2026-10-08 10:03:00 -03:00
Ricardo Martin
8d330a06b5 Limit the size in CRL and OCSP http responses (#53697)
Closes #52063

Signed-off-by: rmartinc <rmartinc@redhat.com>
2026-10-08 13:28:53 +02:00
Erik Jan de Wit
a666b23f71 Require STARTTLS when SMTP starttls is enabled (#53675)
Prevent opportunistic STARTTLS downgrade attacks by setting
mail.smtp.starttls.required=true whenever starttls is configured,
so AUTH and message data are never sent in plaintext.

Closes #53674

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
2026-10-07 18:34:30 +02:00
vramik
4c746a54c6 Organization invitation redirectUrl is not validated against the account client allowlist, leaking a new user's authorization code
Closes #53058

Signed-off-by: vramik <vramik@redhat.com>
2026-10-07 09:12:23 -03:00
Michal Vavřík
78719c4127 fix: filter scope mapping listings by role visibility
closes: https://github.com/keycloak/keycloak/issues/53480

Signed-off-by: Michal Vavřík <dev@michalvavrik.net>
2026-10-07 07:45:19 -03:00
Michal Vavřík
b919792f7d fix: restrict CRL files to conf and omit CRL locations from responses
closes: #53419

Signed-off-by: Michal Vavřík <dev@michalvavrik.net>
2026-10-07 11:57:18 +02:00
Michal Vavřík
46c524b252 docs: move semicolon query parameter upgrade note to 26.8.1 (#53622)
The fix from #53502 is backported to 26.8.1, so the upgrade guide note belongs under "Migrating to 26.8.1" rather than 27.0.0.

Signed-off-by: Michal Vavřík <dev@michalvavrik.net>
2026-10-07 08:59:12 +02:00
Nuno Faria
ca2486472e Emit credential_id on UPDATE_CREDENTIAL events from built-in required actions (#50787)
* Emit credential_id on UPDATE_CREDENTIAL events from built-in required actions

UpdatePassword, UpdateTotp and WebAuthnRegister now set Details.CREDENTIAL_ID on the generic
UPDATE_CREDENTIAL event, matching REMOVE_CREDENTIAL which already carries the credential id. This
lets event consumers identify which credential row was created or updated when a user has multiple
credentials of the same type.

The OTP credential id is surfaced by hydrating it in OTPCredentialProvider.createCredential; the
WebAuthn id is read from the createCredential return value. A password update, however, may be
handled entirely by a federated CredentialInputUpdater (e.g. LDAP in WRITABLE edit mode), in which
case nothing is written to the Keycloak credential store and there is no id to report.
SubjectCredentialManager therefore gains updateCredentialAndGet, which returns the credential
written to the Keycloak credential store, or an empty Optional when a user-storage provider handled
the write. UpdatePassword emits the detail only when a credential comes back.

CredentialInputUpdater gains a default updateCredentialAndGet returning a CredentialUpdate: whether
the updater handled the input, and the credential it wrote to the Keycloak credential store, if
any. The default delegates to updateCredential and reports no credential, so an updater writing to
its own store, or one without data about what it wrote, leaves the event without an id.
PasswordCredentialProvider overrides it and hands over the model produced by the write itself:
nothing is read back afterwards, so no concurrent password write can make the event report another
row, and the required action needs neither a pre-update snapshot nor a hash or timestamp comparison
to find out whether the local row changed. UserCredentialManager asks each updater once and keeps
the first outcome that was handled, so updateCredential keeps reporting what it reported before.

SubjectCredentialManagerCacheAdapter invalidates the cached user for updateCredentialAndGet as it
does for every other mutating method, so the write path does not read credentials through the user
cache.

RecoveryAuthnCodesAction emits the id as well. CredentialHelper.createRecoveryCodesCredential now
returns the credential it created in the local storage, or null when the userStorage handled the
write, so the action applies the same emit-only-when-locally-stored rule as the other required
actions.

The tests compare the emitted value with the credential id actually persisted for the user, rather
than only asserting that some id is present. RequiredActionUpdatePasswordFederatedTest covers the
federated branch: a user whose password is held by a user-storage provider, with a stale password
row left in the Keycloak DB, must not get that untouched row's id on the event.
WebAuthnRegisterAndLoginTest asserts that the deprecated cloned event still carries the details it
had before, as the id is added to the generic event only after that clone is emitted.

The release notes mention the new event detail. The migration guide needs no entry, as the touched
SPI interfaces only gain default methods.

Closes #50247

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Nuno Faria <nuno.faria@getflip.com>

* Fix release notes, avoid executing other updater

Signed-off-by: Martin Bartoš <mabartos@redhat.com>

---------

Signed-off-by: Nuno Faria <nuno.faria@getflip.com>
Signed-off-by: Martin Bartoš <mabartos@redhat.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Martin Bartoš <mabartos@redhat.com>
2026-10-07 08:39:56 +02:00
Ruchika Jha
10a4c298de Normalize proxy-trusted-addresses to CIDR notation to prevent UDP socket leak
Closes #52968

Signed-off-by: Ruchika <ruchika.jha1@ibm.com>
Signed-off-by: Ruchika <Ruchika.Jha1@ibm.com>
Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
Co-authored-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-07 05:49:38 +00:00
Michal Vavřík
9b20364c5e fix(saml broker http redirect binding): don't use semicolon as query param delimiter
closes: keycloak#53354

Signed-off-by: Michal Vavřík <dev@michalvavrik.net>
2026-10-06 10:56:01 -03:00
Ricardo Martin
5d3d3d9980 Do not chek critical status for key usage validations (#53109)
* Do not chek critical status for key usage validations.
Provide perovider options for backwards compatibility.
Closes #52982

Signed-off-by: rmartinc <rmartinc@redhat.com>

* Move X509BrowserLoginTest and X509DirectGrantTest to the new CI
Closes #52982

Signed-off-by: rmartinc <rmartinc@redhat.com>

* Migrate tests to the new CI
Closes #52982

Signed-off-by: rmartinc <rmartinc@redhat.com>

* Do not initialize stores is tls is not enabled in ManagedCertificates
Closes #52982

Signed-off-by: rmartinc <rmartinc@redhat.com>

---------

Signed-off-by: rmartinc <rmartinc@redhat.com>
2026-10-06 13:14:27 +02:00
Martin Kanis
34bcada22a Regression with Trust Email when the userinfo endpoint is used
Closes #53471

Signed-off-by: Martin Kanis <mkanis@ibm.com>
2026-10-06 07:52:05 -03:00
Marie Daly
a835f48ae1 ConditionalOtpFormAuthenticator skip-header rule behind isProxyTrusted() (#53299)
* ConditionalOtpFormAuthenticator skip-header rule behind isProxyTrusted()

Signed-off-by: Marie Daly <marie.daly1@ibm.com>

* Replace unit tests with integration tests using proxy-trusted-addresses realm config

Signed-off-by: Marie Daly <marie.daly1@ibm.com>

# Conflicts:
#	docs/documentation/upgrading/topics/changes/changes-26_8_1.adoc

# Conflicts:
#	tests/base/src/test/java/org/keycloak/tests/account/custom/CustomAuthFlowOTPTest.java
#	tests/base/src/test/java/org/keycloak/tests/oidc/AcrAuthFlowTest.java

# Conflicts:
#	docs/documentation/upgrading/topics/changes/changes-26_8_1.adoc

---------

Signed-off-by: Marie Daly <marie.daly1@ibm.com>
2026-10-06 11:49:53 +02:00
Ruchika Jha
5de819c7f5 MCv2 doc refinement
Closes #53556

Signed-off-by: Ruchika <ruchika.jha1@ibm.com>
Signed-off-by: Alexander Schwartz <alexander.schwartz@ibm.com>
Co-authored-by: Alexander Schwartz <alexander.schwartz@ibm.com>
2026-10-06 07:53:27 +00:00
Jimmy Chakkalakal
51b15061d2 Fix for failed Pipeline
Closes #53079

Signed-off-by: Jimmy Chakkalakal <jimmy.chakkalakal@ibm.com>
2026-10-06 09:06:30 +02:00