From 09cf7cf0ae45edce828d8b434ab178dccce6fe06 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Mon, 2 Feb 2026 10:47:56 +0100 Subject: [PATCH] feat(oauth/oidc): move token exchange from beta to GA (#11475) # Which Problems Are Solved This PR marks the OAuth2 Token Exchange as general available (GA). # How the Problems Are Solved - API: - deprecated the feature toggle (to prevent breaking changes) in v2beta and v2 API - removed all related event logic and updated the projection interation - removed the toggle usage for token exchange - removed related translations - Management Console: - removed the feature toggle and its translations - Docs: - removed all beta labels and feature toggle notes # Additional Changes - removed unused `Errors.WebKey.FeatureDisabled` translations # Additional Context - closes #11114 --------- Co-authored-by: Marco A. --- .../content/apis/openidoauth/endpoints.mdx | 5 --- .../guides/integrate/token-exchange.mdx | 24 +------------ .../components/features/features.component.ts | 1 - console/src/assets/i18n/ar.json | 2 -- console/src/assets/i18n/bg.json | 2 -- console/src/assets/i18n/cs.json | 2 -- console/src/assets/i18n/de.json | 2 -- console/src/assets/i18n/en.json | 2 -- console/src/assets/i18n/es.json | 2 -- console/src/assets/i18n/fr.json | 2 -- console/src/assets/i18n/hu.json | 2 -- console/src/assets/i18n/id.json | 2 -- console/src/assets/i18n/it.json | 2 -- console/src/assets/i18n/ja.json | 2 -- console/src/assets/i18n/ko.json | 2 -- console/src/assets/i18n/mk.json | 2 -- console/src/assets/i18n/nl.json | 2 -- console/src/assets/i18n/pl.json | 2 -- console/src/assets/i18n/pt.json | 2 -- console/src/assets/i18n/ro.json | 2 -- console/src/assets/i18n/ru.json | 2 -- console/src/assets/i18n/sv.json | 2 -- console/src/assets/i18n/tr.json | 2 -- console/src/assets/i18n/uk.json | 2 -- console/src/assets/i18n/zh.json | 2 -- internal/api/grpc/feature/v2/converter.go | 24 +++++++------ .../api/grpc/feature/v2/converter_test.go | 16 ++------- internal/api/grpc/feature/v2beta/converter.go | 24 +++++++------ .../api/grpc/feature/v2beta/converter_test.go | 16 ++------- .../integration_test/token_exchange_test.go | 35 ------------------- internal/api/oidc/token_exchange.go | 3 -- internal/command/instance.go | 2 -- internal/command/instance_features.go | 2 -- internal/command/instance_features_model.go | 5 --- .../command/instance_features_model_test.go | 9 ----- internal/command/instance_features_test.go | 7 ---- internal/command/instance_test.go | 4 --- internal/command/system_features.go | 2 -- internal/command/system_features_model.go | 5 --- internal/command/system_features_test.go | 1 - internal/feature/feature.go | 4 +-- internal/feature/key_enumer.go | 17 ++++----- internal/query/instance_by_domain.sql | 4 +-- internal/query/instance_by_id.sql | 4 +-- internal/query/instance_features.go | 1 - internal/query/instance_features_model.go | 4 --- .../query/projection/instance_features.go | 6 +--- .../projection/instance_features_test.go | 8 ++--- internal/query/projection/system_features.go | 6 +--- .../query/projection/system_features_test.go | 4 +-- internal/query/system_features.go | 1 - internal/query/system_features_model.go | 3 -- .../feature/feature_v2/eventstore.go | 2 -- .../repository/feature/feature_v2/feature.go | 2 -- internal/static/i18n/ar.yaml | 2 -- internal/static/i18n/bg.yaml | 2 -- internal/static/i18n/cs.yaml | 2 -- internal/static/i18n/de.yaml | 2 -- internal/static/i18n/en.yaml | 2 -- internal/static/i18n/es.yaml | 2 -- internal/static/i18n/fr.yaml | 2 -- internal/static/i18n/hu.yaml | 2 -- internal/static/i18n/id.yaml | 2 -- internal/static/i18n/it.yaml | 2 -- internal/static/i18n/ja.yaml | 2 -- internal/static/i18n/ko.yaml | 2 -- internal/static/i18n/mk.yaml | 2 -- internal/static/i18n/nl.yaml | 2 -- internal/static/i18n/pl.yaml | 2 -- internal/static/i18n/pt.yaml | 2 -- internal/static/i18n/ro.yaml | 2 -- internal/static/i18n/ru.yaml | 2 -- internal/static/i18n/sv.yaml | 2 -- internal/static/i18n/tr.yaml | 2 -- internal/static/i18n/uk.yaml | 2 -- internal/static/i18n/zh.yaml | 2 -- proto/zitadel/feature/v2/instance.proto | 21 ++++++----- proto/zitadel/feature/v2/system.proto | 21 ++++++----- proto/zitadel/feature/v2beta/instance.proto | 21 ++++++----- proto/zitadel/feature/v2beta/system.proto | 21 ++++++----- 80 files changed, 104 insertions(+), 319 deletions(-) diff --git a/apps/docs/content/apis/openidoauth/endpoints.mdx b/apps/docs/content/apis/openidoauth/endpoints.mdx index 51018edca..1c158f161 100644 --- a/apps/docs/content/apis/openidoauth/endpoints.mdx +++ b/apps/docs/content/apis/openidoauth/endpoints.mdx @@ -106,7 +106,6 @@ no additional parameters required #### Response modes -ZITADEL supports the following `response_mode` values. When no response mode is requested, the response mode is chosen based on the configured Response Type of the application. ZITADEL supports the following `response_mode` values. When no response mode is requested, the response mode is chosen based on the configured Response Type of the application. As per [OpenID Connect Core 1.0, Section 3.1.2.1](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest): @@ -391,10 +390,6 @@ curl --request POST \ The Token Exchange grant implements [RFC 8693, OAuth 2.0 Token Exchange](https://www.rfc-editor.org/rfc/rfc8693) and can be used to exchange tokens to a different scope, audience or subject. Changing the subject of an authenticated token is called impersonation or delegation. ZITADEL also provides a [token exchange guide](/guides/integrate/token-exchange) with more details on using the Token Exchange Grant. - -Token Exchange is currently an experimental [beta](https://help.zitadel.com/zitadel-software-release-cycle#beta) feature. Be sure to enable it on the [feature API](/guides/integrate/token-exchange#feature-api) before using it. - - #### Request parameters diff --git a/apps/docs/content/guides/integrate/token-exchange.mdx b/apps/docs/content/guides/integrate/token-exchange.mdx index be90a5cef..f95ed6339 100644 --- a/apps/docs/content/guides/integrate/token-exchange.mdx +++ b/apps/docs/content/guides/integrate/token-exchange.mdx @@ -1,6 +1,6 @@ --- title: Impersonation and delegation using Token Exchange -sidebar_label: Token Exchange [Beta] +sidebar_label: Token Exchange --- import TokenExchangeTypes from "../../apis/openidoauth/_token_exchange_types.mdx"; @@ -9,12 +9,6 @@ import TokenExchangeResponse from "../../apis/openidoauth/_token_exchange_respon The Token Exchange grant implements [RFC 8693, OAuth 2.0 Token Exchange](https://www.rfc-editor.org/rfc/rfc8693) and can be used to exchange tokens to a different scope, audience or subject. Changing the subject of an authenticated token is called impersonation or delegation. This guide will explain how token exchange is implemented inside ZITADEL and gives some usage examples. - -Token Exchange is currently an [experimental beta](https://help.zitadel.com/zitadel-software-release-cycle#beta) feature. Be sure to enable it on the [feature API](#feature-api) before using it. - -Test the feature and add improvement or bug reports directly to the [github repository](https://github.com/zitadel/zitadel) or let us know your general feedback in the [discord thread](https://discord.com/channels/927474939156643850/1333448892083208262)! - - In this guide we assume that the application performing the token exchange is already in possession of tokens. You should already have a good understanding on the following topics before starting with this guide: - Integrate your app with the [OIDC flow](/guides/integrate/login/oidc/login-users) to obtain tokens @@ -184,22 +178,6 @@ First we will cover "simple" Token Exchange which only involves exchanging the ` These preparation steps are needed for all Token Exchange interaction, including impersonation. -#### Feature API - -As Token Exchange is still a beta feature, the feature needs to be enabled for your instance by an `IAM_OWNER` first: - -```bash -curl -L -X PUT 'https://${CUSTOM_DOMAIN}/v2/features/instance' \ --H 'Content-Type: application/json' \ --H 'Accept: application/json' \ --H 'Authorization: Bearer ' \ ---data-raw '{ - "oidcTokenExchange": true -}' -``` - -If you are self-hosting, you can also enable the feature for the complete system (all instances) using the [set system level features](/reference/api/feature/zitadel.feature.v2.FeatureService.SetSystemFeatures) endpoint. - #### Application Next we need to select an application that is allowed to perform Token Exchange. As with the other grant types, we need to enable the `urn:ietf:params:oauth:grant-type:token-exchange` grant type. diff --git a/console/src/app/components/features/features.component.ts b/console/src/app/components/features/features.component.ts index 7de85f1a5..2e2aa45ed 100644 --- a/console/src/app/components/features/features.component.ts +++ b/console/src/app/components/features/features.component.ts @@ -33,7 +33,6 @@ const FEATURE_KEYS = [ // 'improvedPerformance', 'loginDefaultOrg', 'oidcSingleV1SessionTermination', - 'oidcTokenExchange', 'permissionCheckV2', 'userSchema', 'enableRelationalTables', diff --git a/console/src/assets/i18n/ar.json b/console/src/assets/i18n/ar.json index eb82da79c..aac660212 100644 --- a/console/src/assets/i18n/ar.json +++ b/console/src/assets/i18n/ar.json @@ -1631,8 +1631,6 @@ "FEATURES": { "LOGINDEFAULTORG": "تسجيل الدخول للمنظمة الافتراضية", "LOGINDEFAULTORG_DESCRIPTION": "ستستخدم واجهة تسجيل الدخول إعدادات المنظمة الافتراضية (وليس من المثيل) إذا لم يتم تعيين سياق منظمة", - "OIDCTOKENEXCHANGE": "تبادل رموز OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "تمكين نوع المنح التجريبي urn:ietf:params:oauth:grant-type:token-exchange لنقطة نهاية رمز OIDC. يمكن استخدام تبادل الرموز لطلب رموز بنطاق أقل أو انتحال شخصية مستخدمين آخرين. انظر سياسة الأمان للسماح بالانتحال على مثيل.", "USERSCHEMA": "مخطط المستخدم", "USERSCHEMA_DESCRIPTION": "تسمح مخططات المستخدم بإدارة مخططات بيانات المستخدم. إذا تم تمكين العلامة، فستتمكن من استخدام API الجديد وميزاته.", "ACTIONS": "الإجراءات", diff --git a/console/src/assets/i18n/bg.json b/console/src/assets/i18n/bg.json index 106d3d4fe..a6007804e 100644 --- a/console/src/assets/i18n/bg.json +++ b/console/src/assets/i18n/bg.json @@ -1637,8 +1637,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Организация по подразбиране за влизане", "LOGINDEFAULTORG_DESCRIPTION": "Потребителският интерфейс за влизане ще използва настройките на организацията по подразбиране (а не на инстанцията), ако не е зададен контекст на организация.", - "OIDCTOKENEXCHANGE": "Обмяна на токени OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Активиране на експерименталния тип на дарение urn:ietf:params:oauth:grant-type:token-exchange за краен пункт на токен OIDC. Обменът на токени може да се използва за заявка на токени с по-малък обхват или за имперсонализиране на други потребители. Вижте политиката за сигурност, за да разрешите имперсонализацията на инстанция.", "USERSCHEMA": "Потребителска схема", "USERSCHEMA_DESCRIPTION": "Потребителските схеми позволяват управление на данните за схемите на потребителите. Ако е активиран флагът, ще можете да използвате новото API и неговите функции.", "ACTIONS": "Действия", diff --git a/console/src/assets/i18n/cs.json b/console/src/assets/i18n/cs.json index 302afc1ce..3c5e44481 100644 --- a/console/src/assets/i18n/cs.json +++ b/console/src/assets/i18n/cs.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Výchozí organizace pro přihlášení", "LOGINDEFAULTORG_DESCRIPTION": "Přihlašovací rozhraní použije nastavení výchozí organizace (a ne z instance), pokud není nastaven žádný kontext organizace.", - "OIDCTOKENEXCHANGE": "Výměna tokenů OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Povolit experimentální typ udělení urn:ietf:params:oauth:grant-type:token-exchange pro bod tokenového bodu OIDC. Výměna tokenů lze použít k žádosti o tokeny s menším rozsahem nebo k impersonaci jiných uživatelů. Podívejte se na bezpečnostní politiku, abyste umožnili impersonaci na instanci.", "USERSCHEMA": "Schéma uživatele", "USERSCHEMA_DESCRIPTION": "Schémata uživatelů umožňují spravovat datová schémata uživatelů. Pokud je příznak povolen, budete moci používat nové API a jeho funkce.", "ACTIONS": "Akce", diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index 654c2e2c3..61b691bb6 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Standardorganisation für die Anmeldung", "LOGINDEFAULTORG_DESCRIPTION": "Die Anmelde-Benutzeroberfläche verwendet die Einstellungen der Standardorganisation (und nicht von der Instanz), wenn kein Organisationskontext festgelegt ist.", - "OIDCTOKENEXCHANGE": "OIDC Token-Austausch", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Aktivieren Sie den experimentellen urn:ietf:params:oauth:grant-type:token-exchange-Grant-Typ für den OIDC-Token-Endpunkt. Der Token-Austausch kann verwendet werden, um Token mit einem geringeren Umfang anzufordern oder andere Benutzer zu impersonieren. Siehe die Sicherheitsrichtlinie, um die Impersonation auf einer Instanz zu erlauben.", "USERSCHEMA": "Benutzerschema", "USERSCHEMA_DESCRIPTION": "Benutzerschemata ermöglichen das Verwalten von Datenschemata von Benutzern. Wenn die Flagge aktiviert ist, können Sie die neue API und ihre Funktionen verwenden.", "ACTIONS": "Aktionen", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index bdd887748..9e6d13471 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -1639,8 +1639,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Login Default Org", "LOGINDEFAULTORG_DESCRIPTION": "The login UI will use the settings of the default org (and not from the instance) if no organization context is set", - "OIDCTOKENEXCHANGE": "OIDC Token Exchange", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Enable the experimental urn:ietf:params:oauth:grant-type:token-exchange grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance.", "USERSCHEMA": "User Schema", "USERSCHEMA_DESCRIPTION": "User Schemas allow to manage data schemas of user. If the flag is enabled, you'll be able to use the new API and its features.", "ACTIONS": "Actions", diff --git a/console/src/assets/i18n/es.json b/console/src/assets/i18n/es.json index 8ded7df76..6e830fc67 100644 --- a/console/src/assets/i18n/es.json +++ b/console/src/assets/i18n/es.json @@ -1636,8 +1636,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Organización predeterminada de inicio de sesión", "LOGINDEFAULTORG_DESCRIPTION": "La interfaz de inicio de sesión utilizará la configuración de la organización predeterminada (y no de la instancia) si no se establece ningún contexto de organización.", - "OIDCTOKENEXCHANGE": "Intercambio de tokens OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Habilita el tipo de concesión experimental urn:ietf:params:oauth:grant-type:token-exchange para el punto de extremo de token OIDC. El intercambio de tokens se puede utilizar para solicitar tokens con un alcance menor o suplantar a otros usuarios. Consulta la política de seguridad para permitir la suplantación en una instancia.", "USERSCHEMA": "Esquema de usuario", "USERSCHEMA_DESCRIPTION": "Los esquemas de usuario permiten gestionar los esquemas de datos de los usuarios. Si se activa la bandera, podrás utilizar la nueva API y sus funciones.", "ACTIONS": "Acciones", diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index b814cd3a4..89fbde080 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Organisation par défaut de connexion", "LOGINDEFAULTORG_DESCRIPTION": "L'interface de connexion utilisera les paramètres de l'organisation par défaut (et non de l'instance) si aucun contexte d'organisation n'est défini.", - "OIDCTOKENEXCHANGE": "Échange de jetons OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Activez le type d'octroi expérimental urn:ietf:params:oauth:grant-type:token-exchange pour le point de terminaison de jeton OIDC. L'échange de jetons peut être utilisé pour demander des jetons avec une portée moindre ou pour usurper d'autres utilisateurs. Consultez la politique de sécurité pour autoriser l'usurpation sur une instance.", "USERSCHEMA": "Schéma utilisateur", "USERSCHEMA_DESCRIPTION": "Les schémas utilisateur permettent de gérer les schémas de données des utilisateurs. Si le drapeau est activé, vous pourrez utiliser la nouvelle API et ses fonctionnalités.", "ACTIONS": "Actions", diff --git a/console/src/assets/i18n/hu.json b/console/src/assets/i18n/hu.json index 13a8fd931..35b790d30 100644 --- a/console/src/assets/i18n/hu.json +++ b/console/src/assets/i18n/hu.json @@ -1633,8 +1633,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Alapértelmezett Org bejelentkezés", "LOGINDEFAULTORG_DESCRIPTION": "A bejelentkezési felület az alapértelmezett org beállításait fogja használni (és nem az instance-tól), ha nincs megadva szervezeti kontextus", - "OIDCTOKENEXCHANGE": "OIDC Token Exchange", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Engedélyezd a kísérleti urn:ietf:params:oauth:grant-type:token-exchange támogatását az OIDC token végpont számára. A token csere használható kisebb hatókörű tokenek kérésére vagy más felhasználók megszemélyesítésére. Tekintsd meg a biztonsági irányelvet az impersonáció engedélyezéséhez egy példányon.", "USERSCHEMA": "Felhasználói Séma", "USERSCHEMA_DESCRIPTION": "A Felhasználói Sémák lehetővé teszik a felhasználói adat sémák kezelését. Ha az opció engedélyezve van, használhatod az új API-t és annak funkcióit.", "ACTIONS": "Műveletek", diff --git a/console/src/assets/i18n/id.json b/console/src/assets/i18n/id.json index b53755c2c..32d891d4e 100644 --- a/console/src/assets/i18n/id.json +++ b/console/src/assets/i18n/id.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Masuk Organisasi Default", "LOGINDEFAULTORG_DESCRIPTION": "UI login akan menggunakan pengaturan organisasi default (dan bukan dari instance) jika tidak ada konteks organisasi yang ditetapkan", - "OIDCTOKENEXCHANGE": "Pertukaran Token OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Aktifkan jenis pemberian urn:ietf:params:oauth:grant-type:token-exchange eksperimental untuk titik akhir token OIDC. Pertukaran token dapat digunakan untuk meminta token dengan cakupan yang lebih kecil atau menyamar sebagai pengguna lain. Lihat kebijakan keamanan untuk mengizinkan peniruan identitas pada sebuah instans.", "USERSCHEMA": "Skema Pengguna", "USERSCHEMA_DESCRIPTION": "Skema Pengguna memungkinkan untuk mengelola skema data pengguna. Jika tanda ini diaktifkan, Anda akan dapat menggunakan API baru dan fitur-fiturnya.", "ACTIONS": "Tindakan", diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index d5b7b5749..10c85b59f 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Organizzazione predefinita per l'accesso", "LOGINDEFAULTORG_DESCRIPTION": "L'interfaccia di accesso utilizzerà le impostazioni dell'organizzazione predefinita (e non dell'istanza) se non è impostato alcun contesto organizzativo.", - "OIDCTOKENEXCHANGE": "Scambio token OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Abilita il tipo di concessione sperimentale urn:ietf:params:oauth:grant-type:token-exchange per il punto finale del token OIDC. Lo scambio di token può essere utilizzato per richiedere token con uno scopo inferiore o impersonare altri utenti. Consultare la policy di sicurezza per consentire l'impersonificazione su un'istanza.", "USERSCHEMA": "Schema utente", "USERSCHEMA_DESCRIPTION": "Gli schemi utente consentono di gestire gli schemi di dati degli utenti. Se la flag è attivata, sarà possibile utilizzare la nuova API e le sue funzionalità.", "ACTIONS": "Azioni", diff --git a/console/src/assets/i18n/ja.json b/console/src/assets/i18n/ja.json index ea9d7195e..554a03677 100644 --- a/console/src/assets/i18n/ja.json +++ b/console/src/assets/i18n/ja.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "ログイン時の既定組織", "LOGINDEFAULTORG_DESCRIPTION": "組織コンテキストが設定されていない場合、ログイン UI は既定の組織の設定を使用します (インスタンスの設定ではなく)", - "OIDCTOKENEXCHANGE": "OIDC トークン交換", - "OIDCTOKENEXCHANGE_DESCRIPTION": "OIDC トークン エンドポイント用に実験的な urn:ietf:params:oauth:grant-type:token-exchange 付与タイプを有効にします。トークン交換は、より少ないスコープを持つトークンを要求するか、他のユーザーになりすますために使用できます。インスタンスでのなりすましを許可するには、セキュリティポリシーを参照してください。", "USERSCHEMA": "ユーザー スキーマ", "USERSCHEMA_DESCRIPTION": "ユーザー スキーマを使用すると、ユーザーのデータスキーマを管理できます。フラグが有効になっている場合、新しい APIとその機能を使用できます。", "ACTIONS": "アクション", diff --git a/console/src/assets/i18n/ko.json b/console/src/assets/i18n/ko.json index fe666f851..a8c65515b 100644 --- a/console/src/assets/i18n/ko.json +++ b/console/src/assets/i18n/ko.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "로그인 기본 조직", "LOGINDEFAULTORG_DESCRIPTION": "조직 컨텍스트가 설정되지 않은 경우 로그인 UI가 기본 조직의 설정을 사용합니다 (인스턴스에서 설정되지 않음).", - "OIDCTOKENEXCHANGE": "OIDC 토큰 교환", - "OIDCTOKENEXCHANGE_DESCRIPTION": "OIDC 토큰 엔드포인트의 실험적 urn:ietf:params:oauth:grant-type:token-exchange 허용을 활성화합니다. 토큰 교환을 통해 범위가 좁은 토큰을 요청하거나 다른 사용자를 가장할 수 있습니다. 인스턴스에서 가장을 허용하는 보안 정책을 확인하세요.", "USERSCHEMA": "사용자 스키마", "USERSCHEMA_DESCRIPTION": "사용자 스키마를 통해 사용자의 데이터 스키마를 관리할 수 있습니다. 플래그가 활성화되면 새 API 및 기능을 사용할 수 있습니다.", "ACTIONS": "액션", diff --git a/console/src/assets/i18n/mk.json b/console/src/assets/i18n/mk.json index a03bd6b42..18c4dc2ce 100644 --- a/console/src/assets/i18n/mk.json +++ b/console/src/assets/i18n/mk.json @@ -1636,8 +1636,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Најава Стандардна организација", "LOGINDEFAULTORG_DESCRIPTION": "Интерфејсот за најавување ќе ги користи поставките на стандардната организација (а не од примерот) ако не е поставен контекст на организацијата", - "OIDCTOKENEXCHANGE": "Размена на токени OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Овозможете го експерименталниот тип на грант urn:ietf:params:oauth:grant-type:token-exchange за крајната точка на токенот OIDC. Размената на токени може да се користи за барање токени со помал опсег или имитирање на други корисници. Погледнете ја безбедносната политика за да дозволите имитирање на пример.", "USERSCHEMA": "Корисничка шема", "USERSCHEMA_DESCRIPTION": "Корисничките шеми овозможуваат управување со податоци шеми на корисникот. Ако знамето е овозможено, ќе можете да го користите новиот API и неговите функции.", "ACTIONS": "Акции", diff --git a/console/src/assets/i18n/nl.json b/console/src/assets/i18n/nl.json index 0cd4b7f38..208b8b353 100644 --- a/console/src/assets/i18n/nl.json +++ b/console/src/assets/i18n/nl.json @@ -1635,8 +1635,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Standaard inlogorganisatie", "LOGINDEFAULTORG_DESCRIPTION": "Als er geen organisatiecontext is ingesteld, gebruikt de inlog-UI de instellingen van de standaardorganisatie (en niet van de instantie)", - "OIDCTOKENEXCHANGE": "OIDC-tokenuitwisseling", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Schakel het experimentele type verlening urn:ietf:params:oauth:grant-type:token-exchange in voor het OIDC-tokenendpoint. Tokenuitwisseling kan worden gebruikt om tokens met een kleinere scope op te vragen of om zich voor te doen als andere gebruikers. Raadpleeg het beveiligingsbeleid om impersonation op een instantie toe te staan.", "USERSCHEMA": "Gebruikerschema", "USERSCHEMA_DESCRIPTION": "Met gebruikerschema's kunt u de dataschema's van gebruikers beheren. Als de vlag is ingeschakeld, kunt u de nieuwe API en zijn functies gebruiken.", "ACTIONS": "Acties", diff --git a/console/src/assets/i18n/pl.json b/console/src/assets/i18n/pl.json index bca8d32be..062163b30 100644 --- a/console/src/assets/i18n/pl.json +++ b/console/src/assets/i18n/pl.json @@ -1634,8 +1634,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Domyślna Organizacja Logowania", "LOGINDEFAULTORG_DESCRIPTION": "Jeśli nie ustawiono kontekstu organizacji, interfejs logowania będzie używać ustawień domyślnej organizacji (a nie instancji)", - "OIDCTOKENEXCHANGE": "Wymiana Tokenów OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Włącz eksperymentalny typ grantu urn:ietf:params:oauth:grant-type:token-exchange dla punktu końcowego tokena OIDC. Wymiana tokenów może być używana do żądania tokenów o mniejszym zakresie lub podszywania się za innych użytkowników. Aby zezwolić na podszywanie się na instancji, zapoznaj się z polityką bezpieczeństwa.", "USERSCHEMA": "Schemat Użytkownika", "USERSCHEMA_DESCRIPTION": "Schematy użytkowników umożliwiają zarządzanie schematami danych użytkowników. Jeśli flaga jest włączona, będziesz mógł korzystać z nowego interfejsu API i jego funkcji.", "ACTIONS": "Akcje", diff --git a/console/src/assets/i18n/pt.json b/console/src/assets/i18n/pt.json index 5106bd408..d7f9183fc 100644 --- a/console/src/assets/i18n/pt.json +++ b/console/src/assets/i18n/pt.json @@ -1636,8 +1636,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Organização Padrão de Login", "LOGINDEFAULTORG_DESCRIPTION": "A interface de login utilizará as configurações da organização padrão (e não da instância) se nenhum contexto de organização estiver definido", - "OIDCTOKENEXCHANGE": "Troca de Token OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Habilita o tipo de concessão experimental urn:ietf:params:oauth:grant-type:token-exchange para o endpoint de token OIDC. A troca de token pode ser usada para solicitar tokens com escopo menor ou personificar outros usuários. Consulte a política de segurança para permitir a personificação em uma instância.", "USERSCHEMA": "Esquema de Usuário", "USERSCHEMAS_DESCRIPTION": "Esquemas de Usuário permitem gerenciar esquemas de dados do usuário. Se o sinalizador estiver ativado, você poderá usar a nova API e seus recursos.", "ACTIONS": "Ações", diff --git a/console/src/assets/i18n/ro.json b/console/src/assets/i18n/ro.json index 338c24aa9..a9909a7ea 100644 --- a/console/src/assets/i18n/ro.json +++ b/console/src/assets/i18n/ro.json @@ -1633,8 +1633,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Organizație implicită de conectare", "LOGINDEFAULTORG_DESCRIPTION": "UI-ul de conectare va utiliza setările organizației implicite (și nu din instanță) dacă nu este setat niciun context de organizație", - "OIDCTOKENEXCHANGE": "Schimb de token OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Activați tipul de grant experimental urn:ietf:params:oauth:grant-type:token-exchange pentru endpointul token OIDC. Schimbul de tokenuri poate fi utilizat pentru a solicita tokenuri cu o rază de acțiune mai mică sau pentru a impersona alți utilizatori. Consultați politica de securitate pentru a permite impersonarea pe o instanță.", "USERSCHEMA": "Schema de utilizator", "USERSCHEMA_DESCRIPTION": "Schemele de utilizator permit gestionarea schemelor de date ale utilizatorului. Dacă indicatorul este activat, veți putea utiliza noul API și caracteristicile sale.", "ACTIONS": "Acțiuni", diff --git a/console/src/assets/i18n/ru.json b/console/src/assets/i18n/ru.json index eadc4fb71..d8e8f5aea 100644 --- a/console/src/assets/i18n/ru.json +++ b/console/src/assets/i18n/ru.json @@ -1687,8 +1687,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Организация по умолчанию для входа", "LOGINDEFAULTORG_DESCRIPTION": "Если контекст организации не установлен, пользовательский интерфейс входа будет использовать настройки организации по умолчанию (а не экземпляра)", - "OIDCTOKENEXCHANGE": "Обмен токенами OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Включите экспериментальный тип гранта urn:ietf:params:oauth:grant-type:token-exchange для конечной точки токена OIDC. Обмен токенами можно использовать для запроса токенов с меньшей областью действия или для impersonation (выдачи себя за) других пользователей. Информацию о разрешении impersonation на экземпляре см. в политике безопасности.", "USERSCHEMA": "Схема пользователя", "USERSCHEMA_DESCRIPTION": "Схемы пользователей позволяют управлять схемами данных пользователей. Если флаг включен, вы сможете использовать новый API и его функции.", "ACTIONS": "Действия", diff --git a/console/src/assets/i18n/sv.json b/console/src/assets/i18n/sv.json index 21d8e9d73..0b1ee7847 100644 --- a/console/src/assets/i18n/sv.json +++ b/console/src/assets/i18n/sv.json @@ -1639,8 +1639,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Standardorganisation för inloggning", "LOGINDEFAULTORG_DESCRIPTION": "Inloggningsgränssnittet kommer att använda inställningarna för standardorganisationen (och inte från instansen) om ingen organisationskontext är inställd", - "OIDCTOKENEXCHANGE": "OIDC Token Exchange", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Aktivera den experimentella urn:ietf:params:oauth:grant-type:token-exchange grant-typen för OIDC-tokenändpunkten. Tokenutbyte kan användas för att begära tokens med en mindre omfattning eller impersonera andra användare. Se säkerhetspolicyn för att tillåta impersonation på en instans.", "USERSCHEMA": "Användarschema", "USERSCHEMA_DESCRIPTION": "Användarscheman tillåter att hantera datascheman för användare. Om flaggan är aktiverad kommer du att kunna använda det nya API:et och dess funktioner.", "ACTIONS": "Åtgärder", diff --git a/console/src/assets/i18n/tr.json b/console/src/assets/i18n/tr.json index f77771767..f62c82326 100644 --- a/console/src/assets/i18n/tr.json +++ b/console/src/assets/i18n/tr.json @@ -1638,8 +1638,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Giriş Varsayılan Org", "LOGINDEFAULTORG_DESCRIPTION": "Organizasyon bağlamı ayarlanmadıysa, giriş UI'ı varsayılan org'un ayarlarını (örnektekini değil) kullanacaktır", - "OIDCTOKENEXCHANGE": "OIDC Token Exchange", - "OIDCTOKENEXCHANGE_DESCRIPTION": "OIDC token uç noktası için deneysel urn:ietf:params:oauth:grant-type:token-exchange grant türünü etkinleştirin. Token değişimi, daha az kapsamlı token'lar talep etmek veya diğer kullanıcıların kimliğine bürünmek için kullanılabilir. Bir örnekte kimliğe bürünmeye izin vermek için güvenlik politikasına bakın.", "USERSCHEMA": "Kullanıcı Şeması", "USERSCHEMA_DESCRIPTION": "Kullanıcı Şemaları, kullanıcının veri şemalarını yönetmeye izin verir. Bayrak etkinleştirilirse, yeni API'yi ve özelliklerini kullanabileceksiniz.", "ACTIONS": "Eylemler", diff --git a/console/src/assets/i18n/uk.json b/console/src/assets/i18n/uk.json index 6ce6e9709..0b34e7b87 100644 --- a/console/src/assets/i18n/uk.json +++ b/console/src/assets/i18n/uk.json @@ -1639,8 +1639,6 @@ "FEATURES": { "LOGINDEFAULTORG": "Організація входу за замовчуванням", "LOGINDEFAULTORG_DESCRIPTION": "Інтерфейс входу використовуватиме налаштування організації за замовчуванням (а не з екземпляра), якщо контекст організації не встановлено", - "OIDCTOKENEXCHANGE": "Обмін токенів OIDC", - "OIDCTOKENEXCHANGE_DESCRIPTION": "Увімкнути експериментальний тип надання urn:ietf:params:oauth:grant-type:token-exchange для кінцевої точки токенів OIDC. Обмін токенів може використовуватися для запиту токенів з меншою областю дії або імітації інших користувачів. Див. політику безпеки для дозволу імітації в екземплярі.", "USERSCHEMA": "Схема користувача", "USERSCHEMA_DESCRIPTION": "Схеми користувачів дозволяють керувати схемами даних користувача. Якщо прапорець увімкнено, ви зможете використовувати новий API та його можливості.", "ACTIONS": "Дії", diff --git a/console/src/assets/i18n/zh.json b/console/src/assets/i18n/zh.json index 43f8d3572..486e5c334 100644 --- a/console/src/assets/i18n/zh.json +++ b/console/src/assets/i18n/zh.json @@ -1638,8 +1638,6 @@ "FEATURES": { "LOGINDEFAULTORG": "登录默认组织", "LOGINDEFAULTORG_DESCRIPTION": "如果没有设置组织上下文,登录界面将使用默认组织的设置(而不是实例的设置)", - "OIDCTOKENEXCHANGE": "OIDC 令牌交换", - "OIDCTOKENEXCHANGE_DESCRIPTION": "启用 OIDC 令牌端点的实验性 urn:ietf:params:oauth:grant-type:token-exchange 授权类型。令牌交换可用于请求具有较少范围的令牌或模拟其他用户。请参阅安全策略以允许在实例上模拟。", "USERSCHEMA": "用户架构", "USERSCHEMA_DESCRIPTION": "用户架构允许管理用户的数据架构。如果启用此标志,您将可以使用新的 API 及其功能。", "ACTIONS": "操作", diff --git a/internal/api/grpc/feature/v2/converter.go b/internal/api/grpc/feature/v2/converter.go index e4d63ac13..a303d713f 100644 --- a/internal/api/grpc/feature/v2/converter.go +++ b/internal/api/grpc/feature/v2/converter.go @@ -20,7 +20,6 @@ func systemFeaturesToCommand(req *feature_pb.SetSystemFeaturesRequest) (*command return &command.SystemFeatures{ LoginDefaultOrg: req.LoginDefaultOrg, UserSchema: req.UserSchema, - TokenExchange: req.OidcTokenExchange, ImprovedPerformance: improvedPerformanceListToDomain(req.ImprovedPerformance), OIDCSingleV1SessionTermination: req.OidcSingleV1SessionTermination, EnableBackChannelLogout: req.EnableBackChannelLogout, @@ -32,10 +31,13 @@ func systemFeaturesToCommand(req *feature_pb.SetSystemFeaturesRequest) (*command func systemFeaturesToPb(f *query.SystemFeatures) *feature_pb.GetSystemFeaturesResponse { return &feature_pb.GetSystemFeaturesResponse{ - Details: object.DomainToDetailsPb(f.Details), - LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), - UserSchema: featureSourceToFlagPb(&f.UserSchema), - OidcTokenExchange: featureSourceToFlagPb(&f.TokenExchange), + Details: object.DomainToDetailsPb(f.Details), + LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), + UserSchema: featureSourceToFlagPb(&f.UserSchema), + OidcTokenExchange: &feature_pb.FeatureFlag{ // TODO: remove in next major version + Enabled: true, + Source: feature_pb.Source_SOURCE_SYSTEM, + }, ImprovedPerformance: featureSourceToImprovedPerformanceFlagPb(&f.ImprovedPerformance), OidcSingleV1SessionTermination: featureSourceToFlagPb(&f.OIDCSingleV1SessionTermination), EnableBackChannelLogout: featureSourceToFlagPb(&f.EnableBackChannelLogout), @@ -53,7 +55,6 @@ func instanceFeaturesToCommand(req *feature_pb.SetInstanceFeaturesRequest) (*com return &command.InstanceFeatures{ LoginDefaultOrg: req.LoginDefaultOrg, UserSchema: req.UserSchema, - TokenExchange: req.OidcTokenExchange, ImprovedPerformance: improvedPerformanceListToDomain(req.ImprovedPerformance), DebugOIDCParentError: req.DebugOidcParentError, OIDCSingleV1SessionTermination: req.OidcSingleV1SessionTermination, @@ -67,10 +68,13 @@ func instanceFeaturesToCommand(req *feature_pb.SetInstanceFeaturesRequest) (*com func instanceFeaturesToPb(f *query.InstanceFeatures) *feature_pb.GetInstanceFeaturesResponse { return &feature_pb.GetInstanceFeaturesResponse{ - Details: object.DomainToDetailsPb(f.Details), - LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), - UserSchema: featureSourceToFlagPb(&f.UserSchema), - OidcTokenExchange: featureSourceToFlagPb(&f.TokenExchange), + Details: object.DomainToDetailsPb(f.Details), + LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), + UserSchema: featureSourceToFlagPb(&f.UserSchema), + OidcTokenExchange: &feature_pb.FeatureFlag{ // TODO: remove in next major version + Enabled: true, + Source: feature_pb.Source_SOURCE_SYSTEM, + }, ImprovedPerformance: featureSourceToImprovedPerformanceFlagPb(&f.ImprovedPerformance), DebugOidcParentError: featureSourceToFlagPb(&f.DebugOIDCParentError), OidcSingleV1SessionTermination: featureSourceToFlagPb(&f.OIDCSingleV1SessionTermination), diff --git a/internal/api/grpc/feature/v2/converter_test.go b/internal/api/grpc/feature/v2/converter_test.go index cfce0e1ed..393ad4db1 100644 --- a/internal/api/grpc/feature/v2/converter_test.go +++ b/internal/api/grpc/feature/v2/converter_test.go @@ -23,7 +23,6 @@ func Test_systemFeaturesToCommand(t *testing.T) { arg := &feature_pb.SetSystemFeaturesRequest{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - OidcTokenExchange: gu.Ptr(true), ImprovedPerformance: nil, OidcSingleV1SessionTermination: gu.Ptr(true), LoginV2: &feature_pb.LoginV2{ @@ -37,7 +36,6 @@ func Test_systemFeaturesToCommand(t *testing.T) { want := &command.SystemFeatures{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - TokenExchange: gu.Ptr(true), ImprovedPerformance: nil, OIDCSingleV1SessionTermination: gu.Ptr(true), LoginV2: &feature.LoginV2{ @@ -75,10 +73,6 @@ func Test_systemFeaturesToPb(t *testing.T) { Level: feature.LevelSystem, Value: true, }, - TokenExchange: query.FeatureSource[bool]{ - Level: feature.LevelSystem, - Value: false, - }, ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ Level: feature.LevelSystem, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified}, @@ -122,7 +116,7 @@ func Test_systemFeaturesToPb(t *testing.T) { Source: feature_pb.Source_SOURCE_SYSTEM, }, OidcTokenExchange: &feature_pb.FeatureFlag{ - Enabled: false, + Enabled: true, Source: feature_pb.Source_SOURCE_SYSTEM, }, ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ @@ -165,7 +159,6 @@ func Test_instanceFeaturesToCommand(t *testing.T) { arg := &feature_pb.SetInstanceFeaturesRequest{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - OidcTokenExchange: gu.Ptr(true), ImprovedPerformance: nil, DebugOidcParentError: gu.Ptr(true), OidcSingleV1SessionTermination: gu.Ptr(true), @@ -181,7 +174,6 @@ func Test_instanceFeaturesToCommand(t *testing.T) { want := &command.InstanceFeatures{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - TokenExchange: gu.Ptr(true), ImprovedPerformance: nil, DebugOIDCParentError: gu.Ptr(true), OIDCSingleV1SessionTermination: gu.Ptr(true), @@ -220,10 +212,6 @@ func Test_instanceFeaturesToPb(t *testing.T) { Level: feature.LevelInstance, Value: true, }, - TokenExchange: query.FeatureSource[bool]{ - Level: feature.LevelSystem, - Value: false, - }, ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ Level: feature.LevelSystem, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified}, @@ -271,7 +259,7 @@ func Test_instanceFeaturesToPb(t *testing.T) { Source: feature_pb.Source_SOURCE_INSTANCE, }, OidcTokenExchange: &feature_pb.FeatureFlag{ - Enabled: false, + Enabled: true, Source: feature_pb.Source_SOURCE_SYSTEM, }, ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ diff --git a/internal/api/grpc/feature/v2beta/converter.go b/internal/api/grpc/feature/v2beta/converter.go index 918bad6e7..73ad452a9 100644 --- a/internal/api/grpc/feature/v2beta/converter.go +++ b/internal/api/grpc/feature/v2beta/converter.go @@ -12,7 +12,6 @@ func systemFeaturesToCommand(req *feature_pb.SetSystemFeaturesRequest) *command. return &command.SystemFeatures{ LoginDefaultOrg: req.LoginDefaultOrg, UserSchema: req.UserSchema, - TokenExchange: req.OidcTokenExchange, ImprovedPerformance: improvedPerformanceListToDomain(req.ImprovedPerformance), OIDCSingleV1SessionTermination: req.OidcSingleV1SessionTermination, } @@ -20,10 +19,13 @@ func systemFeaturesToCommand(req *feature_pb.SetSystemFeaturesRequest) *command. func systemFeaturesToPb(f *query.SystemFeatures) *feature_pb.GetSystemFeaturesResponse { return &feature_pb.GetSystemFeaturesResponse{ - Details: object.DomainToDetailsPb(f.Details), - LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), - UserSchema: featureSourceToFlagPb(&f.UserSchema), - OidcTokenExchange: featureSourceToFlagPb(&f.TokenExchange), + Details: object.DomainToDetailsPb(f.Details), + LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), + UserSchema: featureSourceToFlagPb(&f.UserSchema), + OidcTokenExchange: &feature_pb.FeatureFlag{ // TODO: remove in next major version + Enabled: true, + Source: feature_pb.Source_SOURCE_SYSTEM, + }, ImprovedPerformance: featureSourceToImprovedPerformanceFlagPb(&f.ImprovedPerformance), OidcSingleV1SessionTermination: featureSourceToFlagPb(&f.OIDCSingleV1SessionTermination), } @@ -33,7 +35,6 @@ func instanceFeaturesToCommand(req *feature_pb.SetInstanceFeaturesRequest) *comm return &command.InstanceFeatures{ LoginDefaultOrg: req.LoginDefaultOrg, UserSchema: req.UserSchema, - TokenExchange: req.OidcTokenExchange, ImprovedPerformance: improvedPerformanceListToDomain(req.ImprovedPerformance), DebugOIDCParentError: req.DebugOidcParentError, OIDCSingleV1SessionTermination: req.OidcSingleV1SessionTermination, @@ -42,10 +43,13 @@ func instanceFeaturesToCommand(req *feature_pb.SetInstanceFeaturesRequest) *comm func instanceFeaturesToPb(f *query.InstanceFeatures) *feature_pb.GetInstanceFeaturesResponse { return &feature_pb.GetInstanceFeaturesResponse{ - Details: object.DomainToDetailsPb(f.Details), - LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), - UserSchema: featureSourceToFlagPb(&f.UserSchema), - OidcTokenExchange: featureSourceToFlagPb(&f.TokenExchange), + Details: object.DomainToDetailsPb(f.Details), + LoginDefaultOrg: featureSourceToFlagPb(&f.LoginDefaultOrg), + UserSchema: featureSourceToFlagPb(&f.UserSchema), + OidcTokenExchange: &feature_pb.FeatureFlag{ // TODO: remove in next major version + Enabled: true, + Source: feature_pb.Source_SOURCE_SYSTEM, + }, ImprovedPerformance: featureSourceToImprovedPerformanceFlagPb(&f.ImprovedPerformance), DebugOidcParentError: featureSourceToFlagPb(&f.DebugOIDCParentError), OidcSingleV1SessionTermination: featureSourceToFlagPb(&f.OIDCSingleV1SessionTermination), diff --git a/internal/api/grpc/feature/v2beta/converter_test.go b/internal/api/grpc/feature/v2beta/converter_test.go index 7ec9970ad..4bbaf8728 100644 --- a/internal/api/grpc/feature/v2beta/converter_test.go +++ b/internal/api/grpc/feature/v2beta/converter_test.go @@ -20,14 +20,12 @@ func Test_systemFeaturesToCommand(t *testing.T) { arg := &feature_pb.SetSystemFeaturesRequest{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - OidcTokenExchange: gu.Ptr(true), ImprovedPerformance: nil, OidcSingleV1SessionTermination: gu.Ptr(true), } want := &command.SystemFeatures{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - TokenExchange: gu.Ptr(true), ImprovedPerformance: nil, OIDCSingleV1SessionTermination: gu.Ptr(true), } @@ -50,10 +48,6 @@ func Test_systemFeaturesToPb(t *testing.T) { Level: feature.LevelSystem, Value: true, }, - TokenExchange: query.FeatureSource[bool]{ - Level: feature.LevelSystem, - Value: false, - }, ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ Level: feature.LevelSystem, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified}, @@ -78,7 +72,7 @@ func Test_systemFeaturesToPb(t *testing.T) { Source: feature_pb.Source_SOURCE_SYSTEM, }, OidcTokenExchange: &feature_pb.FeatureFlag{ - Enabled: false, + Enabled: true, Source: feature_pb.Source_SOURCE_SYSTEM, }, ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ @@ -98,14 +92,12 @@ func Test_instanceFeaturesToCommand(t *testing.T) { arg := &feature_pb.SetInstanceFeaturesRequest{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - OidcTokenExchange: gu.Ptr(true), ImprovedPerformance: nil, OidcSingleV1SessionTermination: gu.Ptr(true), } want := &command.InstanceFeatures{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(true), - TokenExchange: gu.Ptr(true), ImprovedPerformance: nil, OIDCSingleV1SessionTermination: gu.Ptr(true), } @@ -128,10 +120,6 @@ func Test_instanceFeaturesToPb(t *testing.T) { Level: feature.LevelInstance, Value: true, }, - TokenExchange: query.FeatureSource[bool]{ - Level: feature.LevelSystem, - Value: false, - }, ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ Level: feature.LevelSystem, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified}, @@ -156,7 +144,7 @@ func Test_instanceFeaturesToPb(t *testing.T) { Source: feature_pb.Source_SOURCE_INSTANCE, }, OidcTokenExchange: &feature_pb.FeatureFlag{ - Enabled: false, + Enabled: true, Source: feature_pb.Source_SOURCE_SYSTEM, }, ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ diff --git a/internal/api/oidc/integration_test/token_exchange_test.go b/internal/api/oidc/integration_test/token_exchange_test.go index 56a50a7c9..90a0530eb 100644 --- a/internal/api/oidc/integration_test/token_exchange_test.go +++ b/internal/api/oidc/integration_test/token_exchange_test.go @@ -17,41 +17,12 @@ import ( "github.com/zitadel/oidc/v3/pkg/oidc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" oidc_api "github.com/zitadel/zitadel/internal/api/oidc" "github.com/zitadel/zitadel/internal/integration" "github.com/zitadel/zitadel/pkg/grpc/admin" - "github.com/zitadel/zitadel/pkg/grpc/feature/v2" ) -func setTokenExchangeFeature(t *testing.T, instance *integration.Instance, value bool) { - iamCTX := instance.WithAuthorization(CTX, integration.UserTypeIAMOwner) - - _, err := instance.Client.FeatureV2.SetInstanceFeatures(iamCTX, &feature.SetInstanceFeaturesRequest{ - OidcTokenExchange: proto.Bool(value), - }) - require.NoError(t, err) - retryDuration := time.Minute - if ctxDeadline, ok := iamCTX.Deadline(); ok { - retryDuration = time.Until(ctxDeadline) - } - require.EventuallyWithT(t, - func(ttt *assert.CollectT) { - f, err := instance.Client.FeatureV2.GetInstanceFeatures(iamCTX, &feature.GetInstanceFeaturesRequest{ - Inheritance: true, - }) - assert.NoError(ttt, err) - if f.OidcTokenExchange.GetEnabled() { - return - } - }, - retryDuration, - time.Second, - "timed out waiting for ensuring instance feature") - time.Sleep(time.Second) -} - func setImpersonationPolicy(t *testing.T, instance *integration.Instance, value bool) { iamCTX := instance.WithAuthorization(CTX, integration.UserTypeIAMOwner) @@ -150,11 +121,7 @@ func TestServer_TokenExchange(t *testing.T) { _, orgImpersonatorPAT := createMachineUserPATWithMembership(ctx, t, instance, "ORG_ADMIN_IMPERSONATOR") serviceUserID, noPermPAT := createMachineUserPATWithMembership(ctx, t, instance) - // test that feature is disabled per default teResp, err := tokenexchange.ExchangeToken(ctx, exchanger, noPermPAT, oidc.AccessTokenType, "", "", nil, nil, nil, oidc.AccessTokenType) - require.Error(t, err) - setTokenExchangeFeature(t, instance, true) - teResp, err = tokenexchange.ExchangeToken(ctx, exchanger, noPermPAT, oidc.AccessTokenType, "", "", nil, nil, nil, oidc.AccessTokenType) require.NoError(t, err) patScopes := oidc.SpaceDelimitedArray{"openid", "profile", "urn:zitadel:iam:user:metadata", "urn:zitadel:iam:user:resourceowner"} @@ -361,7 +328,6 @@ func TestServer_TokenExchangeImpersonation(t *testing.T) { userResp := instance.CreateHumanUser(ctx) // exchange some tokens for later use - setTokenExchangeFeature(t, instance, true) setImpersonationPolicy(t, instance, true) client, keyData, err := instance.CreateOIDCTokenExchangeClient(ctx, t) @@ -593,7 +559,6 @@ func TestImpersonation_API_Call(t *testing.T) { resourceServer, err := instance.CreateResourceServerJWTProfile(ctx, keyData) require.NoError(t, err) - setTokenExchangeFeature(t, instance, true) setImpersonationPolicy(t, instance, true) iamUserID, iamImpersonatorPAT := createMachineUserPATWithMembership(ctx, t, instance, "IAM_ADMIN_IMPERSONATOR") diff --git a/internal/api/oidc/token_exchange.go b/internal/api/oidc/token_exchange.go index b762343be..5b1b57c21 100644 --- a/internal/api/oidc/token_exchange.go +++ b/internal/api/oidc/token_exchange.go @@ -41,9 +41,6 @@ func (s *Server) tokenExchange(ctx context.Context, r *op.ClientRequest[oidc.Tok ctx, span := tracing.NewSpan(ctx) defer func() { span.EndWithError(err) }() - if !authz.GetFeatures(ctx).TokenExchange { - return nil, zerrors.ThrowPreconditionFailed(nil, "OIDC-oan4I", "Errors.TokenExchange.FeatureDisabled") - } if len(r.Data.Resource) > 0 { return nil, oidc.ErrInvalidTarget().WithDescription("resource parameter not supported") } diff --git a/internal/command/instance.go b/internal/command/instance.go index 47ff8f3ba..ec7352557 100644 --- a/internal/command/instance.go +++ b/internal/command/instance.go @@ -133,7 +133,6 @@ type InstanceSetup struct { type InstanceSetupFeatures struct { LoginDefaultOrg *bool UserSchema *bool - TokenExchange *bool ImprovedPerformance []feature.ImprovedPerformanceType DebugOIDCParentError *bool OIDCSingleV1SessionTermination *bool @@ -167,7 +166,6 @@ func (f *InstanceSetupFeatures) ToInstanceFeatures() (_ *InstanceFeatures, err e return &InstanceFeatures{ LoginDefaultOrg: f.LoginDefaultOrg, UserSchema: f.UserSchema, - TokenExchange: f.TokenExchange, ImprovedPerformance: f.ImprovedPerformance, DebugOIDCParentError: f.DebugOIDCParentError, OIDCSingleV1SessionTermination: f.OIDCSingleV1SessionTermination, diff --git a/internal/command/instance_features.go b/internal/command/instance_features.go index 07a53b2c7..76cc6f4ab 100644 --- a/internal/command/instance_features.go +++ b/internal/command/instance_features.go @@ -15,7 +15,6 @@ import ( type InstanceFeatures struct { LoginDefaultOrg *bool UserSchema *bool - TokenExchange *bool ImprovedPerformance []feature.ImprovedPerformanceType DebugOIDCParentError *bool OIDCSingleV1SessionTermination *bool @@ -29,7 +28,6 @@ type InstanceFeatures struct { func (m *InstanceFeatures) isEmpty() bool { return m == nil || (m.LoginDefaultOrg == nil && m.UserSchema == nil && - m.TokenExchange == nil && // nil check to allow unset improvements m.ImprovedPerformance == nil && m.DebugOIDCParentError == nil && diff --git a/internal/command/instance_features_model.go b/internal/command/instance_features_model.go index 9c1e3f8a3..8890d194c 100644 --- a/internal/command/instance_features_model.go +++ b/internal/command/instance_features_model.go @@ -68,7 +68,6 @@ func (m *InstanceFeaturesWriteModel) Query() *eventstore.SearchQueryBuilder { feature_v2.InstanceResetEventType, feature_v2.InstanceLoginDefaultOrgEventType, feature_v2.InstanceUserSchemaEventType, - feature_v2.InstanceTokenExchangeEventType, feature_v2.InstanceImprovedPerformanceEventType, feature_v2.InstanceDebugOIDCParentErrorEventType, feature_v2.InstanceOIDCSingleV1SessionTerminationEventType, @@ -92,9 +91,6 @@ func reduceInstanceFeature(features *InstanceFeatures, key feature.Key, value an case feature.KeyLoginDefaultOrg: v := value.(bool) features.LoginDefaultOrg = &v - case feature.KeyTokenExchange: - v := value.(bool) - features.TokenExchange = &v case feature.KeyUserSchema: v := value.(bool) features.UserSchema = &v @@ -128,7 +124,6 @@ func (wm *InstanceFeaturesWriteModel) setCommands(ctx context.Context, f *Instan aggregate := feature_v2.NewAggregate(wm.AggregateID, wm.ResourceOwner) cmds := make([]eventstore.Command, 0, len(feature.KeyValues())-1) cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.LoginDefaultOrg, f.LoginDefaultOrg, feature_v2.InstanceLoginDefaultOrgEventType) - cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.TokenExchange, f.TokenExchange, feature_v2.InstanceTokenExchangeEventType) cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.UserSchema, f.UserSchema, feature_v2.InstanceUserSchemaEventType) cmds = appendFeatureSliceUpdate(ctx, cmds, aggregate, wm.ImprovedPerformance, f.ImprovedPerformance, feature_v2.InstanceImprovedPerformanceEventType) cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.DebugOIDCParentError, f.DebugOIDCParentError, feature_v2.InstanceDebugOIDCParentErrorEventType) diff --git a/internal/command/instance_features_model_test.go b/internal/command/instance_features_model_test.go index 29b0c8e86..de4b41867 100644 --- a/internal/command/instance_features_model_test.go +++ b/internal/command/instance_features_model_test.go @@ -38,15 +38,6 @@ func Test_reduceInstanceFeature(t *testing.T) { }, expected: &InstanceFeatures{LoginDefaultOrg: gu.Ptr(true)}, }, - { - name: "token exchange", - args: args{ - features: &InstanceFeatures{}, - key: feature.KeyTokenExchange, - value: true, - }, - expected: &InstanceFeatures{TokenExchange: gu.Ptr(true)}, - }, { name: "user schema", args: args{ diff --git a/internal/command/instance_features_test.go b/internal/command/instance_features_test.go index 98e827c06..03351839d 100644 --- a/internal/command/instance_features_test.go +++ b/internal/command/instance_features_test.go @@ -335,13 +335,6 @@ func TestInstanceFeatures_isEmpty(t *testing.T) { }, want: false, }, - { - name: "TokenExchange set", - features: &InstanceFeatures{ - TokenExchange: gu.Ptr(true), - }, - want: false, - }, { name: "ImprovedPerformance set", features: &InstanceFeatures{ diff --git a/internal/command/instance_test.go b/internal/command/instance_test.go index dacb9afa5..0230dc410 100644 --- a/internal/command/instance_test.go +++ b/internal/command/instance_test.go @@ -1776,7 +1776,6 @@ func TestInstanceSetupFeatures_ToInstanceFeatures(t *testing.T) { type fields struct { LoginDefaultOrg *bool UserSchema *bool - TokenExchange *bool ImprovedPerformance []feature.ImprovedPerformanceType DebugOIDCParentError *bool OIDCSingleV1SessionTermination *bool @@ -1806,7 +1805,6 @@ func TestInstanceSetupFeatures_ToInstanceFeatures(t *testing.T) { fields: fields{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(false), - TokenExchange: gu.Ptr(true), ImprovedPerformance: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified}, DebugOIDCParentError: gu.Ptr(true), OIDCSingleV1SessionTermination: gu.Ptr(false), @@ -1818,7 +1816,6 @@ func TestInstanceSetupFeatures_ToInstanceFeatures(t *testing.T) { want: &InstanceFeatures{ LoginDefaultOrg: gu.Ptr(true), UserSchema: gu.Ptr(false), - TokenExchange: gu.Ptr(true), ImprovedPerformance: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified}, DebugOIDCParentError: gu.Ptr(true), OIDCSingleV1SessionTermination: gu.Ptr(false), @@ -1875,7 +1872,6 @@ func TestInstanceSetupFeatures_ToInstanceFeatures(t *testing.T) { f := &InstanceSetupFeatures{ LoginDefaultOrg: tc.fields.LoginDefaultOrg, UserSchema: tc.fields.UserSchema, - TokenExchange: tc.fields.TokenExchange, ImprovedPerformance: tc.fields.ImprovedPerformance, DebugOIDCParentError: tc.fields.DebugOIDCParentError, OIDCSingleV1SessionTermination: tc.fields.OIDCSingleV1SessionTermination, diff --git a/internal/command/system_features.go b/internal/command/system_features.go index abebfd52d..201539f4a 100644 --- a/internal/command/system_features.go +++ b/internal/command/system_features.go @@ -11,7 +11,6 @@ import ( type SystemFeatures struct { LoginDefaultOrg *bool - TokenExchange *bool UserSchema *bool ImprovedPerformance []feature.ImprovedPerformanceType OIDCSingleV1SessionTermination *bool @@ -24,7 +23,6 @@ type SystemFeatures struct { func (m *SystemFeatures) isEmpty() bool { return m == nil || (m.LoginDefaultOrg == nil && m.UserSchema == nil && - m.TokenExchange == nil && // nil check to allow unset improvements m.ImprovedPerformance == nil && m.OIDCSingleV1SessionTermination == nil && diff --git a/internal/command/system_features_model.go b/internal/command/system_features_model.go index 609898626..97c353b2d 100644 --- a/internal/command/system_features_model.go +++ b/internal/command/system_features_model.go @@ -61,7 +61,6 @@ func (m *SystemFeaturesWriteModel) Query() *eventstore.SearchQueryBuilder { feature_v2.SystemResetEventType, feature_v2.SystemLoginDefaultOrgEventType, feature_v2.SystemUserSchemaEventType, - feature_v2.SystemTokenExchangeEventType, feature_v2.SystemImprovedPerformanceEventType, feature_v2.SystemOIDCSingleV1SessionTerminationEventType, feature_v2.SystemEnableBackChannelLogout, @@ -86,9 +85,6 @@ func reduceSystemFeature(features *SystemFeatures, key feature.Key, value any) { case feature.KeyUserSchema: v := value.(bool) features.UserSchema = &v - case feature.KeyTokenExchange: - v := value.(bool) - features.TokenExchange = &v case feature.KeyImprovedPerformance: features.ImprovedPerformance = value.([]feature.ImprovedPerformanceType) case feature.KeyOIDCSingleV1SessionTermination: @@ -113,7 +109,6 @@ func (wm *SystemFeaturesWriteModel) setCommands(ctx context.Context, f *SystemFe cmds := make([]eventstore.Command, 0, len(feature.KeyValues())-1) cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.LoginDefaultOrg, f.LoginDefaultOrg, feature_v2.SystemLoginDefaultOrgEventType) cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.UserSchema, f.UserSchema, feature_v2.SystemUserSchemaEventType) - cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.TokenExchange, f.TokenExchange, feature_v2.SystemTokenExchangeEventType) cmds = appendFeatureSliceUpdate(ctx, cmds, aggregate, wm.ImprovedPerformance, f.ImprovedPerformance, feature_v2.SystemImprovedPerformanceEventType) cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.OIDCSingleV1SessionTermination, f.OIDCSingleV1SessionTermination, feature_v2.SystemOIDCSingleV1SessionTerminationEventType) cmds = appendFeatureUpdate(ctx, cmds, aggregate, wm.EnableBackChannelLogout, f.EnableBackChannelLogout, feature_v2.SystemEnableBackChannelLogout) diff --git a/internal/command/system_features_test.go b/internal/command/system_features_test.go index 37fd67221..5aa1048cd 100644 --- a/internal/command/system_features_test.go +++ b/internal/command/system_features_test.go @@ -289,7 +289,6 @@ func TestSystemFeatures_isEmpty(t *testing.T) { {name: "empty features", sysFeatures: &SystemFeatures{}, want: true}, {name: "LoginDefaultOrg set", sysFeatures: &SystemFeatures{LoginDefaultOrg: gu.Ptr(true)}, want: false}, {name: "UserSchema set", sysFeatures: &SystemFeatures{UserSchema: gu.Ptr(true)}, want: false}, - {name: "TokenExchange set", sysFeatures: &SystemFeatures{TokenExchange: gu.Ptr(true)}, want: false}, {name: "ImprovedPerformance set", sysFeatures: &SystemFeatures{ImprovedPerformance: []feature.ImprovedPerformanceType{}}, want: false}, {name: "OIDCSingleV1SessionTermination set", sysFeatures: &SystemFeatures{OIDCSingleV1SessionTermination: gu.Ptr(true)}, want: false}, {name: "EnableBackChannelLogout set", sysFeatures: &SystemFeatures{EnableBackChannelLogout: gu.Ptr(true)}, want: false}, diff --git a/internal/feature/feature.go b/internal/feature/feature.go index effb1c144..b9de97ad2 100644 --- a/internal/feature/feature.go +++ b/internal/feature/feature.go @@ -9,12 +9,11 @@ import ( type Key int const ( - // Reserved: 2, 3, 6, 8, 11 + // Reserved: 2, 3, 5, 6, 8, 11 KeyUnspecified Key = 0 KeyLoginDefaultOrg Key = 1 KeyUserSchema Key = 4 - KeyTokenExchange Key = 5 KeyImprovedPerformance Key = 7 KeyDebugOIDCParentError Key = 9 KeyOIDCSingleV1SessionTermination Key = 10 @@ -41,7 +40,6 @@ const ( type Features struct { LoginDefaultOrg bool `json:"login_default_org,omitempty"` UserSchema bool `json:"user_schema,omitempty"` - TokenExchange bool `json:"token_exchange,omitempty"` ImprovedPerformance []ImprovedPerformanceType `json:"improved_performance,omitempty"` DebugOIDCParentError bool `json:"debug_oidc_parent_error,omitempty"` OIDCSingleV1SessionTermination bool `json:"oidc_single_v1_session_termination,omitempty"` diff --git a/internal/feature/key_enumer.go b/internal/feature/key_enumer.go index 62209835c..b12b6d521 100644 --- a/internal/feature/key_enumer.go +++ b/internal/feature/key_enumer.go @@ -10,8 +10,8 @@ import ( const ( _KeyName_0 = "unspecifiedlogin_default_org" _KeyLowerName_0 = "unspecifiedlogin_default_org" - _KeyName_1 = "user_schematoken_exchange" - _KeyLowerName_1 = "user_schematoken_exchange" + _KeyName_1 = "user_schema" + _KeyLowerName_1 = "user_schema" _KeyName_2 = "improved_performance" _KeyLowerName_2 = "improved_performance" _KeyName_3 = "debug_oidc_parent_erroroidc_single_v1_session_termination" @@ -22,7 +22,7 @@ const ( var ( _KeyIndex_0 = [...]uint8{0, 11, 28} - _KeyIndex_1 = [...]uint8{0, 11, 25} + _KeyIndex_1 = [...]uint8{0, 11} _KeyIndex_2 = [...]uint8{0, 20} _KeyIndex_3 = [...]uint8{0, 23, 57} _KeyIndex_4 = [...]uint8{0, 26, 34, 53, 87, 111} @@ -32,9 +32,8 @@ func (i Key) String() string { switch { case 0 <= i && i <= 1: return _KeyName_0[_KeyIndex_0[i]:_KeyIndex_0[i+1]] - case 4 <= i && i <= 5: - i -= 4 - return _KeyName_1[_KeyIndex_1[i]:_KeyIndex_1[i+1]] + case i == 4: + return _KeyName_1 case i == 7: return _KeyName_2 case 9 <= i && i <= 10: @@ -55,7 +54,6 @@ func _KeyNoOp() { _ = x[KeyUnspecified-(0)] _ = x[KeyLoginDefaultOrg-(1)] _ = x[KeyUserSchema-(4)] - _ = x[KeyTokenExchange-(5)] _ = x[KeyImprovedPerformance-(7)] _ = x[KeyDebugOIDCParentError-(9)] _ = x[KeyOIDCSingleV1SessionTermination-(10)] @@ -66,7 +64,7 @@ func _KeyNoOp() { _ = x[KeyEnableRelationalTables-(16)] } -var _KeyValues = []Key{KeyUnspecified, KeyLoginDefaultOrg, KeyUserSchema, KeyTokenExchange, KeyImprovedPerformance, KeyDebugOIDCParentError, KeyOIDCSingleV1SessionTermination, KeyEnableBackChannelLogout, KeyLoginV2, KeyPermissionCheckV2, KeyManagementConsoleUseV2UserApi, KeyEnableRelationalTables} +var _KeyValues = []Key{KeyUnspecified, KeyLoginDefaultOrg, KeyUserSchema, KeyImprovedPerformance, KeyDebugOIDCParentError, KeyOIDCSingleV1SessionTermination, KeyEnableBackChannelLogout, KeyLoginV2, KeyPermissionCheckV2, KeyManagementConsoleUseV2UserApi, KeyEnableRelationalTables} var _KeyNameToValueMap = map[string]Key{ _KeyName_0[0:11]: KeyUnspecified, @@ -75,8 +73,6 @@ var _KeyNameToValueMap = map[string]Key{ _KeyLowerName_0[11:28]: KeyLoginDefaultOrg, _KeyName_1[0:11]: KeyUserSchema, _KeyLowerName_1[0:11]: KeyUserSchema, - _KeyName_1[11:25]: KeyTokenExchange, - _KeyLowerName_1[11:25]: KeyTokenExchange, _KeyName_2[0:20]: KeyImprovedPerformance, _KeyLowerName_2[0:20]: KeyImprovedPerformance, _KeyName_3[0:23]: KeyDebugOIDCParentError, @@ -99,7 +95,6 @@ var _KeyNames = []string{ _KeyName_0[0:11], _KeyName_0[11:28], _KeyName_1[0:11], - _KeyName_1[11:25], _KeyName_2[0:20], _KeyName_3[0:23], _KeyName_3[23:57], diff --git a/internal/query/instance_by_domain.sql b/internal/query/instance_by_domain.sql index 102b6a181..d13e062c9 100644 --- a/internal/query/instance_by_domain.sql +++ b/internal/query/instance_by_domain.sql @@ -6,14 +6,14 @@ with domain as ( ), instance_features as ( select i.* from domain d - join projections.instance_features3 i on d.instance_id = i.instance_id + join projections.instance_features4 i on d.instance_id = i.instance_id ), features as ( select instance_id, json_object_agg( coalesce(i.key, s.key), coalesce(i.value, s.value) ) features from domain d - cross join projections.system_features2 s + cross join projections.system_features3 s full outer join instance_features i using (instance_id, key) group by instance_id ), external_domains as ( diff --git a/internal/query/instance_by_id.sql b/internal/query/instance_by_id.sql index 703e3d610..9f56bfba3 100644 --- a/internal/query/instance_by_id.sql +++ b/internal/query/instance_by_id.sql @@ -4,8 +4,8 @@ with features as ( coalesce(i.value, s.value) ) features from (select $1::text instance_id) x - cross join projections.system_features2 s - full outer join projections.instance_features3 i using (key, instance_id) + cross join projections.system_features3 s + full outer join projections.instance_features4 i using (key, instance_id) group by instance_id ), external_domains as ( select instance_id, array_agg(domain) as domains diff --git a/internal/query/instance_features.go b/internal/query/instance_features.go index 4f3604756..a001e16cb 100644 --- a/internal/query/instance_features.go +++ b/internal/query/instance_features.go @@ -11,7 +11,6 @@ type InstanceFeatures struct { Details *domain.ObjectDetails LoginDefaultOrg FeatureSource[bool] UserSchema FeatureSource[bool] - TokenExchange FeatureSource[bool] ImprovedPerformance FeatureSource[[]feature.ImprovedPerformanceType] DebugOIDCParentError FeatureSource[bool] OIDCSingleV1SessionTermination FeatureSource[bool] diff --git a/internal/query/instance_features_model.go b/internal/query/instance_features_model.go index 148f496c1..a003f257a 100644 --- a/internal/query/instance_features_model.go +++ b/internal/query/instance_features_model.go @@ -64,7 +64,6 @@ func (m *InstanceFeaturesReadModel) Query() *eventstore.SearchQueryBuilder { feature_v2.InstanceResetEventType, feature_v2.InstanceLoginDefaultOrgEventType, feature_v2.InstanceUserSchemaEventType, - feature_v2.InstanceTokenExchangeEventType, feature_v2.InstanceImprovedPerformanceEventType, feature_v2.InstanceDebugOIDCParentErrorEventType, feature_v2.InstanceOIDCSingleV1SessionTerminationEventType, @@ -92,7 +91,6 @@ func (m *InstanceFeaturesReadModel) populateFromSystem() bool { } m.instance.LoginDefaultOrg = m.system.LoginDefaultOrg m.instance.UserSchema = m.system.UserSchema - m.instance.TokenExchange = m.system.TokenExchange m.instance.ImprovedPerformance = m.system.ImprovedPerformance m.instance.OIDCSingleV1SessionTermination = m.system.OIDCSingleV1SessionTermination m.instance.EnableBackChannelLogout = m.system.EnableBackChannelLogout @@ -112,8 +110,6 @@ func reduceInstanceFeatureSet[T any](features *InstanceFeatures, event *feature_ features.LoginDefaultOrg.set(level, event.Value) case feature.KeyUserSchema: features.UserSchema.set(level, event.Value) - case feature.KeyTokenExchange: - features.TokenExchange.set(level, event.Value) case feature.KeyImprovedPerformance: features.ImprovedPerformance.set(level, event.Value) case feature.KeyDebugOIDCParentError: diff --git a/internal/query/projection/instance_features.go b/internal/query/projection/instance_features.go index d82ae57b5..915630404 100644 --- a/internal/query/projection/instance_features.go +++ b/internal/query/projection/instance_features.go @@ -14,7 +14,7 @@ import ( ) const ( - InstanceFeatureTable = "projections.instance_features3" + InstanceFeatureTable = "projections.instance_features4" InstanceFeatureInstanceIDCol = "instance_id" InstanceFeatureKeyCol = "key" @@ -68,10 +68,6 @@ func (*instanceFeatureProjection) Reducers() []handler.AggregateReducer { Event: feature_v2.InstanceUserSchemaEventType, Reduce: reduceInstanceSetFeature[bool], }, - { - Event: feature_v2.InstanceTokenExchangeEventType, - Reduce: reduceInstanceSetFeature[bool], - }, { Event: feature_v2.InstanceImprovedPerformanceEventType, Reduce: reduceInstanceSetFeature[[]feature.ImprovedPerformanceType], diff --git a/internal/query/projection/instance_features_test.go b/internal/query/projection/instance_features_test.go index cbb9ba4fb..feaf43842 100644 --- a/internal/query/projection/instance_features_test.go +++ b/internal/query/projection/instance_features_test.go @@ -38,7 +38,7 @@ func TestInstanceFeaturesProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.instance_features3 (instance_id, key, creation_date, change_date, sequence, value) VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (instance_id, key) DO UPDATE SET (creation_date, change_date, sequence, value) = (projections.instance_features3.creation_date, EXCLUDED.change_date, EXCLUDED.sequence, EXCLUDED.value)", + expectedStmt: "INSERT INTO projections.instance_features4 (instance_id, key, creation_date, change_date, sequence, value) VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (instance_id, key) DO UPDATE SET (creation_date, change_date, sequence, value) = (projections.instance_features4.creation_date, EXCLUDED.change_date, EXCLUDED.sequence, EXCLUDED.value)", expectedArgs: []interface{}{ "agg-id", "user_schema", @@ -69,7 +69,7 @@ func TestInstanceFeaturesProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.instance_features3 (instance_id, key, creation_date, change_date, sequence, value) VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (instance_id, key) DO UPDATE SET (creation_date, change_date, sequence, value) = (projections.instance_features3.creation_date, EXCLUDED.change_date, EXCLUDED.sequence, EXCLUDED.value)", + expectedStmt: "INSERT INTO projections.instance_features4 (instance_id, key, creation_date, change_date, sequence, value) VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (instance_id, key) DO UPDATE SET (creation_date, change_date, sequence, value) = (projections.instance_features4.creation_date, EXCLUDED.change_date, EXCLUDED.sequence, EXCLUDED.value)", expectedArgs: []interface{}{ "instance-id", "login_default_org", @@ -100,7 +100,7 @@ func TestInstanceFeaturesProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "DELETE FROM projections.instance_features3 WHERE (instance_id = $1)", + expectedStmt: "DELETE FROM projections.instance_features4 WHERE (instance_id = $1)", expectedArgs: []interface{}{ "agg-id", }, @@ -126,7 +126,7 @@ func TestInstanceFeaturesProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "DELETE FROM projections.instance_features3 WHERE (instance_id = $1)", + expectedStmt: "DELETE FROM projections.instance_features4 WHERE (instance_id = $1)", expectedArgs: []interface{}{ "agg-id", }, diff --git a/internal/query/projection/system_features.go b/internal/query/projection/system_features.go index b456ccab7..3537fdad4 100644 --- a/internal/query/projection/system_features.go +++ b/internal/query/projection/system_features.go @@ -12,7 +12,7 @@ import ( ) const ( - SystemFeatureTable = "projections.system_features2" + SystemFeatureTable = "projections.system_features3" SystemFeatureKeyCol = "key" SystemFeatureCreationDateCol = "creation_date" @@ -60,10 +60,6 @@ func (*systemFeatureProjection) Reducers() []handler.AggregateReducer { Event: feature_v2.SystemUserSchemaEventType, Reduce: reduceSystemSetFeature[bool], }, - { - Event: feature_v2.SystemTokenExchangeEventType, - Reduce: reduceSystemSetFeature[bool], - }, { Event: feature_v2.SystemImprovedPerformanceEventType, Reduce: reduceSystemSetFeature[[]feature.ImprovedPerformanceType], diff --git a/internal/query/projection/system_features_test.go b/internal/query/projection/system_features_test.go index 69598a9d5..0308eb784 100644 --- a/internal/query/projection/system_features_test.go +++ b/internal/query/projection/system_features_test.go @@ -36,7 +36,7 @@ func TestSystemFeaturesProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.system_features2 (key, creation_date, change_date, sequence, value) VALUES ($1, $2, $3, $4, $5) ON CONFLICT (key) DO UPDATE SET (creation_date, change_date, sequence, value) = (projections.system_features2.creation_date, EXCLUDED.change_date, EXCLUDED.sequence, EXCLUDED.value)", + expectedStmt: "INSERT INTO projections.system_features3 (key, creation_date, change_date, sequence, value) VALUES ($1, $2, $3, $4, $5) ON CONFLICT (key) DO UPDATE SET (creation_date, change_date, sequence, value) = (projections.system_features3.creation_date, EXCLUDED.change_date, EXCLUDED.sequence, EXCLUDED.value)", expectedArgs: []interface{}{ "user_schema", anyArg{}, @@ -66,7 +66,7 @@ func TestSystemFeaturesProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "DELETE FROM projections.system_features2 WHERE (key IS NOT NULL)", + expectedStmt: "DELETE FROM projections.system_features3 WHERE (key IS NOT NULL)", expectedArgs: []interface{}{}, }, }, diff --git a/internal/query/system_features.go b/internal/query/system_features.go index 721e4f002..9f97a2257 100644 --- a/internal/query/system_features.go +++ b/internal/query/system_features.go @@ -22,7 +22,6 @@ type SystemFeatures struct { LoginDefaultOrg FeatureSource[bool] UserSchema FeatureSource[bool] - TokenExchange FeatureSource[bool] ImprovedPerformance FeatureSource[[]feature.ImprovedPerformanceType] OIDCSingleV1SessionTermination FeatureSource[bool] EnableBackChannelLogout FeatureSource[bool] diff --git a/internal/query/system_features_model.go b/internal/query/system_features_model.go index d5ece4771..efbf7d080 100644 --- a/internal/query/system_features_model.go +++ b/internal/query/system_features_model.go @@ -57,7 +57,6 @@ func (m *SystemFeaturesReadModel) Query() *eventstore.SearchQueryBuilder { feature_v2.SystemResetEventType, feature_v2.SystemLoginDefaultOrgEventType, feature_v2.SystemUserSchemaEventType, - feature_v2.SystemTokenExchangeEventType, feature_v2.SystemImprovedPerformanceEventType, feature_v2.SystemOIDCSingleV1SessionTerminationEventType, feature_v2.SystemEnableBackChannelLogout, @@ -85,8 +84,6 @@ func reduceSystemFeatureSet[T any](features *SystemFeatures, event *feature_v2.S features.LoginDefaultOrg.set(level, event.Value) case feature.KeyUserSchema: features.UserSchema.set(level, event.Value) - case feature.KeyTokenExchange: - features.TokenExchange.set(level, event.Value) case feature.KeyImprovedPerformance: features.ImprovedPerformance.set(level, event.Value) case feature.KeyOIDCSingleV1SessionTermination: diff --git a/internal/repository/feature/feature_v2/eventstore.go b/internal/repository/feature/feature_v2/eventstore.go index bc1bda401..bedc1fc2e 100644 --- a/internal/repository/feature/feature_v2/eventstore.go +++ b/internal/repository/feature/feature_v2/eventstore.go @@ -9,7 +9,6 @@ func init() { eventstore.RegisterFilterEventMapper(AggregateType, SystemResetEventType, eventstore.GenericEventMapper[ResetEvent]) eventstore.RegisterFilterEventMapper(AggregateType, SystemLoginDefaultOrgEventType, eventstore.GenericEventMapper[SetEvent[bool]]) eventstore.RegisterFilterEventMapper(AggregateType, SystemUserSchemaEventType, eventstore.GenericEventMapper[SetEvent[bool]]) - eventstore.RegisterFilterEventMapper(AggregateType, SystemTokenExchangeEventType, eventstore.GenericEventMapper[SetEvent[bool]]) eventstore.RegisterFilterEventMapper(AggregateType, SystemImprovedPerformanceEventType, eventstore.GenericEventMapper[SetEvent[[]feature.ImprovedPerformanceType]]) eventstore.RegisterFilterEventMapper(AggregateType, SystemOIDCSingleV1SessionTerminationEventType, eventstore.GenericEventMapper[SetEvent[bool]]) eventstore.RegisterFilterEventMapper(AggregateType, SystemEnableBackChannelLogout, eventstore.GenericEventMapper[SetEvent[bool]]) @@ -20,7 +19,6 @@ func init() { eventstore.RegisterFilterEventMapper(AggregateType, InstanceResetEventType, eventstore.GenericEventMapper[ResetEvent]) eventstore.RegisterFilterEventMapper(AggregateType, InstanceLoginDefaultOrgEventType, eventstore.GenericEventMapper[SetEvent[bool]]) eventstore.RegisterFilterEventMapper(AggregateType, InstanceUserSchemaEventType, eventstore.GenericEventMapper[SetEvent[bool]]) - eventstore.RegisterFilterEventMapper(AggregateType, InstanceTokenExchangeEventType, eventstore.GenericEventMapper[SetEvent[bool]]) eventstore.RegisterFilterEventMapper(AggregateType, InstanceImprovedPerformanceEventType, eventstore.GenericEventMapper[SetEvent[[]feature.ImprovedPerformanceType]]) eventstore.RegisterFilterEventMapper(AggregateType, InstanceDebugOIDCParentErrorEventType, eventstore.GenericEventMapper[SetEvent[bool]]) eventstore.RegisterFilterEventMapper(AggregateType, InstanceOIDCSingleV1SessionTerminationEventType, eventstore.GenericEventMapper[SetEvent[bool]]) diff --git a/internal/repository/feature/feature_v2/feature.go b/internal/repository/feature/feature_v2/feature.go index 54f959012..2e8cd4498 100644 --- a/internal/repository/feature/feature_v2/feature.go +++ b/internal/repository/feature/feature_v2/feature.go @@ -14,7 +14,6 @@ var ( SystemResetEventType = resetEventTypeFromFeature(feature.LevelSystem) SystemLoginDefaultOrgEventType = setEventTypeFromFeature(feature.LevelSystem, feature.KeyLoginDefaultOrg) SystemUserSchemaEventType = setEventTypeFromFeature(feature.LevelSystem, feature.KeyUserSchema) - SystemTokenExchangeEventType = setEventTypeFromFeature(feature.LevelSystem, feature.KeyTokenExchange) SystemImprovedPerformanceEventType = setEventTypeFromFeature(feature.LevelSystem, feature.KeyImprovedPerformance) SystemOIDCSingleV1SessionTerminationEventType = setEventTypeFromFeature(feature.LevelSystem, feature.KeyOIDCSingleV1SessionTermination) SystemEnableBackChannelLogout = setEventTypeFromFeature(feature.LevelSystem, feature.KeyEnableBackChannelLogout) @@ -25,7 +24,6 @@ var ( InstanceResetEventType = resetEventTypeFromFeature(feature.LevelInstance) InstanceLoginDefaultOrgEventType = setEventTypeFromFeature(feature.LevelInstance, feature.KeyLoginDefaultOrg) InstanceUserSchemaEventType = setEventTypeFromFeature(feature.LevelInstance, feature.KeyUserSchema) - InstanceTokenExchangeEventType = setEventTypeFromFeature(feature.LevelInstance, feature.KeyTokenExchange) InstanceImprovedPerformanceEventType = setEventTypeFromFeature(feature.LevelInstance, feature.KeyImprovedPerformance) InstanceDebugOIDCParentErrorEventType = setEventTypeFromFeature(feature.LevelInstance, feature.KeyDebugOIDCParentError) InstanceOIDCSingleV1SessionTerminationEventType = setEventTypeFromFeature(feature.LevelInstance, feature.KeyOIDCSingleV1SessionTermination) diff --git a/internal/static/i18n/ar.yaml b/internal/static/i18n/ar.yaml index 2be93f3da..f75e00c0d 100644 --- a/internal/static/i18n/ar.yaml +++ b/internal/static/i18n/ar.yaml @@ -600,7 +600,6 @@ Errors: Data: Invalid: البيانات غير صالحة لمخطط المستخدم TokenExchange: - FeatureDisabled: ميزة تبادل الرموز معطلة للمثيل الخاص بك. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: الرمز مفقود Invalid: الرمز غير صالح @@ -614,7 +613,6 @@ Errors: ActiveDelete: لا يمكن حذف مفتاح ويب نشط Config: تكوين مفتاح الويب غير صالح Duplicate: معرف مفتاح الويب ليس فريداً - FeatureDisabled: ميزة مفتاح الويب معطلة NoActive: لم يتم العثور على مفتاح ويب نشط NotFound: مفتاح الويب غير موجود diff --git a/internal/static/i18n/bg.yaml b/internal/static/i18n/bg.yaml index 9b78a3378..9cf25ec83 100644 --- a/internal/static/i18n/bg.yaml +++ b/internal/static/i18n/bg.yaml @@ -622,7 +622,6 @@ Errors: Data: Invalid: Невалидни данни за потребителска схема TokenExchange: - FeatureDisabled: Функцията Token Exchange е деактивирана за вашето копие. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Токенът липсва Invalid: Токенът е невалиден @@ -636,7 +635,6 @@ Errors: ActiveDelete: Не може да се изтрие активен уеб ключ Config: Невалидна конфигурация на уеб ключ Duplicate: ID на уеб ключ не е уникален - FeatureDisabled: Ключовата уеб функция е деактивирана NoActive: Не е намерен активен уеб ключ NotFound: Уеб ключът не е намерен diff --git a/internal/static/i18n/cs.yaml b/internal/static/i18n/cs.yaml index 0ceb10d4b..8a129e1c4 100644 --- a/internal/static/i18n/cs.yaml +++ b/internal/static/i18n/cs.yaml @@ -602,7 +602,6 @@ Errors: Data: Invalid: Data neplatná pro uživatelské schéma TokenExchange: - FeatureDisabled: Funkce Token Exchange je pro vaši instanci zakázána. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Token chybí Invalid: Token je neplatný @@ -616,7 +615,6 @@ Errors: ActiveDelete: Aktivní webový klíč nelze smazat Config: Neplatná konfigurace webového klíče Duplicate: ID webového klíče není jedinečné - FeatureDisabled: Funkce webového klíče je zakázána NoActive: Nebyl nalezen žádný aktivní webový klíč NotFound: Webový klíč nebyl nalezen diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index 96690fa69..e19810208 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Daten für Benutzerschema ungültig TokenExchange: - FeatureDisabled: Die Token-Austauschfunktion ist für Ihre Instanz deaktiviert. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Token fehlt Invalid: Token ist ungültig @@ -618,7 +617,6 @@ Errors: ActiveDelete: Aktiver Webschlüssel kann nicht gelöscht werden Config: Ungültige Webschlüsselkonfiguration Duplicate: Webschlüssel-ID nicht eindeutig - FeatureDisabled: Webschlüsselfunktion deaktiviert NoActive: Kein aktiver Webschlüssel gefunden NotFound: Webschlüssel nicht gefunden diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 481a075a0..cfd7e4c44 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -605,7 +605,6 @@ Errors: Data: Invalid: Data invalid for User Schema TokenExchange: - FeatureDisabled: Token Exchange feature is disabled for your instance. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Token is missing Invalid: Token is invalid @@ -619,7 +618,6 @@ Errors: ActiveDelete: Cannot delete active web key Config: Invalid web key config Duplicate: Web key ID not unique - FeatureDisabled: Web key feature disabled NoActive: No active web key found NotFound: Web key not found diff --git a/internal/static/i18n/es.yaml b/internal/static/i18n/es.yaml index 8d7ee810a..b45725290 100644 --- a/internal/static/i18n/es.yaml +++ b/internal/static/i18n/es.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Datos no válidos para el esquema de usuario TokenExchange: - FeatureDisabled: La función de intercambio de tokens está deshabilitada para su instancia. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Falta la ficha Invalid: El token no es válido @@ -618,7 +617,6 @@ Errors: ActiveDelete: No se puede eliminar la clave web activa Config: Configuración de clave web no válida Duplicate: ID de clave web no único - FeatureDisabled: Función de clave web deshabilitada NoActive: No se encontró ninguna clave web activa NotFound: Clave web no encontrada diff --git a/internal/static/i18n/fr.yaml b/internal/static/i18n/fr.yaml index 2c9572e2e..57447caef 100644 --- a/internal/static/i18n/fr.yaml +++ b/internal/static/i18n/fr.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Données non valides pour le schéma utilisateur TokenExchange: - FeatureDisabled: La fonctionnalité Token Exchange est désactivée pour votre instance. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Le jeton est manquant Invalid: Le jeton n'est pas valide @@ -618,7 +617,6 @@ Errors: ActiveDelete: Impossible de supprimer la clé Web active Config: Configuration de clé Web non valide Duplicate: L'ID de clé Web n'est pas unique - FeatureDisabled: Fonctionnalité de clé Web désactivée NoActive: Aucune clé Web active trouvée NotFound: Clé Web introuvable diff --git a/internal/static/i18n/hu.yaml b/internal/static/i18n/hu.yaml index 3a5ec0ea0..b23ed8dab 100644 --- a/internal/static/i18n/hu.yaml +++ b/internal/static/i18n/hu.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Érvénytelen adat a User Schema-hoz TokenExchange: - FeatureDisabled: A Token Exchange funkció le van tiltva az példányod esetében. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: A token hiányzik Invalid: A token érvénytelen @@ -618,7 +617,6 @@ Errors: ActiveDelete: Az aktív webkulcs nem törölhető Config: Érvénytelen webkulcs konfiguráció Duplicate: A webkulcs azonosító nem egyedi - FeatureDisabled: A webkulcs funkció le van tiltva NoActive: Aktív web kulcs nem található NotFound: Web kulcs nem található diff --git a/internal/static/i18n/id.yaml b/internal/static/i18n/id.yaml index 565fde17e..7412e8331 100644 --- a/internal/static/i18n/id.yaml +++ b/internal/static/i18n/id.yaml @@ -599,7 +599,6 @@ Errors: NotInactive: Skema Pengguna tidak aktif NotExists: Skema Pengguna tidak ada TokenExchange: - FeatureDisabled: 'Fitur Token Exchange dinonaktifkan untuk instance Anda. ' Token: Missing: Tokennya hilang Invalid: Token tidak valid @@ -613,7 +612,6 @@ Errors: ActiveDelete: Tidak dapat menghapus kunci web yang aktif Config: Konfigurasi kunci web tidak valid Duplicate: ID kunci web tidak unik - FeatureDisabled: Fitur kunci web dinonaktifkan NoActive: Tidak ditemukan kunci web aktif NotFound: Kunci web tidak ditemukan diff --git a/internal/static/i18n/it.yaml b/internal/static/i18n/it.yaml index 1af9e7c6d..ab8b9cd7b 100644 --- a/internal/static/i18n/it.yaml +++ b/internal/static/i18n/it.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Dati non validi per lo schema utente TokenExchange: - FeatureDisabled: La funzionalità di scambio token è disabilitata per la tua istanza. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Manca il gettone Invalid: Il token non è valido @@ -618,7 +617,6 @@ Errors: ActiveDelete: Impossibile eliminare la chiave Web attiva Config: Configurazione chiave Web non valida Duplicate: ID chiave Web non univoco - FeatureDisabled: Funzione chiave Web disabilitata NoActive: Nessuna chiave Web attiva trovata NotFound: Chiave Web non trovata diff --git a/internal/static/i18n/ja.yaml b/internal/static/i18n/ja.yaml index 6337a738f..82825c285 100644 --- a/internal/static/i18n/ja.yaml +++ b/internal/static/i18n/ja.yaml @@ -605,7 +605,6 @@ Errors: Data: Invalid: ユーザー スキーマのデータが無効です TokenExchange: - FeatureDisabled: インスタンスではトークン交換機能が無効になっています。 https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: トークンがありません Invalid: トークンが無効です @@ -619,7 +618,6 @@ Errors: ActiveDelete: アクティブな Web キーを削除できません Config: 無効な Web キー設定 Duplicate: Web キー ID が一意ではありません - FeatureDisabled: Web キー機能が無効です NoActive: アクティブな Web キーが見つかりません NotFound: Web キーが見つかりません diff --git a/internal/static/i18n/ko.yaml b/internal/static/i18n/ko.yaml index 67a6c7205..7cec19a09 100644 --- a/internal/static/i18n/ko.yaml +++ b/internal/static/i18n/ko.yaml @@ -605,7 +605,6 @@ Errors: Data: Invalid: 사용자 스키마에 대한 데이터가 유효하지 않습니다 TokenExchange: - FeatureDisabled: 토큰 교환 기능이 인스턴스에서 비활성화되어 있습니다. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: 토큰이 누락되었습니다 Invalid: 토큰이 유효하지 않습니다 @@ -619,7 +618,6 @@ Errors: ActiveDelete: 활성 웹 키를 삭제할 수 없습니다 Config: 웹 키 설정이 유효하지 않습니다 Duplicate: 웹 키 ID가 고유하지 않습니다 - FeatureDisabled: 웹 키 기능이 비활성화되었습니다 NoActive: 활성 웹 키가 없습니다 NotFound: 웹 키를 찾을 수 없습니다 diff --git a/internal/static/i18n/mk.yaml b/internal/static/i18n/mk.yaml index f68d7a0b6..ffee7d11f 100644 --- a/internal/static/i18n/mk.yaml +++ b/internal/static/i18n/mk.yaml @@ -603,7 +603,6 @@ Errors: Data: Invalid: Податоците не се валидни за корисничка шема TokenExchange: - FeatureDisabled: Функцијата за размена на токени е оневозможена на вашиот пример. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Недостасува токен Invalid: Токенот е неважечки @@ -617,7 +616,6 @@ Errors: ActiveDelete: Не може да се избрише активниот веб-клуч Config: Неважечка конфигурација на веб-клуч Duplicate: ID на веб-клучот не е единствен - FeatureDisabled: Функцијата за веб-клуч е оневозможена NoActive: Не е пронајден активен веб-клуч NotFound: Веб-клучот не е пронајден diff --git a/internal/static/i18n/nl.yaml b/internal/static/i18n/nl.yaml index 3d7b15191..1593b84b2 100644 --- a/internal/static/i18n/nl.yaml +++ b/internal/static/i18n/nl.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Податоците не се валидни за корисничка шема TokenExchange: - FeatureDisabled: De Token Exchange-functie is uitgeschakeld voor uw instantie. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Token ontbreekt Invalid: Token is ongeldig @@ -618,7 +617,6 @@ Errors: ActiveDelete: Kan actieve websleutel niet verwijderen Config: Ongeldige websleutelconfiguratie Duplicate: Websleutel-ID niet uniek - FeatureDisabled: Websleutelfunctie uitgeschakeld NoActive: Geen actieve websleutel gevonden NotFound: Websleutel niet gevonden diff --git a/internal/static/i18n/pl.yaml b/internal/static/i18n/pl.yaml index 8fd6a7246..ca1460812 100644 --- a/internal/static/i18n/pl.yaml +++ b/internal/static/i18n/pl.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Nieprawidłowe dane dla schematu użytkownika TokenExchange: - FeatureDisabled: Funkcja wymiany tokenów jest wyłączona dla Twojej instancji. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Brak tokena Invalid: Token jest nieprawidłowy @@ -618,7 +617,6 @@ Errors: ActiveDelete: Nie można usunąć aktywnego klucza internetowego Config: Nieprawidłowa konfiguracja klucza internetowego Duplicate: Identyfikator klucza internetowego nie jest unikalny - FeatureDisabled: Funkcja klucza internetowego jest wyłączona NoActive: Nie znaleziono aktywnego klucza internetowego NotFound: Nie znaleziono klucza internetowego diff --git a/internal/static/i18n/pt.yaml b/internal/static/i18n/pt.yaml index 47119e354..8e2099e0e 100644 --- a/internal/static/i18n/pt.yaml +++ b/internal/static/i18n/pt.yaml @@ -603,7 +603,6 @@ Errors: Data: Invalid: Dados inválidos para o esquema do utilizador TokenExchange: - FeatureDisabled: O recurso Token Exchange está desabilitado para sua instância. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: O token está faltando Invalid: O token é inválido @@ -617,7 +616,6 @@ Errors: ActiveDelete: Não é possível eliminar a chave web ativa Config: Configuração de chave web inválida Duplicate: ID da chave Web não exclusivo - FeatureDisabled: Recurso chave da Web desativado NoActive: Nenhuma chave web ativa encontrada NotFound: Chave Web não encontrada diff --git a/internal/static/i18n/ro.yaml b/internal/static/i18n/ro.yaml index 11f880871..1a7c2fb01 100644 --- a/internal/static/i18n/ro.yaml +++ b/internal/static/i18n/ro.yaml @@ -600,7 +600,6 @@ Errors: Data: Invalid: Datele sunt invalide pentru schema de utilizator TokenExchange: - FeatureDisabled: Caracteristica Token Exchange este dezactivată pentru instanța dvs. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Token-ul lipsește Invalid: Token-ul este invalid @@ -614,7 +613,6 @@ Errors: ActiveDelete: Nu se poate șterge o cheie web activă Config: Configurație cheie web invalidă Duplicate: ID-ul cheii web nu este unic - FeatureDisabled: Caracteristica cheie web este dezactivată NoActive: Nu a fost găsită nicio cheie web activă NotFound: Cheia web nu a fost găsită diff --git a/internal/static/i18n/ru.yaml b/internal/static/i18n/ru.yaml index 48f1f4772..58f26991d 100644 --- a/internal/static/i18n/ru.yaml +++ b/internal/static/i18n/ru.yaml @@ -593,7 +593,6 @@ Errors: Data: Invalid: Данные недействительны для схемы пользователя TokenExchange: - FeatureDisabled: Функция обмена токенами отключена для вашего экземпляра. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Токен отсутствует Invalid: Токен недействителен @@ -607,7 +606,6 @@ Errors: ActiveDelete: Невозможно удалить активный веб-ключ Config: Неверная конфигурация веб-ключа Duplicate: Идентификатор веб-ключа не уникален - FeatureDisabled: Функция веб-ключа отключена NoActive: Активный веб-ключ не найден NotFound: Веб-ключ не найден diff --git a/internal/static/i18n/sv.yaml b/internal/static/i18n/sv.yaml index ca68db211..65ac41312 100644 --- a/internal/static/i18n/sv.yaml +++ b/internal/static/i18n/sv.yaml @@ -604,7 +604,6 @@ Errors: Data: Invalid: Data ogiltig för användarschema TokenExchange: - FeatureDisabled: Token Exchange-funktionen är inaktiverad för din instans. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Token saknas Invalid: Token är ogiltig @@ -618,7 +617,6 @@ Errors: ActiveDelete: Det går inte att ta bort aktiv webbnyckel Config: Ogiltig webbnyckelkonfiguration Duplicate: Webnyckel-ID är inte unikt - FeatureDisabled: Webnyckelfunktion inaktiverad NoActive: Ingen aktiv webbnyckel hittades NotFound: Webnyckel hittades inte diff --git a/internal/static/i18n/tr.yaml b/internal/static/i18n/tr.yaml index 57d7f1e47..c2939e1c3 100644 --- a/internal/static/i18n/tr.yaml +++ b/internal/static/i18n/tr.yaml @@ -605,7 +605,6 @@ Errors: Data: Invalid: Kullanıcı Şeması için veri geçersiz TokenExchange: - FeatureDisabled: Token Exchange özelliği instance'ınız için devre dışı. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Token eksik Invalid: Token geçersiz @@ -619,7 +618,6 @@ Errors: ActiveDelete: Aktif web anahtarı silinemez Config: Geçersiz web anahtarı yapılandırması Duplicate: Web anahtarı ID benzersiz değil - FeatureDisabled: Web anahtarı özelliği devre dışı NoActive: Aktif web anahtarı bulunamadı NotFound: Web anahtarı bulunamadı diff --git a/internal/static/i18n/uk.yaml b/internal/static/i18n/uk.yaml index a639be20c..7c89ac71a 100644 --- a/internal/static/i18n/uk.yaml +++ b/internal/static/i18n/uk.yaml @@ -599,7 +599,6 @@ Errors: Data: Invalid: Дані недійсні для схеми користувача TokenExchange: - FeatureDisabled: Функція обміну токенів вимкнена для вашого інстансу. https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: Токен відсутній Invalid: Токен недійсний @@ -613,7 +612,6 @@ Errors: ActiveDelete: Неможливо видалити активний веб-ключ Config: Недійсна конфігурація веб-ключа Duplicate: Ідентифікатор веб-ключа не унікальний - FeatureDisabled: Функція веб-ключа вимкнена NoActive: Активний веб-ключ не знайдено NotFound: Веб-ключ не знайдено diff --git a/internal/static/i18n/zh.yaml b/internal/static/i18n/zh.yaml index b146a73d9..463158bae 100644 --- a/internal/static/i18n/zh.yaml +++ b/internal/static/i18n/zh.yaml @@ -605,7 +605,6 @@ Errors: Data: Invalid: 用户架构的数据无效 TokenExchange: - FeatureDisabled: 您的实例已禁用令牌交换功能。 https://zitadel.com/docs/apis/resources/feature_service_v2/feature-service-set-instance-features Token: Missing: 令牌丢失 Invalid: 令牌无效 @@ -619,7 +618,6 @@ Errors: ActiveDelete: 无法删除活动 Web 密钥 Config: 无效的 Web 密钥配置 Duplicate: Web 密钥 ID 不唯一 - FeatureDisabled: Web 密钥功能已禁用 NoActive: 未找到活动 Web 密钥 NotFound: 未找到 Web 密钥 diff --git a/proto/zitadel/feature/v2/instance.proto b/proto/zitadel/feature/v2/instance.proto index 984ffd6b3..bd434943b 100644 --- a/proto/zitadel/feature/v2/instance.proto +++ b/proto/zitadel/feature/v2/instance.proto @@ -28,11 +28,14 @@ message SetInstanceFeaturesRequest{ } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. + // Setting the field will have no effect. optional bool oidc_token_exchange = 5 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; repeated ImprovedPerformance improved_performance = 7 [ @@ -131,11 +134,13 @@ message GetInstanceFeaturesResponse { } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. FeatureFlag oidc_token_exchange = 6 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; ImprovedPerformanceFeatureFlag improved_performance = 8 [ diff --git a/proto/zitadel/feature/v2/system.proto b/proto/zitadel/feature/v2/system.proto index bb23eab6d..d99a77585 100644 --- a/proto/zitadel/feature/v2/system.proto +++ b/proto/zitadel/feature/v2/system.proto @@ -28,11 +28,14 @@ message SetSystemFeaturesRequest{ } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. + // Setting the field will have no effect. optional bool oidc_token_exchange = 5 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; repeated ImprovedPerformance improved_performance = 7 [ @@ -111,11 +114,13 @@ message GetSystemFeaturesResponse { } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. FeatureFlag oidc_token_exchange = 6 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; ImprovedPerformanceFeatureFlag improved_performance = 8 [ diff --git a/proto/zitadel/feature/v2beta/instance.proto b/proto/zitadel/feature/v2beta/instance.proto index ac7a6c928..c341c4488 100644 --- a/proto/zitadel/feature/v2beta/instance.proto +++ b/proto/zitadel/feature/v2beta/instance.proto @@ -27,11 +27,14 @@ message SetInstanceFeaturesRequest{ } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. + // Setting the field will have no effect. optional bool oidc_token_exchange = 5 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; repeated ImprovedPerformance improved_performance = 7 [ @@ -95,11 +98,13 @@ message GetInstanceFeaturesResponse { } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. FeatureFlag oidc_token_exchange = 6 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; ImprovedPerformanceFeatureFlag improved_performance = 8 [ diff --git a/proto/zitadel/feature/v2beta/system.proto b/proto/zitadel/feature/v2beta/system.proto index ae500eb87..da68f5b21 100644 --- a/proto/zitadel/feature/v2beta/system.proto +++ b/proto/zitadel/feature/v2beta/system.proto @@ -27,11 +27,14 @@ message SetSystemFeaturesRequest{ } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. + // Setting the field will have no effect. optional bool oidc_token_exchange = 5 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; repeated ImprovedPerformance improved_performance = 7 [ @@ -81,11 +84,13 @@ message GetSystemFeaturesResponse { } ]; + // Deprecated: the flag has been removed and `urn:ietf:params:oauth:grant-type:token-exchange` + // grant type for the OIDC token endpoint is enabled by default. + // Token exchange can be used to request tokens with a lesser scope or impersonate other users. + // See the security policy to allow impersonation on an instance. + // This field is only kept for backward compatibility and will be removed in the next major version of Zitadel. FeatureFlag oidc_token_exchange = 6 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "true"; - description: "Enable the experimental `urn:ietf:params:oauth:grant-type:token-exchange` grant type for the OIDC token endpoint. Token exchange can be used to request tokens with a lesser scope or impersonate other users. See the security policy to allow impersonation on an instance."; - } + deprecated = true ]; ImprovedPerformanceFeatureFlag improved_performance = 8 [