DATE:
AUTHOR:
Ory Team
Ory Hydra Ory Kratos Ory Keto Ory Polis Ory Elements Ory Enterprise License

Ory Hydra, Ory Kratos, Ory Keto, Ory Polis, Ory Elements v26.4.16 released

DATE:
AUTHOR: Ory Team

Ory Hydra

Configure outbound HTTP limits per feature

Hydra now supports shared outbound HTTP settings under default_http_client and feature-specific overrides for hooks, logout notifications, client key fetching, OpenID Connect Request Objects, sector identifiers, and the Kratos integration. Configure timeouts, retries, response-size limits, and private-IP restrictions without changing other integrations.

The legacy clients.http settings are deprecated and remain supported. Move them to default_http_client.private_ip_ranges, renaming disallow_private_ip_ranges to disallow and private_ip_exception_urls to exception_urls. Remove the old settings after migrating. Existing timeout and retry defaults remain unchanged.

When both old and new settings are present, feature-specific settings take precedence over default_http_client, which takes precedence over the legacy settings. An explicitly empty exception list clears inherited exceptions.

Breaking change

JWKS fetching, OpenID Connect Request Object fetching, back-channel logout, and sector identifier validation no longer use global or legacy private-IP exception URLs. Their HTTP client settings reject private_ip_ranges.exception_urls, including empty lists. When private-IP blocking is enabled, use publicly reachable endpoints for these client metadata URLs. Kratos and token hooks retain support for private-IP exceptions.

Token hooks, refresh-token hooks, and sector identifier responses retain their default 5 MiB response limit. Reading beyond that limit now reports a response-size error instead of end-of-file, so error details may change.

Revoking consent revokes all of the subject's tokens

Revoking a subject's OAuth2 consent sessions now revokes every access and refresh token issued to that subject, or to that subject and client when you revoke consent for a single client, as documented. Before, Ory Open Source only revoked tokens issued for a consent session that still existed.

Breaking changes

Tokens that never belonged to a consent session are revoked too, such as tokens from the resource owner password credentials grant and the JWT bearer grant. If you rely on such tokens staying valid when you revoke the subject's consent, issue new tokens afterwards or use a different subject for them.


This is now available for the Ory Enterprise License and will be part of the next Ory Open Source release.


Ory Kratos

Login failure web hooks receive the matched identity

When Ory Kratos Identities matches a failed login attempt to an identity, the login failure web hook now gets that identity in ctx.identity, as the login after web hooks do. Your endpoint can read the identity's external_id, traits, and public metadata without calling the admin API for each failed login. Credential secrets and admin metadata aren't included.


This is now available on Ory Network and for the Ory Enterprise License.


Ory Keto

Plan for Keto relationship index builds when upgrading

On PostgreSQL, CockroachDB, YugabyteDB, and SQLite, keto migrate up adds four partial indexes on keto_relation_tuples for relationship pagination. MySQL indexes do not change.

IndexColumnsRowsketo_relation_tuples_forward_sets_idxnid, namespace, object, relation, subject_set_namespace, subject_set_relation, subject_set_object, shard_idsubject_id IS NULLketo_relation_tuples_forward_ids_idxnid, namespace, object, relation, subject_id, shard_idall subject_set_* NULLketo_relation_tuples_reverse_sets_idxnid, subject_set_namespace, subject_set_object, subject_set_relation, relation, namespace, object, shard_idsubject_id IS NULLketo_relation_tuples_reverse_ids_idxnid, subject_id, relation, namespace, object, shard_idall subject_set_* NULL

Each build reads the whole table, so allow time and disk headroom on large installations. PostgreSQL, CockroachDB, and YugabyteDB build without locking the table. The existing indexes stay, so each tuple is in five secondary indexes instead of three until a later release removes the old ones; include the added write and storage cost in your capacity planning.

If a PostgreSQL build is interrupted, it leaves an invalid index that a later migration run does not rebuild. Check pg_index.indisvalid and run REINDEX INDEX CONCURRENTLY <index name> to repair it.


This is now available for the Ory Enterprise License and will be part of the next Ory Open Source release.


Ory Polis

Restrict which SAML fields can supply the subject

You can now list which sources Ory Polis may use as the subject (sub) of a SAML login: a named attribute, the NameID (optionally limited to a format such as persistent), or a hash of the email. Set SAML_SUBJECT_SOURCES for the deployment or subjectSources on a connection. A login whose assertion carries none of the listed sources fails instead of falling back to another identifier.

The setting limits where the subject comes from. It does not make a source unique. If you list a source that your identity provider sends with the same value for every user, such as nameid when the NameID is shared, those users still get one subject. List only sources that are unique for each user.

Without the setting, the subject is resolved as before. Changing the sources of an existing connection can change the subject of existing users. A user whose subject came from a source you removed can no longer log in when the assertion carries no other listed source, and gets a different subject when it does.


This is now available for the Ory Enterprise License and will be part of the next Ory Open Source release.


Ory Elements

Ory Elements proxies keep session cookies on the app's host

The Ory proxy of @ory/ssr, @ory/nextjs, @ory/react-router, and @ory/tanstack-start now passes the cookies Ory returns to the browser without a Domain attribute, so the browser sends them only to the host that set them, for example app.example.com. Before, the proxy set Domain to the registrable domain, such as example.com, and every host under it received the session cookie.

The proxy now sets the Secure attribute on every cookie it returns over HTTPS, including when a proxy in front of the app reports HTTPS in X-Forwarded-Proto, and otherwise keeps it as Ory sent it. It removes Secure only for plain-HTTP requests to localhost, *.localhost, 127.0.0.1, or [::1], so local development keeps working in every browser.

Breaking changes

If another host under the same domain reads the session cookie the proxy set, for example an API at api.example.com that calls /sessions/whoami with the cookie from app.example.com, set forceCookieDomain to the shared domain in the proxy options:

createOryMiddleware({
  forceCookieDomain: "example.com",
  trustedOrigins: ["https://app.example.com"],
})

Browsers keep a session cookie that an earlier version of the proxy set on the registrable domain until it expires. A user who logs out and in again before then has two session cookies, and Ory reads the old one, so the login seems to fail. Set forceCookieDomain to that domain to keep the previous scope, or wait for the old cookies to expire. Clearing cookies fixes it right away.

Testing over plain HTTP on a host other than localhost, such as a LAN address, no longer stores the session cookie. Use HTTPS or localhost instead.


This is now available on Ory Network, for the Ory Enterprise License, and will be part of the next Ory Open Source release.


Ory Network, Ory Oathkeeper, and Ory Terraform

No significant changes in this release.

Powered by LaunchNotes