diff --git a/README.md b/README.md index e2fb93ee2..a6ae94832 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ Yet it offers everything you need for a customer identity ([CIAM](https://zitade - [API-first approach](https://zitadel.com/docs/apis/introduction) - [Multi-tenancy](https://zitadel.com/docs/guides/solution-scenarios/b2b) authentication and access management - [Strong audit trail](https://zitadel.com/docs/concepts/features/audit-trail) thanks to [event sourcing](https://zitadel.com/docs/concepts/eventstore/overview) as storage pattern -- [Actions](https://zitadel.com/docs/apis/actions/introduction) to react on events with custom code and extended ZITADEL for you needs +- [Actions](https://zitadel.com/docs/guides/manage/console/actions-overview) to react on events with custom code and extended ZITADEL for you needs - [Branding](https://zitadel.com/docs/guides/manage/customize/branding) for a uniform user experience across multiple organizations - [Self-service](https://zitadel.com/docs/concepts/features/selfservice) for end-users, business customers, and administrators - [Postgres](https://www.postgresql.org/) database as reliable and widespread storage option @@ -132,13 +132,13 @@ Multi-Tenancy - [Identity Brokering](https://zitadel.com/docs/guides/integrate/identity-brokering) with templates for popular identity providers - [Customizable onboarding](https://zitadel.com/docs/guides/solution-scenarios/onboarding) for B2B and their users -- [Delegate role management to third-parties](https://zitadel.com/docs/guides/manage/console/projects) +- [Delegate role management to third-parties](https://zitadel.com/docs/guides/manage/console/projects-overview) - [Domain discovery](https://zitadel.com/docs/guides/solution-scenarios/domain-discovery) Integration - [GRPC and REST APIs](https://zitadel.com/docs/apis/introduction) for every functionality and resource -- [Actions](https://zitadel.com/docs/apis/actions/introduction) to call any API, send webhooks, adjust workflows, or customize tokens +- [Actions](https://zitadel.com/docs/guides/manage/console/actions-overview) to call any API, send webhooks, adjust workflows, or customize tokens - [Role Based Access Control (RBAC)](https://zitadel.com/docs/guides/integrate/retrieve-user-roles) - [SCIM 2.0 Server](https://zitadel.com/docs/apis/scim2) - [Examples and SDKs](https://zitadel.com/docs/sdk-examples/introduction) @@ -149,7 +149,7 @@ Integration Self-Service - [Self-registration](https://zitadel.com/docs/concepts/features/selfservice#registration) including verification - [Self-service](https://zitadel.com/docs/concepts/features/selfservice) for end-users, business customers, and administrators -- [Administration UI (Console)](https://zitadel.com/docs/guides/manage/console/overview) +- [Administration UI (Console)](https://zitadel.com/docs/guides/manage/console/console-overview) Deployment - [Postgres](https://zitadel.com/docs/self-hosting/manage/database#postgres) (version >= 14) @@ -187,7 +187,7 @@ Use our Login widget to allow easy and secure access to your applications and en ### Admin Console -Use [Console](https://zitadel.com/docs/guides/manage/console/overview) or our [APIs](https://zitadel.com/docs/apis/introduction) to setup organizations, projects and applications. +Use [Console](https://zitadel.com/docs/guides/manage/console/console-overview) or our [APIs](https://zitadel.com/docs/apis/introduction) to setup organizations, projects and applications. [![Console Showcase](https://user-images.githubusercontent.com/1366906/223663344-67038d5f-4415-4285-ab20-9a4d397e2138.gif)](http://www.youtube.com/watch?v=RPpHktAcCtk "Console Showcase") diff --git a/console/src/app/pages/projects/apps/app-detail/app-detail.component.html b/console/src/app/pages/projects/apps/app-detail/app-detail.component.html index ef1937b2c..799134344 100644 --- a/console/src/app/pages/projects/apps/app-detail/app-detail.component.html +++ b/console/src/app/pages/projects/apps/app-detail/app-detail.component.html @@ -1,7 +1,7 @@

{{ 'PROJECT.GRANT.DETAIL.DESC' | translate }} - + info_outline

diff --git a/console/src/app/pages/projects/projects.component.html b/console/src/app/pages/projects/projects.component.html index dd71661c6..e4a79bbdd 100644 --- a/console/src/app/pages/projects/projects.component.html +++ b/console/src/app/pages/projects/projects.component.html @@ -2,7 +2,12 @@

{{ 'DESCRIPTIONS.PROJECTS.TITLE' | translate }}

- + info_outline
diff --git a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.html b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.html index 3a5bb3161..d817a83d2 100644 --- a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.html +++ b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.html @@ -2,7 +2,7 @@

{{ 'DESCRIPTIONS.USERS.TITLE' | translate }}

- + info_outline
diff --git a/docs/docs/apis/actions/objects.md b/docs/docs/apis/actions/objects.md index c0feab78a..747e7bcb7 100644 --- a/docs/docs/apis/actions/objects.md +++ b/docs/docs/apis/actions/objects.md @@ -182,7 +182,7 @@ This object represents [the claims](../openidoauth/claims) which will be written - `email_verified` *bool* - `updated_at` *Number* -Additionally there could additional fields depending on the configuration of your [project](../../guides/manage/console/projects#role-settings) and your [application](../../guides/manage/console/applications#token-settings) +Additionally there could additional fields depending on the configuration of your [project](../../guides/manage/console/projects-overview#role-settings) and your [application](../../guides/manage/console/applications-overview#token-settings) ## user grant list diff --git a/docs/docs/apis/introduction.mdx b/docs/docs/apis/introduction.mdx index 8a7af5edf..e457f1374 100644 --- a/docs/docs/apis/introduction.mdx +++ b/docs/docs/apis/introduction.mdx @@ -10,7 +10,7 @@ ZITADEL exposes all features via different gRPC and REST APIs and provides SDKs The [OpenID Connect & OAuth endpoints](/docs/apis/openidoauth/endpoints) and [SAML 2.0 endpoints](/docs/apis/saml/endpoints) are implemented and exposed according to the specific standards. Managing resources such as users, organizations, instances, or settings must be done with the different [ZITADEL APIs](#zitadel-apis-resource-based). -[Actions](/docs/apis/actions/introduction) allow to extend ZITADEL with custom code to change default behaviors or calling external systems. +[Actions](/docs/guides/manage/console/actions-overview) allow to extend ZITADEL with custom code to change default behaviors or calling external systems. ## Authentication & authorization diff --git a/docs/docs/apis/openidoauth/claims.md b/docs/docs/apis/openidoauth/claims.md index c82e3a388..a6ce3d499 100644 --- a/docs/docs/apis/openidoauth/claims.md +++ b/docs/docs/apis/openidoauth/claims.md @@ -78,7 +78,7 @@ Please check below the matrix for an overview where which scope is asserted. Custom claims are being inserted into user tokens in addition to the standard claims. Your app can use custom claims to handle more complex scenarios, such as restricting access based on these claims. -You can add custom claims using the [complement token flow](/docs/apis/actions/complement-token) of the [actions feature](/docs/apis/actions/introduction). +You can add custom claims using the [complement token flow](/docs/apis/actions/complement-token) of the [actions feature](/docs/guides/manage/console/actions-overview). Multiple examples of Actions that result in custom claims can be found in our [Marketplace for ZITADEL Actions](https://github.com/zitadel/actions). diff --git a/docs/docs/apis/openidoauth/endpoints.mdx b/docs/docs/apis/openidoauth/endpoints.mdx index 7fa80e8bc..0733f478e 100644 --- a/docs/docs/apis/openidoauth/endpoints.mdx +++ b/docs/docs/apis/openidoauth/endpoints.mdx @@ -115,8 +115,8 @@ As per [OpenID Connect Core 1.0, Section 3.1.2.1](https://openid.net/specs/openi | Response Mode | Description | | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| query | Encode the returned parameters in the URL query string. This is the default when the Response type is `code`, for example [Web applications](/docs/guides/manage/console/applications#web). | -| fragment | Encode the returned parameters in the URL fragment. This is the default when the Response Type is `id_token`, for example implicit [User Agent apps](/docs/guides/manage/console/applications#user-agent). This mode will not work for server-side applications, because fragments are never sent by the browser to the server. | +| query | Encode the returned parameters in the URL query string. This is the default when the Response type is `code`, for example [Web applications](/docs/guides/manage/console/applications-overview#web). | +| fragment | Encode the returned parameters in the URL fragment. This is the default when the Response Type is `id_token`, for example implicit [User Agent apps](/docs/guides/manage/console/applications-overview#user-agent). This mode will not work for server-side applications, because fragments are never sent by the browser to the server. | | form_post[^1] | ZITADEL serves a small JavaScript to the browser which will send the returned parameters to the `redirect_uri` using HTTP POST. This mode only works for server-side applications and user agents which support / allow JavaScript. | [^1]: Implements [OAuth 2.0 Form Post Response Mode](https://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html) diff --git a/docs/docs/apis/saml/endpoints.md b/docs/docs/apis/saml/endpoints.md index b61586d15..9d3be22e5 100644 --- a/docs/docs/apis/saml/endpoints.md +++ b/docs/docs/apis/saml/endpoints.md @@ -64,6 +64,6 @@ spec** [Assertions and Protocols for the OASIS Security Assertion Markup Languag Custom attributes are being inserted into SAML response if not already present. Your app can use custom claims to handle more complex scenarios, such as restricting access based on these claims. -You can add custom attributes using the [complement SAMLresponse](/docs/apis/actions/customize-samlresponse) of the [actions feature](/docs/apis/actions/introduction). +You can add custom attributes using the [complement SAMLresponse](/docs/apis/actions/customize-samlresponse) of the [actions feature](/docs/guides/manage/console/actions-overview). Examples of Actions that result in custom attributes can be found in our [Marketplace for ZITADEL Actions](https://github.com/zitadel/actions). diff --git a/docs/docs/concepts/features/actions.md b/docs/docs/concepts/features/actions.md index 21626d237..6de4dfe0e 100644 --- a/docs/docs/concepts/features/actions.md +++ b/docs/docs/concepts/features/actions.md @@ -34,6 +34,6 @@ Within the JavaScript code, you can read and manipulate the state. ## Further reading - [Assign users a role after they register using an external identity provider](/guides/manage/customize/behavior) -- [Actions reference](/apis/actions/introduction#action) +- [Actions reference](/guides/manage/console/actions-overview#action) - [Actions Marketplace: Find example actions to use in ZITADEL](https://github.com/zitadel/actions) - [Example use cases](/apis/actions/code-examples) diff --git a/docs/docs/concepts/features/audit-trail.md b/docs/docs/concepts/features/audit-trail.md index aa456d072..4ffd47619 100644 --- a/docs/docs/concepts/features/audit-trail.md +++ b/docs/docs/concepts/features/audit-trail.md @@ -27,15 +27,15 @@ There will be three major areas for future development on the audit data ### Last changes of an object -You can check the last changes of most objects in the [Console](/docs/guides/manage/console/overview). -In the following screenshot you can see an example of last changes on an [user](/docs/guides/manage/console/users). +You can check the last changes of most objects in the [Console](/docs/guides/manage/console/console-overview). +In the following screenshot you can see an example of last changes on an [user](/docs/guides/manage/console/users-overview). The same view is available on several other objects such as organization or project. ![Profile Self Manage](/img/guides/console/myprofile.png) ### Event View -Administrators can see all events across an instance and filter them directly in [Console](/docs/guides/manage/console/overview). +Administrators can see all events across an instance and filter them directly in [Console](/docs/guides/manage/console/console-overview). Go to your default settings and then click on the Tab **Events** to open the Event Viewer or browse to $CUSTOM-DOMAIN/ui/console/events ![Event viewer](/img/concepts/audit-trail/event-viewer.png) diff --git a/docs/docs/concepts/features/console.md b/docs/docs/concepts/features/console.md index 03bcca2f0..1ae7dd17e 100644 --- a/docs/docs/concepts/features/console.md +++ b/docs/docs/concepts/features/console.md @@ -29,5 +29,5 @@ Overall, the ZITADEL console serves as a comprehensive tool for administrators t Notes: -- Detailed guide on [using the console](/docs/guides/manage/console/overview) +- Detailed guide on [using the console](/docs/guides/manage/console/console-overview) - [Restrict access](/docs/guides/solution-scenarios/restrict-console) to the console diff --git a/docs/docs/concepts/structure/_manager_description.mdx b/docs/docs/concepts/structure/_manager_description.mdx index db6eb7425..31a207a2e 100644 --- a/docs/docs/concepts/structure/_manager_description.mdx +++ b/docs/docs/concepts/structure/_manager_description.mdx @@ -1,10 +1,10 @@ -Managers are [human users or service users](/docs/concepts/structure/users) who have permission to manage resources within ZITADEL. +Managers are [human users or service users](/docs/guides/manage/console/users-overview) who have permission to manage resources within ZITADEL. Manager permissions can be assigned to different levels in ZITADEL: - **IAM Managers**: This is the highest level. Users with IAM Manager roles are able to manage the whole [Instance](/docs/concepts/structure/instance). -- **Org Managers**: Managers in the Organization Level are able to view or manage everything, according to their permissions, within the granted [Organization](/docs/concepts/structure/organizations). -- **Project Mangers**: In this level the user is able to manage a [project](/docs/concepts/structure/projects). +- **Org Managers**: Managers in the Organization Level are able to view or manage everything, according to their permissions, within the granted [Organization](/docs/guides/manage/console/organizations-overview). +- **Project Mangers**: In this level the user is able to manage a [project](/docs/guides/manage/console/projects-overview). - **Project Grant Manager**: The project grant manager is for [granted projects](/docs/concepts/structure/granted_projects) by another organization. Scope of the managers is restricted based on their level. diff --git a/docs/docs/concepts/structure/applications.md b/docs/docs/concepts/structure/applications.md index f9c8f30a0..cd5634dfc 100644 --- a/docs/docs/concepts/structure/applications.md +++ b/docs/docs/concepts/structure/applications.md @@ -24,5 +24,5 @@ Ensure the configuration of application settings is limited to authorized users ## References -- [Configure Applications in the Console](../../guides/manage/console/applications) +- [Configure Applications in the Console](../../guides/manage/console/applications-overview) - [ZITADEL API: Applications](/docs/apis/resources/mgmt/applications) diff --git a/docs/docs/concepts/structure/granted_projects.md b/docs/docs/concepts/structure/granted_projects.md index 5ab2e8460..cd642056a 100644 --- a/docs/docs/concepts/structure/granted_projects.md +++ b/docs/docs/concepts/structure/granted_projects.md @@ -11,4 +11,4 @@ With ZITADEL you can grant selected roles within your project to an organization An example could be a service provider that offers a SaaS solution that has different permissions for employees working in Sales and Accounting. As soon as a new client purchases the service, the provider could grant the roles ‘sales’ and ‘accounting’ to that organization, allowing them to self-manage how they want to allocate the roles to their users. -To learn more about how to setup Project grants, read this guide [here](../../guides/manage/console/projects#grant-a-project) +To learn more about how to setup Project grants, read this guide [here](../../guides/manage/console/projects-overview#granted-projects-b2b) diff --git a/docs/docs/concepts/structure/instance.mdx b/docs/docs/concepts/structure/instance.mdx index 419fa0b93..2e833a6d2 100644 --- a/docs/docs/concepts/structure/instance.mdx +++ b/docs/docs/concepts/structure/instance.mdx @@ -11,7 +11,7 @@ Within an instance all the default [settings](/concepts/structure/policies), such as branding, login policy, password policy, etc. for the system can be configured. One instance normally runs on one domain and represents one issuer (e.g login.customer.com). -One instance can contain multiple [organizations](/concepts/structure/organizations), +One instance can contain multiple [organizations](/guides/manage/console/organizations-overview), which in turn can represent your own company (e.g. departments), your business customers or a consumer organization. Read more about how to configure your instance in our [instance guide](/guides/manage/console/default-settings). diff --git a/docs/docs/concepts/structure/organizations.md b/docs/docs/concepts/structure/organizations.md index f84a68dd5..d5f2c348d 100644 --- a/docs/docs/concepts/structure/organizations.md +++ b/docs/docs/concepts/structure/organizations.md @@ -8,4 +8,4 @@ import OrgDescription from './_org_description.mdx'; -More about how to configure your organization read our [organization guide](../../guides/manage/console/organizations). \ No newline at end of file +More about how to configure your organization read our [organization guide](../../guides/manage/console/organizations-overview). \ No newline at end of file diff --git a/docs/docs/concepts/structure/projects.md b/docs/docs/concepts/structure/projects.md index f7035a1e2..9b7f167f6 100644 --- a/docs/docs/concepts/structure/projects.md +++ b/docs/docs/concepts/structure/projects.md @@ -8,7 +8,7 @@ import ProjectDescription from './\_project_description.mdx'; -To learn how to set up a project read this console guide [here](../../guides/manage/console/projects.mdx). +To learn how to set up a project read this console guide [here](../../guides/manage/console/projects-overview.mdx). ## Applications diff --git a/docs/docs/concepts/structure/users.md b/docs/docs/concepts/structure/users.md index 80568e847..911b54602 100644 --- a/docs/docs/concepts/structure/users.md +++ b/docs/docs/concepts/structure/users.md @@ -47,7 +47,7 @@ These invited users are called external users. ### Uniqueness of users -Users can only exist within one [organization](/concepts/structure/organizations). +Users can only exist within one [organization](/guides/manage/console/organizations-overview). It is currently not possible to move users between organizations. User accounts are uniquely identified by their `id` or `loginname` in combination of the `organization domain` (eg, `road.runner@acme.zitadel.local`). @@ -77,6 +77,6 @@ You can use organization metadata or your own business logic to describe a hiera ## References -- [Manage users in the Console](../../guides/manage/console/users) +- [Manage users in the Console](../../guides/manage/console/users-overview) - [ZITADEL APIs: Users](/docs/apis/resources/mgmt/users) - [User onboarding and registration](/docs/guides/integrate/onboarding) diff --git a/docs/docs/examples/identity-proxy/oauth2-proxy.md b/docs/docs/examples/identity-proxy/oauth2-proxy.md index 1b859fd59..a114a2793 100644 --- a/docs/docs/examples/identity-proxy/oauth2-proxy.md +++ b/docs/docs/examples/identity-proxy/oauth2-proxy.md @@ -63,7 +63,7 @@ http_address = "127.0.0.1:4180" #localdev only ### Check for groups -If you want oauth2-proxy to check for roles in the tokens you have to add an [action](/docs/apis/actions/introduction) in ZITADEL to [complement the token](/docs/apis/actions/complement-token) according to [this example](https://github.com/zitadel/actions/blob/main/examples/custom_roles.js) and add the following configuration to the config: +If you want oauth2-proxy to check for roles in the tokens you have to add an [action](/docs/guides/manage/console/actions-overview) in ZITADEL to [complement the token](/docs/apis/actions/complement-token) according to [this example](https://github.com/zitadel/actions/blob/main/examples/custom_roles.js) and add the following configuration to the config: ```toml oidc_groups_claim = "{your_actions_group_key}" diff --git a/docs/docs/examples/login/nextjs-b2b.md b/docs/docs/examples/login/nextjs-b2b.md index 1ac6b04d9..82697a87e 100644 --- a/docs/docs/examples/login/nextjs-b2b.md +++ b/docs/docs/examples/login/nextjs-b2b.md @@ -135,7 +135,7 @@ Let's call this new organization `Demo-Customer`. ### Users -Now switch back to the organization `Demo-Customer` and [create a new user](/guides/manage/console/users#create-user) in this organization. +Now switch back to the organization `Demo-Customer` and [create a new user](/guides/manage/console/users-overview#create-user) in this organization. Let's call the first user `Alice Admin`. Create a second user called `Eric Employee`. ### Manager Role @@ -152,7 +152,7 @@ Login with your user on the customer organization to validate the setup. ### Organization Grant Switch to the `Demo-Vendor` organization, select Projects in the navigation, and click on `Portal` and then `Grants`. -[Grant all roles of the Project](/guides/manage/console/projects#grant-a-project) to the organization `demo-customer.{YourDomain}.zitadel.cloud`. +[Grant all roles of the Project](/guides/manage/console/projects-overview#granted-projects-b2b) to the organization `demo-customer.{YourDomain}.zitadel.cloud`. ### Authorization diff --git a/docs/docs/examples/login/symfony.md b/docs/docs/examples/login/symfony.md index 8e5fd43b9..0859fdb57 100644 --- a/docs/docs/examples/login/symfony.md +++ b/docs/docs/examples/login/symfony.md @@ -102,7 +102,7 @@ composer require drenso/symfony-oidc-bundle First, we need to create a User class for the database, so we can persist user info between requests. In this case you don't need password authentication. Email addresses are not unique for ZITADEL users. There can be multiple user accounts with the same email address. -See [User Constraints](/docs/concepts/structure/users#constraints) for more details. +See [User Constraints](/docs/guides/manage/console/users-overview#considerations) for more details. We will use the User Info `sub` claim as unique "display" name for the user. `sub` equals the unique User ID from ZITADEL. This creates a User Repository and Entity that implements the `UserInterface`: diff --git a/docs/docs/examples/secure-api/python-flask.mdx b/docs/docs/examples/secure-api/python-flask.mdx index 1a03b2b03..bc99a1273 100644 --- a/docs/docs/examples/secure-api/python-flask.mdx +++ b/docs/docs/examples/secure-api/python-flask.mdx @@ -33,7 +33,7 @@ You need to setup a couple of things in ZITADEL. 1. If you don't have an instance yet, please go ahead and create an instance as explained [here](/docs/guides/start/quickstart#2-create-your-first-instance). Also, create a new project by following the steps [here](/docs/guides/start/quickstart#2-create-your-first-instance). -2. You must create an API application in your project. Follow [this guide](/docs/guides/manage/console/applications) to create a new application of type "API" with authentication method "Basic". Save both the ClientID and ClientSecret after you create the application. +2. You must create an API application in your project. Follow [this guide](/docs/guides/manage/console/applications-overview) to create a new application of type "API" with authentication method "Basic". Save both the ClientID and ClientSecret after you create the application. ### Create the API diff --git a/docs/docs/guides/integrate/actions/migrate-from-v1.md b/docs/docs/guides/integrate/actions/migrate-from-v1.md index b780f8574..e1f10f006 100644 --- a/docs/docs/guides/integrate/actions/migrate-from-v1.md +++ b/docs/docs/guides/integrate/actions/migrate-from-v1.md @@ -2,7 +2,7 @@ title: Migrate from Actions v1 to v2 --- -In this guide, you will have all necessary information to migrate from Actions v1 to Actions v2 with all currently [available Flow Types](/apis/actions/introduction#available-flow-types). +In this guide, you will have all necessary information to migrate from Actions v1 to Actions v2 with all currently [available Flow Types](/guides/manage/console/actions-overview#available-flow-types). ## Internal Authentication diff --git a/docs/docs/guides/integrate/login/hosted-login.mdx b/docs/docs/guides/integrate/login/hosted-login.mdx index be89e9659..7daf98d35 100644 --- a/docs/docs/guides/integrate/login/hosted-login.mdx +++ b/docs/docs/guides/integrate/login/hosted-login.mdx @@ -60,7 +60,7 @@ ZITADEL offers various [identity provider templates](/docs/guides/integrate/iden ### Multi-tenancy authentication -ZITADEL simplifies multi-tenancy authentication by securely managing authentication for multiple tenants, called [Organizations](/docs/concepts/structure/organizations), within a single [instance](/docs/concepts/structure/instance). +ZITADEL simplifies multi-tenancy authentication by securely managing authentication for multiple tenants, called [Organizations](/docs/guides/manage/console/organizations-overview), within a single [instance](/docs/concepts/structure/instance). Key features include: diff --git a/docs/docs/guides/integrate/login/login-users.mdx b/docs/docs/guides/integrate/login/login-users.mdx index 13439ac1d..ed7c4ec9b 100644 --- a/docs/docs/guides/integrate/login/login-users.mdx +++ b/docs/docs/guides/integrate/login/login-users.mdx @@ -124,4 +124,4 @@ Main reasons why developers might want to build their own login UI include: - Learn how to [register and onboard users](/docs/guides/integrate/onboarding) - Learn how to [build your own login UI](/docs/guides/integrate/login-ui) based on ZITADEL -- Learn how to [configure ZITADEL](/docs/guides/manage/console/overview) through the Console +- Learn how to [configure ZITADEL](/docs/guides/manage/console/console-overview) through the Console diff --git a/docs/docs/guides/integrate/login/oidc/device-authorization.mdx b/docs/docs/guides/integrate/login/oidc/device-authorization.mdx index 42c299987..4980b363e 100644 --- a/docs/docs/guides/integrate/login/oidc/device-authorization.mdx +++ b/docs/docs/guides/integrate/login/oidc/device-authorization.mdx @@ -1,6 +1,6 @@ --- title: Integrating Your Application with ZITADEL using RFC 8628 OAuth 2.0 Device Authorization Flow -sidebar_label: Device Authorization +sidebar_label: Device Authorization Flow --- ZITADEL implements device authorization as per [RFC 8628](https://datatracker.ietf.org/doc/html/rfc8628). This document demonstrates its use. diff --git a/docs/docs/guides/integrate/login/oidc/login-users.mdx b/docs/docs/guides/integrate/login/oidc/login-users.mdx index c71b8eace..68c077c12 100644 --- a/docs/docs/guides/integrate/login/oidc/login-users.mdx +++ b/docs/docs/guides/integrate/login/oidc/login-users.mdx @@ -1,6 +1,6 @@ --- title: Authenticate users with OpenID Connect -sidebar_label: Login +sidebar_label: OIDC Code Flow + PKCE --- import Tabs from "@theme/Tabs"; diff --git a/docs/docs/guides/integrate/onboarding/b2b.mdx b/docs/docs/guides/integrate/onboarding/b2b.mdx index 189250e2b..e1584218f 100644 --- a/docs/docs/guides/integrate/onboarding/b2b.mdx +++ b/docs/docs/guides/integrate/onboarding/b2b.mdx @@ -25,7 +25,7 @@ ZITADEL does have multiple possibilities to achieve that process. ## Onboard customers through the ZITADEL Management Console -Each ZITADEL instance does automatically bring a management console with it. The [console](/docs/guides/manage/console/overview) can be used to manage all your resources through a UI. +Each ZITADEL instance does automatically bring a management console with it. The [console](/docs/guides/manage/console/console-overview) can be used to manage all your resources through a UI. You can access it by calling the following URL: `${CUSTOM-DOMAIN}/ui/` Make sure that your admins have a [Manager role](/docs/guides/manage/console/managers) with permissions on an instance level such as "INSTANCE_OWNER" diff --git a/docs/docs/guides/integrate/scim-okta-guide.md b/docs/docs/guides/integrate/scim-okta-guide.md index 1e2073bb8..7c0b47418 100644 --- a/docs/docs/guides/integrate/scim-okta-guide.md +++ b/docs/docs/guides/integrate/scim-okta-guide.md @@ -18,7 +18,7 @@ SCIM provisioning in ZITADEL is accomplished by authenticating a Service User wi 1. **Create a Service User**: - * Follow [this guide](https://zitadel.com/docs/guides/manage/console/users) to create a Service User within your ZITADEL Organization. + * Follow [this guide](https://zitadel.com/docs/guides/manage/console/users-overview) to create a Service User within your ZITADEL Organization. 2. **Assign the Role**: @@ -111,7 +111,7 @@ Review and adjust attribute mappings in Okta as needed: * [Authenticate users with SAML](https://zitadel.com/docs/guides/integrate/login/saml) -* [ZITADEL: Creating Service Users](https://zitadel.com/docs/guides/manage/console/users) +* [ZITADEL: Creating Service Users](https://zitadel.com/docs/guides/manage/console/users-overview) * [ZITADEL: Service User Authentication](https://zitadel.com/docs/guides/integrate/service-users/authenticate-service-users) diff --git a/docs/docs/guides/integrate/service-users/client-credentials.md b/docs/docs/guides/integrate/service-users/client-credentials.md index a6ef909d2..204119f1c 100644 --- a/docs/docs/guides/integrate/service-users/client-credentials.md +++ b/docs/docs/guides/integrate/service-users/client-credentials.md @@ -4,7 +4,7 @@ sidebar_label: Client credential authentication sidebar_position: 3 --- -This guide demonstrates how developers can leverage Client Credential authentication to secure communication between [service users](/concepts/structure/users) and client applications within ZITADEL. +This guide demonstrates how developers can leverage Client Credential authentication to secure communication between [service users](/guides/manage/console/users-overview#service-users-machine-accounts) and client applications within ZITADEL. In ZITADEL, the Client Credentials Flow can be used for this [non-interactive authentication](authenticate-service-users) as alternative to the [JWT profile authentication](../service-users/authenticate-service-users). diff --git a/docs/docs/guides/integrate/services/atlassian-saml.md b/docs/docs/guides/integrate/services/atlassian-saml.md index eb36bbe68..a38f80976 100644 --- a/docs/docs/guides/integrate/services/atlassian-saml.md +++ b/docs/docs/guides/integrate/services/atlassian-saml.md @@ -13,8 +13,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - existing Atlassian Access setup, including verified domain > We have to switch between ZITADEL and Atlassian. If the headings begin with "ZITADEL" switch to the ZITADEL diff --git a/docs/docs/guides/integrate/services/auth0-oidc.mdx b/docs/docs/guides/integrate/services/auth0-oidc.mdx index b30f8b782..d39d5cd0e 100644 --- a/docs/docs/guides/integrate/services/auth0-oidc.mdx +++ b/docs/docs/guides/integrate/services/auth0-oidc.mdx @@ -15,8 +15,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - existing Auth0 tenant as described [here](https://auth0.com/docs/get-started/auth0-overview/create-tenants) > We have to switch between ZITADEL and a Auth0. If the headings begin with "ZITADEL" switch to the ZITADEL Console and if the headings start with "Auth0" please switch to the Auth0 GUI. diff --git a/docs/docs/guides/integrate/services/auth0-saml.md b/docs/docs/guides/integrate/services/auth0-saml.md index ca6a65be6..fa1322d3c 100644 --- a/docs/docs/guides/integrate/services/auth0-saml.md +++ b/docs/docs/guides/integrate/services/auth0-saml.md @@ -13,8 +13,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - existing Auth0 tenant as described [here](https://auth0.com/docs/get-started/auth0-overview/create-tenants) > We have to switch between ZITADEL and a Auth0. If the headings begin with "ZITADEL" switch to the ZITADEL Console and diff --git a/docs/docs/guides/integrate/services/aws-saml.md b/docs/docs/guides/integrate/services/aws-saml.md index c5f520236..cd9c4a6ed 100644 --- a/docs/docs/guides/integrate/services/aws-saml.md +++ b/docs/docs/guides/integrate/services/aws-saml.md @@ -13,8 +13,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - prerequisites on AWS side [here](https://docs.aws.amazon.com/singlesignon/latest/userguide/prereqs.html). - enabled AWS SSO [here](https://docs.aws.amazon.com/singlesignon/latest/userguide/step1.html?icmpid=docs_sso_console) diff --git a/docs/docs/guides/integrate/services/gitlab-saml.md b/docs/docs/guides/integrate/services/gitlab-saml.md index 7a8346b82..52a0e77a1 100644 --- a/docs/docs/guides/integrate/services/gitlab-saml.md +++ b/docs/docs/guides/integrate/services/gitlab-saml.md @@ -13,8 +13,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - existing Gitlab SaaS Setup in the premium tier > We have to switch between ZITADEL and Gitlab. If the headings begin with "ZITADEL" switch to the ZITADEL diff --git a/docs/docs/guides/integrate/services/gitlab-self-hosted.mdx b/docs/docs/guides/integrate/services/gitlab-self-hosted.mdx index 25b0cf9d6..d09e16c58 100644 --- a/docs/docs/guides/integrate/services/gitlab-self-hosted.mdx +++ b/docs/docs/guides/integrate/services/gitlab-self-hosted.mdx @@ -15,8 +15,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - running Gitlab instance see [installation guide](https://docs.gitlab.com/ee/install/) diff --git a/docs/docs/guides/integrate/services/google-cloud.mdx b/docs/docs/guides/integrate/services/google-cloud.mdx index 49cb8ebdd..3b8a4adf1 100644 --- a/docs/docs/guides/integrate/services/google-cloud.mdx +++ b/docs/docs/guides/integrate/services/google-cloud.mdx @@ -16,8 +16,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - prerequisites on Google Cloud side [in the configuration guide](https://cloud.google.com/iam/docs/configuring-workforce-identity-federation). > We have to switch between ZITADEL and a Google Cloud. If the headings begin with "ZITADEL" switch to the ZITADEL Console and if @@ -84,7 +84,7 @@ Go to your project and create roles according to the Groups in Google Cloud. Authorize a test user by assigning roles in ZITADEL. Google Cloud expects some claims, including groups, in a specific format as [described here](https://cloud.google.com/iam/docs/workforce-identity-federation#attribute-mappings). -Claims can be transformed in ZITADEL with [Actions](/apis/actions/introduction). +Claims can be transformed in ZITADEL with [Actions](/guides/manage/console/actions-overview). Create an Action with the following code to flatten the roles and include the claim for the users' display name. diff --git a/docs/docs/guides/integrate/services/pingidentity-saml.md b/docs/docs/guides/integrate/services/pingidentity-saml.md index 12e0c13a9..8e5df3389 100644 --- a/docs/docs/guides/integrate/services/pingidentity-saml.md +++ b/docs/docs/guides/integrate/services/pingidentity-saml.md @@ -13,8 +13,8 @@ It covers how to: Prerequisites: - existing ZITADEL Instance, if not present follow [this guide](/guides/start/quickstart) -- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations) -- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects) +- existing ZITADEL Organization, if not present follow [this guide](/guides/manage/console/organizations-overview) +- existing ZITADEL project, if not present follow the first 3 steps [here](/guides/manage/console/projects-overview) - existing Pingidentity environment [here](https://docs.pingidentity.com/bundle/pingone/page/wqe1564020490538.html) > We have to switch between ZITADEL and Ping Identity. If the headings begin with "ZITADEL" switch to the ZITADEL diff --git a/docs/docs/guides/integrate/token-introspection/index.md b/docs/docs/guides/integrate/token-introspection/index.md index b7782d952..f68dcc9c4 100644 --- a/docs/docs/guides/integrate/token-introspection/index.md +++ b/docs/docs/guides/integrate/token-introspection/index.md @@ -24,7 +24,7 @@ If you have an API that behaves as an OAuth resource server that can be accessed ## Service users -If there are client APIs or systems that need to access other protected APIs, these APIs or systems must be declared as [service users](/docs/concepts/structure/users). +If there are client APIs or systems that need to access other protected APIs, these APIs or systems must be declared as [service users](/docs/guides/manage/console/users-overview). A service user is not considered an application type in ZITADEL. Read the introduction on how to [authenticate service users](../service-users/authenticate-service-users.md). diff --git a/docs/docs/guides/manage/cloud/support.md b/docs/docs/guides/manage/cloud/support.md index f72df7e5b..c1612c73e 100644 --- a/docs/docs/guides/manage/cloud/support.md +++ b/docs/docs/guides/manage/cloud/support.md @@ -1,6 +1,6 @@ --- title: ZITADEL Support -sidebar_label: Support +sidebar_label: Customer Support --- :::note diff --git a/docs/docs/guides/manage/console/actions-overview.mdx b/docs/docs/guides/manage/console/actions-overview.mdx new file mode 100644 index 000000000..324e72e40 --- /dev/null +++ b/docs/docs/guides/manage/console/actions-overview.mdx @@ -0,0 +1,102 @@ +--- +title: Actions +sidebar_label: Overview +--- + +## Overview + +An Identity and Access Management system is a highly interactive environment. ZITADEL includes a powerful feature called **Actions**, which allows you to programmatically react to specific events within the system. + +Actions allow you to define custom scripts (JavaScript) that are executed based on specific triggers (Flows). This enables advanced customization, such as modifying tokens, calling external APIs during login, or customizing authentication flows. + +Actions menu + +## How Actions Work + +The Actions architecture consists of three main components: + +1. **Action:** The JavaScript code containing your business logic. +2. **Trigger Type:** The specific event in ZITADEL (e.g., "Post Authentication") where code execution is allowed. +3. **Flow:** The configuration that links an Action to a Trigger Type. + +### The JavaScript Runtime + +ZITADEL interprets your Action scripts as JavaScript. + +* **Compliance:** Scripts must be **ECMAScript 5.1(+)** compliant. +* **Engine:** The underlying engine is [goja](https://github.com/dop251/goja). Refer to their documentation for detailed references about the underlying library features and limitations. + +### Structure of an Action Script + +The script of an action must contain a function that matches the Action's name. ZITADEL calls this function at runtime. + +The function receives two primary objects: + +* `ctx` (Context): Provides **readable** information about the current request (User, Request Info, etc.). +* `api` (API): Provides **methods** to mutate state (Set Claims, Deny Access, etc.). + +**Example:** +If your action is named **doSomething**, your script must look like this: + +```js +function doSomething(ctx, api){ + // read from ctx and manipulate with api +} +``` + +### Available Modules + +You can use the following built-in modules inside your JavaScript code: + +* [**HTTP module**](../../../apis/actions/modules#http): To call external APIs / Webhooks. +* [**Logging module**](../../../apis/actions/modules#log): To log information to stdout (useful for debugging). +* [**UUID module**](../../../apis/actions/modules#uuid): To generate UUIDs. + +Stuck customizing ZITADEL actions? Find samples for setting OIDC claims, SAML attributes, extending JIT provisioning data, calling external APIs, and more in [this repository](https://github.com/zitadel/actions). + +## Managing Actions in Console + +### 1. Create an Action + +To add an action, navigate to your Organization's top navigation and select **Actions**. Click the **New** button and provide: + +* **Name:** Must match the function name in your script. +* **Script:** Your JavaScript code. +* **Timeout:** How long the script is allowed to run before being terminated. +* **Allowed to Fail:** If checked, the flow will continue even if the script throws an error. + +Create Action + +### 2. Create a Flow (Link Action to Trigger) + +Merely creating an Action does not run it. You must create a **Flow** to define *when* it runs. + +1. Select the **Flow Type** (e.g., External Authentication). +2. Select the **Trigger** (e.g., Post Authentication). +3. Add your Action to the list of executed scripts. + +Flow + +**Example Scenario:** +You create an **External Authentication** Flow with a **Post Authentication** trigger. Now, whenever a user authenticates via an external IDP (like Google or Azure AD), your Action is triggered immediately after the authentication step but before the session is finalized. + +## Available Flow Types + +Trigger types define the point during the execution of a request. Each trigger defines which readable information (`ctx`) and mutable properties (`api`) are passed into the called function. + +Currently, ZITADEL supports the following flows: + +* [**Internal Authentication**](../../../apis/actions/internal-authentication): Triggers during login with ZITADEL (username/password). +* [**External Authentication**](../../../apis/actions/external-authentication): Triggers during login with an external Identity Provider. +* [**Complement Token**](../../../apis/actions/complement-token): Triggers when tokens (ID Token / Access Token) are created, allowing you to add custom claims. +* [**Customize SAML Response**](../../../apis/actions/customize-samlresponse): Triggers when a SAML response is generated. + +## References + +* [Guide: Customize Behavior with Actions](/guides/manage/customize/behavior) +* [ZITADEL Roadmap](https://zitadel.com/roadmap) + diff --git a/docs/docs/guides/manage/console/applications-overview.mdx b/docs/docs/guides/manage/console/applications-overview.mdx new file mode 100644 index 000000000..00f110098 --- /dev/null +++ b/docs/docs/guides/manage/console/applications-overview.mdx @@ -0,0 +1,186 @@ +--- +title: Applications +sidebar_label: Applications +sidebar_position: 5 +--- + +import ThemedImage from "@theme/ThemedImage"; +import AuthType from "../../integrate/application/_auth-type.mdx"; +import ReviewConfig from "../../integrate/application/_review-config.mdx"; +import AppType from "./_application-types.mdx"; + +## What is an application? + +Applications are the entry point to your [Project](projects-overview.mdx). Users either login into one of your clients (Frontend) and interact with them directly, or use one of your APIs (Backend). + +All applications within a project share the same **Roles** and **Authorizations**. This means you define a role once (e.g., `admin`) on the Project level, and it applies across all your web, mobile, and API applications. + +To access your applications, navigate to your Project in the Console and select your application. + +Granted project + +## Create an Application + +To add an application to your project, click on the **New** button and select your application type. + +Add application + +## Application Types + +ZITADEL offers five client types to cover different architectural patterns: + + + +The first three options (Web, Native, and User Agent) require user interaction. The fourth option (API) is for machine-to-machine communication without direct user interaction. + +Depending on the app type, there are small differences in the possible settings. To get a good understanding about user profiles and recommended flows, read the [Recommended Flows Guide](../../integrate/login/oidc/oauth-recommended-flows.md#different-client-profiles). + +### Web + +Web applications are **server-side rendered** applications that users interact with. +* **Examples:** Applications using Java (Spring/Thymeleaf), .NET (Razor), PHP, Python (Django/Flask), or enabling SSO in tools like GitLab. +* **NextJS:** A NextJS app is typically a Web Application because it can execute server-side code (SSR/API routes) to keep secrets safe. +* **Authentication:** Uses Authorization Code Flow (PKCE recommended) with a Client Secret. + + + +### Native + +Native Applications are installed on a thin client, such as a smartphone or desktop computer. +* **Examples:** Android Apps, iOS Apps, Desktop Apps (Electron, Tauri). +* **Authentication:** Uses the Key file generated by ZITADEL to authenticate or Authorization Code Flow with PKCE (for user login). + + + +### User Agent + +User Agent Applications are executed entirely in the web browser (Client-Side). +* **Examples:** Single Page Applications (SPA) built with React, Angular, Vue, or Svelte that do not have a backend server. +* **Authentication:** Uses Authorization Code Flow with PKCE (implicit flow is supported but not recommended). + + + +### API + +These are applications without human interaction, accessed by other applications or services (Machine-to-Machine). +* **Examples:** Background workers, CLIs, Daemons, Microservices. +* **Authentication:** Uses Client Credentials (JWT Profile or Basic Auth) or Private Key JWT. + + + +### SAML + +If your application doesn't support the OIDC standard but supports SAML 2.0, choose this type. SAML is an XML-based open standard for exchanging authentication and authorization data. + +After creating a SAML app, you can either: +1. Add a link to a SAML metadata file. +2. Upload the metadata XML file directly. + +You can find example configurations for SAML 2.0 in our [integrate services](../../integrate/login/saml) guides. + +## Configuration + +### Redirect URIs + +App Types with user interaction (Web, Native, and User Agent) require Redirect URIs. These are the allowed URLs where ZITADEL sends the user after a successful login. + +* **Security:** ZITADEL strictly checks these URIs during the login process. They must match exactly what is defined in your application code. +* **Protocols:** Native applications can use custom protocols (e.g., `myapp://`) instead of `http/https`. + +Redirect URIs + +### Development Mode + +If you are developing locally or need to redirect users to a non-secure protocol (other than `https://`), you must enable **Development mode**. +When disabled, ZITADEL enforces strict security and only allows `https`. + +Development mode + +**Glob Patterns:** +Development mode allows the use of glob patterns in Redirect URIs for flexibility: + +| Special Terms | Meaning | +| :--- | :--- | +| `*` | Matches any sequence of **non-path-separators**. | +| `/**/` | Matches zero or more directories. | +| `?` | Matches any single non-path-separator character. | +| `[class]` | Matches any single character against a class of characters (e.g., `[a-z]`). | +| `{alt1,...}` | Matches a sequence if one of the comma-separated alternatives matches. | + +:::note +Double stars (`**`) should appear surrounded by path separators (e.g., `/**/`). A pattern like `path/to/**.txt` is invalid; use `path/to/**/*.txt`. +::: + +:::tip IPv6 +When IPv6 URIs are used as redirects in development mode, square brackets must be escaped as they are special terms for globs. Example: `http://\[::1\]:80` +::: + +### Review Configuration + + + +## Application Settings + +After creating an application, you can modify its configuration. +* **Auth Method:** You can switch authentication methods (e.g., from Basic to Private Key JWT) via the toggle or dropdowns. +* **OIDC Compliance:** The Console checks if your configuration is OIDC compliant and shows tasks for completion if anything is missing. + +:::caution +You **cannot** change the Application Type (e.g., from Web to Native) after creation. You must delete and recreate the application. +::: + +Application Settings + +### Token Settings + +In the **Token Settings** section, you can customize the tokens issued for this application: +* **Token Type:** Switch between **Bearer Token** (Opaque) and **JWT**. +* **Content:** Check options to include User Roles and User Information inside the ID Token. +* **ClockSkew:** Optionally set a time buffer added to the expiration time of the issued token to handle server time differences. + +Token settings + +### Additional Origins + +If your application makes requests from domains other than the Redirect URI (e.g., a Javascript app fetching data from an API on a different domain), you can specify them here to configure CORS (Cross-Origin Resource Sharing). + +Additional origins + +## Security Considerations + +Ensure the configuration of application settings is limited to authorized users only. + +* Use [Manager roles](./managers) to limit permissions for your users to make changes to your applications. +* When [granting projects](../../../concepts/structure/granted_projects.md) to other organizations, the receiving organization **cannot** see or change the application configuration. They can only assign roles. + +## References + +- [Recommended OIDC Flows](../../integrate/login/oidc/oauth-recommended-flows.md) \ No newline at end of file diff --git a/docs/docs/guides/manage/console/console-overview.mdx b/docs/docs/guides/manage/console/console-overview.mdx new file mode 100644 index 000000000..3f9ebd286 --- /dev/null +++ b/docs/docs/guides/manage/console/console-overview.mdx @@ -0,0 +1,57 @@ +--- +title: Console +sidebar_label: Console +--- + +## Overview + +The ZITADEL Console is the web-based Dashboard UI designed to facilitate the management and administration of ZITADEL resources and configurations. It serves as a central hub where [Managers](/docs/concepts/structure/managers) can perform tasks related to identity and access management, configure authentication methods, and manage the organization's infrastructure. + +While the Console is primarily a tool for administrators, it can also be accessed by end-users to manage their own profiles (e.g., password reset, MFA setup), unless you [restrict access](/docs/guides/solution-scenarios/restrict-console) to build your own custom UI. + +## Accessing the Console + +The console is available by navigating to the [custom domain](/docs/concepts/features/custom-domain) of your instance and appending the path `/ui/console`. + +## Navigation and Context + +When logged in, you are greeted by the home page, which allows you to set shortcuts to frequently used settings and projects. + +### Context Switcher +ZITADEL is a multi-tenant system. The Console features a **Context Switcher** in the **top-left** corner. This allows you to switch between the different **Organizations** you manage. + +Depending on your use case: +* **B2C:** You might stick to your global organization. +* **B2B:** You will frequently switch between multiple organizations to manage specific customer settings. + +Context switcher + +To understand how to structure your organizations, read our [Solution Scenario](/docs/guides/solution-scenarios/configurations) guides. + +## Key Capabilities + +The Console enables administrators to perform the following critical tasks: + +1. **Default Settings:** Managers can configure global system defaults. This includes authentication methods, security policies (like password complexity or lockout policies), and other system-wide parameters. +2. **Resource Management:** Create, update, and delete essential resources such as [Organizations](./organizations-overview), [Projects](./projects-overview), and [Applications](./applications-overview). +3. **User Management:** Manage the lifecycle of [User accounts](./users-overview). This includes creating new users, updating profiles, resetting passwords, and deactivating accounts. +4. **Access Control:** Define and manage permissions. Administrators can assign [Roles](/docs/guides/manage/console/roles) to users and configure fine-grained access controls for specific resources. +5. **Manager Assignment:** Delegate administrative tasks by assigning **Manager** roles (e.g., Org Owner, Project Owner) to specific users, ensuring proper oversight and segregation of duties. +6. **Customization and Branding:** Customize the look and feel of ZITADEL. You can upload custom logos, select color schemes, and apply [branding](/docs/guides/manage/customize/branding) to match your corporate identity. +7. **Audit Logging:** Access [Audit Logs](/docs/concepts/features/audit-trail) to track user activity and configuration changes. This is essential for monitoring security events and maintaining regulatory compliance. + +## Security and Restrictions + +### Prevent Console Access +In many implementations, specifically white-label B2C scenarios, you may want to prevent end-users from accessing the generic ZITADEL Console entirely. + +Administrators can restrict access to the console, forcing users to interact only with your own applications or custom user interfaces. +Please follow the [Restrict Console Access guide](/docs/guides/solution-scenarios/restrict-console) to achieve this. + +## References + +* [Manager Roles Concept](/docs/concepts/structure/managers) \ No newline at end of file diff --git a/docs/docs/guides/manage/console/organizations-overview.mdx b/docs/docs/guides/manage/console/organizations-overview.mdx new file mode 100644 index 000000000..cb54f2673 --- /dev/null +++ b/docs/docs/guides/manage/console/organizations-overview.mdx @@ -0,0 +1,155 @@ +--- +title: Organizations +sidebar_label: Organizations +--- + +## Overview + +ZITADEL is organized around the idea of multi-tenancy. An **Organization** is the vessel where your projects and users live. It is comparable to a tenant in a SaaS system or an organizational unit (OU) in a directory-based system. + +Key characteristics of Organizations in ZITADEL include: + +* **Multi-tenancy:** Multiple organizations can be managed within one [instance](/concepts/structure/instance). +* **Isolation:** Users and data from one organization are separated from others. +* **Delegation:** Organizations can grant each other rights to self-manage certain aspects of the IAM (e.g., roles for access management). + +In a B2B use case, an organization typically represents a business partner who requires their own branding, specific access settings, or distinct federated login providers. + +![Overview ZITADEL Organizations](/img/concepts/objects/organization.png) + +## Structure and Delegation + +### Projects within Organizations +You can use **Projects** within your organization to manage the security context of closely related components, such as roles, grants, and authorizations for multiple clients. You can set up multiple projects within a single organization. + +### Organization Grants +ZITADEL allows you to give *other* organizations permission to manage certain aspects of a project within *your* organization. + +For example, you could set up a project with roles that define access to your software, but allow a partner organization to allocate those roles to their own users independently. As a service provider, this allows you to establish a self-service culture for your business customers. + +![Organization Grant](/img/concepts/objects/organization_grants.png) + +## Managing Organizations + +### Create a new organization + +To create a new organization, click on the organizations dropdown in the Console and select **New organization**. + +You have two options regarding the initial administrator: +1. **Current User:** Create the organization with your currently logged-in user as the organization manager. A membership for the new organization will be added to your account. +2. **New Account:** Directly create a new account to manage the organization. + +Select Organization + +### Self-Service Registration +If you want to enable your customers to create organizations themselves, ZITADEL provides a built-in registration form at: +`https://$CUSTOM-DOMAIN/ui/login/register/org` + +The customer simply fills in the organization name and contact details to get started. + +Register new organization + +### Default Organization +On the **Default settings** page (`${CUSTOM_DOMAIN}`/ui/console/orgs), you can designate a specific organization as the "Default". +* Click the **...** on the right-hand side of the table and select **Set as default organization**. +* The current default is marked by a "Default" label. + +When no specific organization is selected (e.g., during an auth request or via [Domain Discovery](/docs/guides/solution-scenarios/domain-discovery)), users are directed to this default organization for login and self-registration. + +## Usernames and Domains + +Each organization has its own pool of users, covering both human and service users. How these users authenticate depends on your domain configuration. + +### Login Name Formats +By default, if the setting **User Loginname must contain orgdomain** is **disabled**, usernames are unique across the entire instance. + +If you require usernames to be scoped to the organization (common in multi-tenant setups), you can enable **User Loginname must contain orgdomain** in your [Domain settings](./default-settings#domain-settings). Login names will then follow the format: + +`{username}@{domainname}.{zitadeldomain}` + +**Example:** +If a user has the username `john.doe` in an organization with the domain `acme`, the generated login name is: +`john.doe@acme.zitadel.cloud` + +### Custom Domain Names +You can verify your own domain names (e.g., `acme.ch`) to simplify the user experience. Once verified: +1. ZITADEL generates additional login names for users. +2. The user `john.doe` can log in via `john.doe@acme.ch` OR `john.doe@acme.zitadel.cloud`. + +:::info +Only one user with the username `john.doe` can exist within the organization `ACME`, regardless of which domain suffix they use to log in. +::: + +### Primary Domain +An organization can have multiple domain names, but only one is **Primary**. The primary domain determines: +* Which login name is displayed to the user in the UI. +* What information is asserted in `access_tokens` (specifically the `preferred_username` claim). + +:::caution +Setting a Primary Domain affects users. +If a user `coyote` exists in the global organization with the login name `coyote@acme.ch`, and you subsequently verify `acme.ch` for a specific organization, the global user's login name will be replaced with `coyote@{randomvalue.tld}`. ZITADEL will notify users affected by this change. +::: + +## Domain Verification Guide + +If the **validate org domains** setting in [Domain Settings](./default-settings#domain-settings) is set to `true`, you must prove ownership of your domain via DNS or HTTP challenge. + +:::info +You can disable domain verification requirements in the [default settings](/docs/guides/manage/console/default-settings#domain-settings) if you are running a self-hosted instance and do not require strict validation. +::: + +1. Navigate to your **Organization Settings**. +2. Select the menu entry **Verified domains**. +3. Click on the domain name you wish to verify. A dialog will appear offering DNS or HTTP challenge methods. + +Verify Domain Dialog + +4. **DNS Challenge Example:** Create a TXT record with your DNS provider using the value provided by ZITADEL. + * [Cloudflare Guide](https://www.zoho.com/mail/help/adminconsole/cloudflare.html#alink1) + * [Squarespace Guide](https://support.squarespace.com/hc/en-us/articles/205812388-Domain-verification-with-a-TXT-Record-alternative-method-) + * [Name.com Guide](https://www.name.com/support/articles/115004972547-adding-a-txt-record) + * [EasyDNS Guide](https://kb.easydns.com/knowledge/how-to-make-a-dns-entry/) + +5. Once verified, click **Verify**. +6. (Optional) Click **Set as primary** to make this the default domain for user login names. + +:::caution +Do not delete the DNS verification record after success. ZITADEL re-checks domain ownership periodically. +::: + +## Organization Settings + +Organizations can inherit configuration from the instance defaults or override them with specific policies. Settings configured at the Organization level take priority over Default settings. + +* [**Login Behavior and Access**](./default-settings#login-behavior-and-access): MFA options, passwordless authentication rules, and session lifetimes. +* [**Identity Providers**](./default-settings#identity-providers): Configure IDPs available specifically for this organization. +* [**Password Complexity**](./default-settings#password-complexity): Specific requirements for passwords (length, symbols, etc.). +* [**Lockout**](./default-settings#lockout): Max login attempts before an account is locked. +* [**Branding**](./default-settings#branding): Custom appearance for the login interface. +* [**Message Texts**](./default-settings#message-texts): Custom text and internationalization for emails. +* [**Login Interface Texts**](./default-settings#login-interface-texts): Custom text for the login UI. +* [**External Links**](./default-settings#external-links): Links to your specific Terms of Service, Privacy Policy, and Support. + +### Applying Custom Branding +To apply a custom design (e.g., for a specific B2B customer): +1. Navigate to the Organization settings. +2. Configure the **Branding** section. +3. Ensure the **Login Behavior** on your **Project** is configured to allow organization-specific branding. Read more about project branding [here](./projects-overview#branding). + +### Triggering Organization Context +By default, the ZITADEL Login uses the instance default settings. To trigger the specific settings (and branding) of an organization, you must provide the organization scope in your authentication request: + +```bash +urn:zitadel:iam:org:id:{id} \ No newline at end of file diff --git a/docs/docs/guides/manage/console/projects-overview.mdx b/docs/docs/guides/manage/console/projects-overview.mdx new file mode 100644 index 000000000..77a157762 --- /dev/null +++ b/docs/docs/guides/manage/console/projects-overview.mdx @@ -0,0 +1,138 @@ +--- +title: Organize applications, services, and roles with projects +sidebar_label: Projects +sidebar_position: 4 +--- + +import ProjectDescription from "../../../concepts/structure/_project_description.mdx"; + +## What is a project? + + + +A Project is the vessel that holds your Applications and Roles. It defines the security context for a specific software solution. + +### Example Scenario +Imagine you are building a **Point of Sales (POS)** platform. In ZITADEL, you would create one Project (e.g., named `POS`). +* **Applications:** Your web portal for administration, your iOS app, and your Android app would all be defined as **Applications** within this single Project. +* **Roles:** You would create **Roles** (e.g., `admin`, `cashier`, `viewer`) inside this Project. +* **Authorization:** All applications in this project share these roles, allowing you to create unified authorizations for your users across all platforms. + +![POS Project](/img/guides/console/posproject.png) + +## Core Components + +### Applications +Applications define the different clients (web apps, native mobile apps, server-side APIs) that share the same roles and security context. +At the moment, we support OIDC and almost every OAuth2 client. We'll be expanding this with SAML shortly. +Go to [Applications](./applications-overview) for more details. + +### Roles +A role consists of different attributes, but only the **Key** is relevant to the authorization and must be unique within the project. +* **Key:** The identifier used in code (e.g., `role.admin`). +* **Display Name:** A human-readable name for the UI. +* **Group:** Enables better handling in the ZITADEL console (e.g., giving a user all roles of a specific group). + +Read more about managing roles [here](./roles). + +## The Default Project +When creating a new ZITADEL instance, you will find an automatically created project in the first organization. +This **Default Project** (named "ZITADEL") protects the ZITADEL Management Console and APIs. + +:::caution +We do not recommend changing any settings in the Default Project or using it for your own applications, as this could influence the behavior of ZITADEL itself. +::: + +![Default Project](/img/guides/solution-scenarios/console-default-project.png) + +## Create a Project + +To create a project: +1. Navigate to your Organization in the Console. +2. Go to **Projects** (or visit `https://${CUSTOM_DOMAIN}.zitadel.cloud/ui/console/projects`). +3. Click the **Create New Project** button. + +Empty Project + +4. Enter your project name and continue. + +## Granted Projects (B2B) + +A powerful feature of ZITADEL is the ability to **Grant** a project to other organizations. This is essential for B2B scenarios where you sell your software to business partners. + +* **The Concept:** You enable another organization to use your Project. +* **Delegation:** The granted organization can manage the authorizations of *their own users* for your project. They can assign the roles you defined to their employees without your intervention. +* **Isolation:** You can select specifically which roles are available to the granted organization. This allows you to restrict features (e.g., "Premium" roles) per customer. + +Using the POS example above: You could grant the `POS` project to a partner organization. That partner can then log in with their own domain, use their own branding, and manage their own cashier users, all while using your underlying application structure. + +Granted project + +### How to Grant a Project + +1. Navigate to the Project you want to share (e.g., `POS`). +2. In the **Grants** section, click **New**. + +Grants + +3. Enter the **Domain** of the partner organization you want to grant access to. + * *Tip: If you don't know the domain, navigate to the Organization detail page to find it.* +4. Search and select the organization. +5. Select the **Roles** you want to grant to this organization and click **Save**. + +## Project Settings + +You can customize the behavior of your project, particularly regarding how login screens look and how tokens are issued. + +### Branding +If you have different designs for your organizations (Private Labeling), you can define the login behavior on the project detail page. + +Project branding + +| Setting | Description | +| :--- | :--- | +| **Unspecified** | If nothing is specified, the system default settings will trigger. | +| **Enforce project's policy** | This forces the branding of the organization that *owns* the project throughout the entire login process. Useful if you want your users to always see *your* brand, even if they belong to a partner org. | +| **Allow login user policy** | The login starts with the project's branding. However, as soon as the user is identified (e.g., by entering their email), the branding switches to match the user's organization. | + +In a B2B use case, you would typically use **Allow login user policy**. If you want to skip the detection step, you can preselect an organization using the [primary domain scope](/apis/openidoauth/scopes#reserved-scopes) (e.g., `urn:zitadel:iam:org:domain:primary:{domainname}`). + +### Role Settings +You can configure strict security checks regarding roles during authentication. + +Role settings + +* **Assert Roles on Authentication:** Role information is sent from the Userinfo endpoint (and in tokens, depending on app settings). +* **Check authorization on Authentication:** Users are **only** allowed to login if they have at least one role assigned for this project. If they have no roles, access is denied immediately. +* **Check for Project on Authentication:** Checks if the user's organization actually has a grant for this project. If not, the user cannot be authenticated. + +### Roles in Tokens +If you want roles to appear directly inside your Access or ID Tokens (to avoid calling the Userinfo endpoint), you must enable this per application. + +1. Navigate to your **Application**. +2. Open **Token Settings**. +3. Check **Assert Roles on Authentication**. + +Roles in token + +You can learn more about Application and Token settings [here](./applications-overview). \ No newline at end of file diff --git a/docs/docs/guides/manage/console/users-overview.mdx b/docs/docs/guides/manage/console/users-overview.mdx new file mode 100644 index 000000000..7150c951c --- /dev/null +++ b/docs/docs/guides/manage/console/users-overview.mdx @@ -0,0 +1,107 @@ +--- +title: Users +sidebar_label: Users +sidebar_position: 3 +--- + +import CreateUser from './_create-user.mdx'; + +## Overview + +ZITADEL supports authentication and authorization for different user types. We mainly differentiate between **Human Users** (interactive) and **Service Users** (machine-to-machine). + +User types + +## Types of Users + +### Human Users +Human users represent actual people who log in via an interactive interface (e.g., a login page). +* **Profile:** Has an email address, password, and optional profile data (phone, nickname, gender, language). +* **Authentication:** Can authenticate via password, multiple factors (MFA), or passwordless authentication (Passkeys). +* **Flow:** The application redirects the user to ZITADEL, which handles the credentials and issues a token to the application. + +Read more on how to [login users with ZITADEL](/docs/guides/integrate/login/login-users). + +### Service Users (Machine Accounts) +Service users represent machines, backend services, or IoT devices requiring non-interactive access. +* **Profile:** Only has a name, description, and username. +* **Authentication:** Authenticates via **JWT Profile** or **Personal Access Tokens (PAT)**. Both methods support expiration settings. +* **Usage:** Primarily used to gain access to the ZITADEL Management API or to secure backend-to-backend communication. + +To see how service users are utilized in practice, check out our [NextJS B2B Demo application](https://github.com/zitadel/zitadel-nextjs-b2b). + +### Federated Users +Federated users are identities managed by a third-party Identity Provider (IdP) such as Google, Azure AD, or GitHub. +* **Identity Brokering:** Users log in via the external IdP ("Single Sign-On"). +* **Account Linking:** Federated identities are [linked](../../../concepts/features/account-linking) to internal ZITADEL users to facilitate role assignment and audit trails. + +### External Users +In a multi-tenancy architecture, users are typically isolated within [Organizations](./organizations-overview). +However, using [External User Grants](../../../concepts/features/external-user-grant), an organization can invite users from *another* organization to access their projects. These invited users are referred to as **External Users** within the context of the inviting organization. + +### Managers +Any user—whether Human or Service User—can be assigned a [Manager Role](/concepts/structure/managers). +A user with a manager role is not just an end-user of your application but also has permissions to manage specific aspects of the ZITADEL instance, organization, or project (e.g., `ORG_OWNER`, `PROJECT_OWNER`). + +## Considerations + +### Uniqueness of Users +* **Scope:** Users exist strictly within **one** [Organization](./organizations-overview). It is currently not possible to move users between organizations. +* **Identifier:** User accounts are uniquely identified by their `id` or their `loginname` combined with the `organization domain` (e.g., `road.runner@acme.zitadel.local`). +* **Emails:** You can reuse the same email address for different user accounts across organizations. + +### Structuring User Pools +How you organize users depends on your scenario: + +* **B2B / Multi-Tenancy:** We recommend creating separate organizations for each business customer (e.g., based on their domain). Grant your projects to these organizations so they can manage their own users. +* **B2C / CIAM:** You might want to store all users in a single organization and enable a specific set of social logins for that organization. + +:::info +You can only verify a domain (e.g., `acme.com`) on **one** organization. If multiple teams share the same email domain but need separate management, they might need to be consolidated into a single organization. +::: + +### Hierarchy +ZITADEL does not enforce a native hierarchy or inheritance for users or organizations. We recommend structuring users along the smallest unit of groups (Organizations). You can use organization metadata or your own business logic to map complex hierarchies if needed. + +## Managing Users + +### Create User + + + +### Metadata +ZITADEL provides a key-value storage system for users, which is essential for building complex applications. + +**Example Use Case:** +In a Point of Sales application, you could add a `stripeCustomerId` as a metadata key to a user. Your client application can then read this metadata to fetch payment details directly from the Stripe API. + +User Metadata + +**Accessing Metadata:** +Metadata can be requested via the Auth and Management APIs, the Userinfo endpoint, or asserted directly into the ID Token. + +1. **Userinfo Endpoint:** Add the scope `urn:zitadel:iam:user:metadata` to your authentication request. +2. **ID Token:** To include metadata in the token, navigate to your **Application Settings** and toggle **User Info inside ID Token**. + +ID Token settings + +### Authorizations +User authorizations (roles) are displayed on user profile pages. + +To access these roles in your application: +* **Userinfo Endpoint:** Check the **Assert roles on authentication** box in your [Project Settings](./roles#authorizations). +* **ID Token:** Toggle **User roles inside ID Token** in your [Application Settings](./applications-overview). + +## References + +- [Manage users in the Console](./users-overview#managing-users) +- [Migrate to ZITADEL](/docs/guides/migrate/introduction) +- [User onboarding and registration](/docs/guides/integrate/onboarding) \ No newline at end of file diff --git a/docs/docs/guides/manage/customize/behavior.md b/docs/docs/guides/manage/customize/behavior.md index 346d18646..50484d168 100644 --- a/docs/docs/guides/manage/customize/behavior.md +++ b/docs/docs/guides/manage/customize/behavior.md @@ -50,4 +50,4 @@ New users automatically are assigned a role now if they register by authenticati ## What's next? - [Read more about the concepts around actions](/concepts/features/actions) -- [Read more about all the options you have with actions](/apis/actions/introduction) +- [Read more about all the options you have with actions](/guides/manage/console/actions-overview) diff --git a/docs/docs/guides/migrate/introduction.md b/docs/docs/guides/migrate/introduction.md index 6d18fa65a..34aaa7f85 100644 --- a/docs/docs/guides/migrate/introduction.md +++ b/docs/docs/guides/migrate/introduction.md @@ -12,7 +12,7 @@ You can read more about the basic structure and important concepts of ZITADEL in ## Multi-tenancy architecture -Multi-tenancy in ZITADEL can be achieved through either [Instances](/docs/concepts/structure/instance) or [Organizations](/docs/concepts/structure/organizations). +Multi-tenancy in ZITADEL can be achieved through either [Instances](/docs/concepts/structure/instance) or [Organizations](/docs/guides/manage/console/organizations-overview). Where instances represent isolated ZITADEL instances, Organizations provide a more permeable approach to multi-tenancy. In most cases, when you want to achieve multi-tenancy, you use Organizations. Each organization can have their own set of Settings (eg, Security Policies, IDPs, Branding), Managers, and Users. @@ -23,14 +23,14 @@ Please also consult our guide on [Solution Scenarios](/docs/guides/solution-scen Some solutions, that offer multi-tenancy, require you to copy applications and settings to each tenant and manage changes individually. ZITADEL works differently by using [Granted Projects](/docs/concepts/structure/granted_projects). -Projects can be granted to [Organization](/docs/concepts/structure/projects#granted-organizations) or even to individual users. +Projects can be granted to [Organization](/docs/guides/manage/console/organizations-overview#organization-grants) or even to individual users. You can think of it as a logical link to a Project, which can be used by the receiving Organization or User as if it was their own project, except privileges to modify the Project itself. Delegated access management is a great way of keeping the management overhead low and enabling [self-service](/docs/concepts/features/selfservice#managers-in-delegation) for Organizations to manage their own Settings and Authorizations. ## Actions -ZITADEL [Actions](/docs/apis/actions/introduction) is the key feature to customize and create workflows and change the default behavior of the platform. +ZITADEL [Actions](/docs/guides/manage/console/actions-overview) is the key feature to customize and create workflows and change the default behavior of the platform. You define custom code that should be run on a specific Trigger. A trigger could be the creation of a new user, getting profile information about a user, or a login attempt. @@ -69,7 +69,7 @@ See the [User guide](./users.md) for batch migration of users. In case all your applications depend on ZITADEL after the migration date, and ZITADEL is able to retrieve the required user information, including secrets, from the legacy system, then the recommended way is to let **ZITADEL orchestrate the user migration just-in-time**: -- Create a pre-authentication [Action](/docs/apis/actions/introduction) to request user data from the legacy system and create a new user in ZITADEL. +- Create a pre-authentication [Action](/docs/guides/manage/console/actions-overview) to request user data from the legacy system and create a new user in ZITADEL. - Optionally, create a post-authentication Action to flag successfully migrated users in your legacy system For all other cases, we recommend that the **legacy system orchestrates the migration** of users to ZITADEL for more flexibility: diff --git a/docs/docs/guides/migrate/sources/auth0.md b/docs/docs/guides/migrate/sources/auth0.md index 6f440bba5..09697f9cd 100644 --- a/docs/docs/guides/migrate/sources/auth0.md +++ b/docs/docs/guides/migrate/sources/auth0.md @@ -24,7 +24,7 @@ The migration tool is written in Go. Download and install the latest version of You'll need a target organization in ZITADEL to import your users. You can create a new organization or use an existing one. If you don't have a ZITADEL instance, you can [sign up for free here](https://zitadel.com) to create a new one for you. -See: [Managing Organizations in ZITADEL](https://zitadel.com/docs/guides/manage/console/organizations). +See: [Managing Organizations in ZITADEL](https://zitadel.com/docs/guides/manage/console/organizations-overview). > **Note:** Copy your Organization ID (Resource ID) since you will use the id in the later steps. diff --git a/docs/docs/guides/migrate/sources/keycloak.md b/docs/docs/guides/migrate/sources/keycloak.md index abcb13073..8b574fe55 100644 --- a/docs/docs/guides/migrate/sources/keycloak.md +++ b/docs/docs/guides/migrate/sources/keycloak.md @@ -28,7 +28,7 @@ The migration tool is written in Go. Download and install the latest version of You'll need a target organization in ZITADEL to import your users. You can create a new organization or use an existing one. If you don't have a ZITADEL instance, you can [sign up for free here](https://zitadel.com) to create a new one for you. -See: [Managing Organizations in ZITADEL](https://zitadel.com/docs/guides/manage/console/organizations). +See: [Managing Organizations in ZITADEL](https://zitadel.com/docs/guides/manage/console/organizations-overview). > **Note:** Copy your Organization ID (Resource ID) since you will use the id in the later steps. diff --git a/docs/docs/guides/solution-scenarios/b2b.mdx b/docs/docs/guides/solution-scenarios/b2b.mdx index dc8d03f54..b6a8f6c3f 100644 --- a/docs/docs/guides/solution-scenarios/b2b.mdx +++ b/docs/docs/guides/solution-scenarios/b2b.mdx @@ -9,7 +9,7 @@ import { B2B } from "../../../src/components/b2b"; B2B describes the situation where an organization interacts with other organizations. This **multi-tenancy architecture** usually adds some form of complexity to an Identity and Access Management System. -In ZITADEL an [organization](/docs/concepts/structure/organizations) can represent a business partner or partner who typically has its own branding and has different access settings like an additional federated login for its users. +In ZITADEL an [organization](/docs/guides/manage/console/organizations-overview) can represent a business partner or partner who typically has its own branding and has different access settings like an additional federated login for its users. B2B can be a simple scenario where an organization only shares one of its projects with another organization or have a more complex case where an organization is offering a portal application to all its partners with included (self)administration. @@ -42,7 +42,7 @@ In order to define the need of the **Portal Application** some planning consider ### Login You can decide whether a organization is preselected for the login or if the user is redirected to the default login screen. Using OpenID Connect, you can send the user to a specific organization by defining the organization in a [reserved scope](/docs/apis/openidoauth/scopes#reserved-scopes) (primary domain). -Settings to the branding or the login options of the organization can be made from the organization section in [Console](/docs/concepts/features/console). +Settings to the branding or the login options of the organization can be made from the organization section in [Console](/docs/guides/manage/console/console-overview). The behavior of the login branding can be set in your projects detail page. You can choose the branding of the selected organization, the user's organization, or the project's organization. ### Organizations diff --git a/docs/docs/guides/solution-scenarios/restrict-console.mdx b/docs/docs/guides/solution-scenarios/restrict-console.mdx index 622a05225..40372d5d2 100644 --- a/docs/docs/guides/solution-scenarios/restrict-console.mdx +++ b/docs/docs/guides/solution-scenarios/restrict-console.mdx @@ -27,13 +27,13 @@ Read more about how to set the default redirect URI: [Settings - Default Redirec ### Restricting Console in default-project -With this workaround, you will limit users from accessing the [default-project](/docs/concepts/structure/projects#default-project), if they are not explicitly granted to use this project. +With this workaround, you will limit users from accessing the [default-project](/docs/guides/manage/console/projects-overview#the-default-project), if they are not explicitly granted to use this project. When setting the "Check for Project on Authentication" setting on a project, only users of organizations with a grant to that project can access it. By default, this setting is disabled, so all users can access the project. ![Project Settings: Check for Project on authentication](/img/guides/solution-scenarios/console-check-project-auth.png) -Start by granting the organization of your managers, that should be able to access the Console, the [default project](/docs/concepts/structure/projects#default-project): +Start by granting the organization of your managers, that should be able to access the Console, the [default project](/docs/guides/manage/console/projects-overview#the-default-project): 1. Click on the default-project > Grants > New + ![Project Settings: Default Project - Grants](/img/guides/solution-scenarios/console-zitadel-project-grants.png) @@ -44,7 +44,7 @@ Start by granting the organization of your managers, that should be able to acce 3. You can skip the screen with the role selection, and click save 4. Make sure the grant is in now in the overview and marked as active. -To avoid accidental lock-out, the [default project](/docs/concepts/structure/projects#default-project) hides the checkbox "Check Project on Authentication" in the Console: +To avoid accidental lock-out, the [default project](/docs/guides/manage/console/projects-overview#the-default-project) hides the checkbox "Check Project on Authentication" in the Console: ![Default Project](/img/guides/solution-scenarios/console-default-project.png) You need to use the [update project API call](/docs/apis/resources/mgmt/management-service-update-project) to set the configuration on the project. diff --git a/docs/docs/sdk-examples/astro.mdx b/docs/docs/sdk-examples/astro.mdx index 8b31c15d8..e4f2927ab 100644 --- a/docs/docs/sdk-examples/astro.mdx +++ b/docs/docs/sdk-examples/astro.mdx @@ -33,22 +33,22 @@ The application includes complete [logout functionality](https://zitadel.com/doc ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:4321/api/auth/callback` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:4321/api/auth/logout/callback`) 5. Copy your **Client ID** from the application details -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production deployments, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production deployments, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your [Zitadel application configured](https://zitadel.com/docs/guides/integrate/login/oidc/): 1. Clone the [repository](https://github.com/zitadel/example-auth-astro). -2. Create a `.env` file based on `.env.example` and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). Use these environment variable names exactly as shown: +2. Create a `.env` file based on `.env.example` and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). Use these environment variable names exactly as shown: ``` PORT=4321 SESSION_DURATION=3600 diff --git a/docs/docs/sdk-examples/expressjs.mdx b/docs/docs/sdk-examples/expressjs.mdx index 16dd38294..b825b3269 100644 --- a/docs/docs/sdk-examples/expressjs.mdx +++ b/docs/docs/sdk-examples/expressjs.mdx @@ -33,22 +33,22 @@ Sign-out functionality implements **[federated logout](https://zitadel.com/docs/ ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/overview) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/console-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/auth/callback` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000/auth/logout/callback`) 5. Copy your **Client ID** for use in the next steps -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your [Zitadel application configured](https://zitadel.com/docs/guides/integrate/login/oidc/): 1. Clone the [repository](https://github.com/zitadel/example-auth-express). -2. Create a `.env.local` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). Use the exact environment variable names from the repository: +2. Create a `.env.local` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). Use the exact environment variable names from the repository: ``` NODE_ENV=development PORT=3000 diff --git a/docs/docs/sdk-examples/fastify.mdx b/docs/docs/sdk-examples/fastify.mdx index 316fc43a3..5b6e868d2 100644 --- a/docs/docs/sdk-examples/fastify.mdx +++ b/docs/docs/sdk-examples/fastify.mdx @@ -33,23 +33,23 @@ The application also demonstrates proper **[federated logout](https://zitadel.co ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [ZITADEL Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [ZITADEL Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [ZITADEL project](https://zitadel.com/docs/guides/manage/console/projects) +1. Create a new Web application in your [ZITADEL project](https://zitadel.com/docs/guides/manage/console/projects-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/auth/callback` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000`) 5. Copy your **Client ID** for use in the next steps 6. Optionally enable [refresh tokens](https://zitadel.com/docs/concepts/tokens) in Token Settings for long-lived sessions -> **Note:** Make sure to enable **Dev Mode** in the [ZITADEL Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [ZITADEL Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your [ZITADEL application](https://zitadel.com/docs/guides/integrate/login/oidc/) configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-fastify). -2. Create a `.env` file (copy from `.env.example`) and configure it with the values from your [ZITADEL application](https://zitadel.com/docs/guides/manage/console/overview). **Use these exact environment variable names:** +2. Create a `.env` file (copy from `.env.example`) and configure it with the values from your [ZITADEL application](https://zitadel.com/docs/guides/manage/console/console-overview). **Use these exact environment variable names:** ``` NODE_ENV=development PORT=3000 @@ -63,7 +63,7 @@ Once you have your [ZITADEL application](https://zitadel.com/docs/guides/integra ZITADEL_POST_LOGOUT_URL=http://localhost:3000 ``` Replace these values with: - - Your actual [ZITADEL instance URL](https://zitadel.com/docs/guides/manage/console/overview) for `ZITADEL_DOMAIN` (the issuer) + - Your actual [ZITADEL instance URL](https://zitadel.com/docs/guides/manage/console/console-overview) for `ZITADEL_DOMAIN` (the issuer) - The **Client ID** you copied when creating the application for `ZITADEL_CLIENT_ID` - The **redirect URI** you configured in the PKCE setup for `ZITADEL_CALLBACK_URL` (must match exactly) - The **post-logout redirect URI** for `ZITADEL_POST_LOGOUT_URL` diff --git a/docs/docs/sdk-examples/hono.mdx b/docs/docs/sdk-examples/hono.mdx index 740788cef..2db6aefa3 100644 --- a/docs/docs/sdk-examples/hono.mdx +++ b/docs/docs/sdk-examples/hono.mdx @@ -31,22 +31,22 @@ The implementation uses [Handlebars templates](https://handlebarsjs.com/) for se ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/auth/callback` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000/auth/logout/callback`) 5. Copy your **Client ID** for use in the next steps -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your Zitadel application configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-hono). -2. Create a `.env` file (copy from `.env.example`) and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). **Use the exact environment variable names from the repository:** +2. Create a `.env` file (copy from `.env.example`) and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). **Use the exact environment variable names from the repository:** ``` NODE_ENV=development PORT=3000 diff --git a/docs/docs/sdk-examples/nestjs.mdx b/docs/docs/sdk-examples/nestjs.mdx index 06c04560e..55c26188d 100644 --- a/docs/docs/sdk-examples/nestjs.mdx +++ b/docs/docs/sdk-examples/nestjs.mdx @@ -35,7 +35,7 @@ All protected routes are secured using the [@mridang/nestjs-auth global guard](h ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: 1. Create a new Web application in your Zitadel project 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) @@ -50,7 +50,7 @@ Before running this example, you need to create and configure a PKCE application Once you have your Zitadel application configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-nestjs). -2. Create a `.env` file in the project root and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). **Use the exact environment variable names from the repository:** +2. Create a `.env` file in the project root and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). **Use the exact environment variable names from the repository:** ``` NODE_ENV=development PORT=3000 diff --git a/docs/docs/sdk-examples/nuxtjs.mdx b/docs/docs/sdk-examples/nuxtjs.mdx index dd63c1c4f..4c739bf68 100644 --- a/docs/docs/sdk-examples/nuxtjs.mdx +++ b/docs/docs/sdk-examples/nuxtjs.mdx @@ -31,9 +31,9 @@ The example implements secure [session management](https://zitadel.com/docs/conc ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/api/auth/callback/zitadel` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000/`) @@ -46,7 +46,7 @@ Before running this example, you need to create and configure a PKCE application Once you have your Zitadel application configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-nuxtjs). -2. Create a `.env` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). **Use these exact environment variable names:** +2. Create a `.env` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). **Use these exact environment variable names:** ``` PORT=3000 SESSION_DURATION=3600 @@ -59,7 +59,7 @@ Once you have your Zitadel application configured: AUTH_ORIGIN=http://localhost:3000 ``` Replace these values with: - - Your actual Zitadel instance URL (the **Issuer** from your [ZITADEL instance settings](https://zitadel.com/docs/guides/manage/console/overview)) + - Your actual Zitadel instance URL (the **Issuer** from your [ZITADEL instance settings](https://zitadel.com/docs/guides/manage/console/console-overview)) - The **Client ID** you copied when creating the application - A randomly generated **NUXT_AUTH_SECRET** for session encryption (generate using: `node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"`) - The **callback URI** you configured in the PKCE setup (must match exactly) diff --git a/docs/docs/sdk-examples/qwik.mdx b/docs/docs/sdk-examples/qwik.mdx index 26c6c2ae6..b783028b7 100644 --- a/docs/docs/sdk-examples/qwik.mdx +++ b/docs/docs/sdk-examples/qwik.mdx @@ -23,7 +23,7 @@ This example uses **[@auth/qwik](https://www.npmjs.com/package/@auth/qwik)**, a This [Qwik](https://qwik.dev) application showcases a complete authentication implementation using [ZITADEL](https://zitadel.com/docs) with the [Authorization Code Flow with PKCE](/docs/concepts/pkce). The example includes secure sign-in functionality that redirects users to ZITADEL's hosted login page, handles the OAuth callback to exchange authorization codes for [access tokens](https://zitadel.com/docs/concepts/tokens), and manages [sessions](https://zitadel.com/docs/concepts/sessions) with [JWT tokens](https://zitadel.com/docs/apis/openidoauth/endpoints#json-web-token-jwt-profile) stored in encrypted server-side cookies. -Route protection is implemented using [Qwik City's](https://qwik.dev/docs/qwikcity) `onRequest` handler, which performs server-side authentication checks before rendering protected pages. Unauthenticated users attempting to access secured routes are automatically redirected to the login page with a callback URL to return them to their intended destination after successful authentication. The application displays comprehensive user profile information including standard [OIDC claims](https://zitadel.com/docs/apis/openidoauth/claims) like name and email, as well as ZITADEL-specific claims such as [organization membership](https://zitadel.com/docs/guides/manage/console/organizations) and [project roles](https://zitadel.com/docs/guides/manage/console/projects). +Route protection is implemented using [Qwik City's](https://qwik.dev/docs/qwikcity) `onRequest` handler, which performs server-side authentication checks before rendering protected pages. Unauthenticated users attempting to access secured routes are automatically redirected to the login page with a callback URL to return them to their intended destination after successful authentication. The application displays comprehensive user profile information including standard [OIDC claims](https://zitadel.com/docs/apis/openidoauth/claims) like name and email, as well as ZITADEL-specific claims such as [organization membership](https://zitadel.com/docs/guides/manage/console/organizations-overview) and [project roles](https://zitadel.com/docs/guides/manage/console/projects-overview). Sign-out functionality implements **[federated logout](https://zitadel.com/docs/guides/integrate/login/oidc/logout)** through ZITADEL's end-session endpoint, ensuring that users are logged out from both the application and ZITADEL's [single sign-on session](https://zitadel.com/docs/concepts/sessions). The logout process includes [CSRF protection](https://zitadel.com/docs/guides/integrate/login/oidc/logout#csrf-protection) using state parameters validated through secure cookies, followed by proper cleanup of session data and redirection back to the application. @@ -33,22 +33,22 @@ Sign-out functionality implements **[federated logout](https://zitadel.com/docs/ ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/auth/callback/zitadel` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000/api/auth/logout/callback`) 5. Copy your **Client ID** for use in the next steps -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your [Zitadel application](https://zitadel.com/docs/guides/integrate/login/oidc/) configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-qwik). -2. Create a `.env.local` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview): +2. Create a `.env.local` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview): ``` VITE_PORT=3000 VITE_SESSION_SECRET=your-very-secret-and-strong-session-key diff --git a/docs/docs/sdk-examples/react.mdx b/docs/docs/sdk-examples/react.mdx index 9ae4b0bfd..2e474a3cc 100644 --- a/docs/docs/sdk-examples/react.mdx +++ b/docs/docs/sdk-examples/react.mdx @@ -33,7 +33,7 @@ The example leverages [React Router](https://reactrouter.com) for client-side na ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: 1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/integrate/login/oidc/) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) @@ -41,14 +41,14 @@ Before running this example, you need to create and configure a PKCE application 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000/`) 5. Copy your **Client ID** for use in the next steps -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your Zitadel application configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-react). -2. Create a `.env` file (copy from `.env.example`) and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). **Use these exact environment variable names:** +2. Create a `.env` file (copy from `.env.example`) and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). **Use these exact environment variable names:** ``` VITE_ZITADEL_DOMAIN=https://your-instance.zitadel.cloud VITE_ZITADEL_CLIENT_ID=your_client_id_from_console diff --git a/docs/docs/sdk-examples/solidstart.mdx b/docs/docs/sdk-examples/solidstart.mdx index a17b50f9e..cd7c152f0 100644 --- a/docs/docs/sdk-examples/solidstart.mdx +++ b/docs/docs/sdk-examples/solidstart.mdx @@ -11,17 +11,17 @@ status: stable ## Overview -[SolidStart](https://start.solidjs.com) is a full-stack web framework built on top of [SolidJS](https://solidjs.com) that enables you to create performant web applications with a modern development experience. This example demonstrates how to integrate **[Zitadel](https://zitadel.com/docs)** using the **[OAuth 2.0 PKCE flow](/docs/concepts/pkce)** to authenticate users securely and maintain [sessions](https://zitadel.com/docs/concepts/structure/users#sessions) across the app. +[SolidStart](https://start.solidjs.com) is a full-stack web framework built on top of [SolidJS](https://solidjs.com) that enables you to create performant web applications with a modern development experience. This example demonstrates how to integrate **[Zitadel](https://zitadel.com/docs)** using the **[OAuth 2.0 PKCE flow](/docs/concepts/pkce)** to authenticate users securely and maintain [sessions](https://zitadel.com/docs/guides/manage/console/default-settings#login-lifetimes) across the app. #### Auth library -This example uses **[@auth/solid-start](https://www.npmjs.com/package/@auth/solid-start)**, the SolidStart adapter for [Auth.js](https://authjs.dev), which builds on **[@auth/core](https://www.npmjs.com/package/@auth/core)**. Auth.js implements the [OpenID Connect (OIDC)](https://zitadel.com/docs/apis/openidoauth/endpoints) flow, manages [PKCE](/docs/concepts/pkce), performs [token exchange](https://zitadel.com/docs/apis/openidoauth/grant-types), and exposes helpers for [session state](https://zitadel.com/docs/concepts/structure/users#sessions). The example also uses **[openid-client](https://www.npmjs.com/package/openid-client)** ([GitHub](https://github.com/panva/node-openid-client)) for manual token refresh operations and logout URL construction. +This example uses **[@auth/solid-start](https://www.npmjs.com/package/@auth/solid-start)**, the SolidStart adapter for [Auth.js](https://authjs.dev), which builds on **[@auth/core](https://www.npmjs.com/package/@auth/core)**. Auth.js implements the [OpenID Connect (OIDC)](https://zitadel.com/docs/apis/openidoauth/endpoints) flow, manages [PKCE](/docs/concepts/pkce), performs [token exchange](https://zitadel.com/docs/apis/openidoauth/grant-types), and exposes helpers for [session state](https://zitadel.com/docs/guides/manage/console/default-settings#login-lifetimes). The example also uses **[openid-client](https://www.npmjs.com/package/openid-client)** ([GitHub](https://github.com/panva/node-openid-client)) for manual token refresh operations and logout URL construction. --- ## What this example demonstrates -This example shows a complete authentication implementation using [SolidStart](https://start.solidjs.com) with [Zitadel](https://zitadel.com/docs). Users start on a public landing page and click a login button to authenticate with Zitadel using the secure **[PKCE flow](/docs/concepts/pkce)**. The [Auth.js](https://authjs.dev) library handles the [OAuth 2.0](https://zitadel.com/docs/guides/integrate/login/oidc/oauth-recommended-flows) authorization code exchange and manages secure [session storage](https://zitadel.com/docs/concepts/structure/users#sessions) using encrypted [JWT tokens](https://zitadel.com/docs/concepts/tokens). After successful authentication, users are redirected to a protected profile page displaying their user information including [OIDC claims](https://zitadel.com/docs/apis/openidoauth/claims) like name, email, and custom [Zitadel metadata](https://zitadel.com/docs/apis/openidoauth/claims#reserved-claims). +This example shows a complete authentication implementation using [SolidStart](https://start.solidjs.com) with [Zitadel](https://zitadel.com/docs). Users start on a public landing page and click a login button to authenticate with Zitadel using the secure **[PKCE flow](/docs/concepts/pkce)**. The [Auth.js](https://authjs.dev) library handles the [OAuth 2.0](https://zitadel.com/docs/guides/integrate/login/oidc/oauth-recommended-flows) authorization code exchange and manages secure [session storage](https://zitadel.com/docs/guides/manage/console/default-settings#login-lifetimes) using encrypted [JWT tokens](https://zitadel.com/docs/concepts/tokens). After successful authentication, users are redirected to a protected profile page displaying their user information including [OIDC claims](https://zitadel.com/docs/apis/openidoauth/claims) like name, email, and custom [Zitadel metadata](https://zitadel.com/docs/apis/openidoauth/claims#reserved-claims). The application implements automatic [token refresh](https://zitadel.com/docs/apis/openidoauth/grant-types#refresh-token) to maintain long-lived sessions without requiring users to re-authenticate. When an [access token](https://zitadel.com/docs/concepts/tokens) expires, the refresh logic seamlessly exchanges the [refresh token](https://zitadel.com/docs/apis/openidoauth/grant-types#refresh-token) for new tokens in the background. [Route protection](https://start.solidjs.com/api/createAsync) is implemented using [SolidStart's server functions](https://start.solidjs.com/api/server$), ensuring only authenticated users can access sensitive areas. The logout flow implements [federated logout](https://zitadel.com/docs/guides/integrate/login/oidc/logout) with CSRF protection using state parameters, properly terminating both the local session and the Zitadel session before redirecting users back to the application. @@ -31,22 +31,22 @@ The application implements automatic [token refresh](https://zitadel.com/docs/ap ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/auth/callback` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000/api/auth/logout/callback`) 5. Copy your **Client ID** for use in the next steps -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your [Zitadel application](https://zitadel.com/docs/guides/integrate/login/oidc/) configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-solidstart). -2. Create a `.env` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). Use the exact environment variable names from the repository: +2. Create a `.env` file and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). Use the exact environment variable names from the repository: ``` NODE_ENV=development PORT=3000 diff --git a/docs/docs/sdk-examples/sveltekit.mdx b/docs/docs/sdk-examples/sveltekit.mdx index 1f21bdbbc..cc9d33144 100644 --- a/docs/docs/sdk-examples/sveltekit.mdx +++ b/docs/docs/sdk-examples/sveltekit.mdx @@ -33,22 +33,22 @@ The logout flow implements **[federated logout](https://zitadel.com/docs/guides/ ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/projects-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/auth/callback` for development) 4. Configure post-logout redirect URIs (e.g., `http://localhost:3000/auth/logout/callback`) 5. Copy your **Client ID** for use in the next steps -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your Zitadel application configured: 1. Clone the [repository](https://github.com/zitadel/example-auth-sveltekit). -2. Create a `.env.local` file in the project root and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview). **Use these exact environment variable names:** +2. Create a `.env.local` file in the project root and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview). **Use these exact environment variable names:** ``` SESSION_SECRET=your-very-secret-and-strong-session-key SESSION_DURATION=3600 diff --git a/docs/docs/sdk-examples/vue.mdx b/docs/docs/sdk-examples/vue.mdx index f7aa876ce..9061bbd45 100644 --- a/docs/docs/sdk-examples/vue.mdx +++ b/docs/docs/sdk-examples/vue.mdx @@ -33,22 +33,22 @@ The example includes secure sign-out functionality implementing **[federated log ### Prerequisites -Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: +Before running this example, you need to create and configure a PKCE application in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview). Follow the **[PKCE Application Setup guide](/docs/guides/integrate/login/oidc/pkce-setup)** to: -1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/overview) +1. Create a new Web application in your [Zitadel project](https://zitadel.com/docs/guides/manage/console/console-overview) 2. Configure it to use the [PKCE authentication method](/docs/concepts/pkce) 3. Set up your redirect URIs (e.g., `http://localhost:3000/auth/callback` for development) 4. Configure post-logout redirect URIs 5. Copy your **Client ID** for use in the next steps -> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. +> **Note:** Make sure to enable **Dev Mode** in the [Zitadel Console](https://zitadel.com/docs/guides/manage/console/console-overview) if you're using HTTP URLs during local development. For production, always use HTTPS URLs and disable Dev Mode. ### Run the example Once you have your [Zitadel application configured](https://zitadel.com/docs/guides/integrate/login/oidc/), follow these steps: 1. Clone the [repository](https://github.com/zitadel/example-auth-vuejs). -2. Create a `.env` file in the project root and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/overview): +2. Create a `.env` file in the project root and configure it with the values from your [Zitadel application](https://zitadel.com/docs/guides/manage/console/console-overview): ``` VITE_ZITADEL_DOMAIN=https://your-instance.zitadel.cloud VITE_ZITADEL_CLIENT_ID=your_client_id_from_console diff --git a/docs/docs/self-hosting/manage/cache.md b/docs/docs/self-hosting/manage/cache.md index 0d8293911..6feb8be77 100644 --- a/docs/docs/self-hosting/manage/cache.md +++ b/docs/docs/self-hosting/manage/cache.md @@ -171,7 +171,7 @@ These settings typically change infrequently in production. ***Every*** request ### Milestones -Milestones are used to track the administrator's progress in setting up their instance. Milestones are used to render *your next steps* in the [console](/docs/guides/manage/console/overview) landing page. +Milestones are used to track the administrator's progress in setting up their instance. Milestones are used to render *your next steps* in the [console](/docs/guides/manage/console/console-overview) landing page. Milestones are reached upon the first time a certain action is performed. For example the first application created or the first human login. In order to push a "reached" event only once, ZITADEL must keep track of the current state of milestones by an eventstore query every time an eligible action is performed. This can cause an unwanted overhead on production servers, therefore they are cached. As an extra optimization, once all milestones are reached by the instance, an in-memory flag is set and the milestone state is never queried again from the database nor cache. @@ -179,7 +179,7 @@ For single instance setups which fulfilled all milestone (*your next steps* in c ### Organization -Most resources like users, project and applications are part of an [organization](/docs/concepts/structure/organizations). Therefore many parts of the ZITADEL logic search for an organization by ID or by their primary domain. +Most resources like users, project and applications are part of an [organization](/docs/guides/manage/console/organizations-overview). Therefore many parts of the ZITADEL logic search for an organization by ID or by their primary domain. Organization objects are quite small and receive infrequent updates after they are created: - Change of organization name diff --git a/docs/docs/self-hosting/manage/production.md b/docs/docs/self-hosting/manage/production.md index 182df8927..a41b338c7 100644 --- a/docs/docs/self-hosting/manage/production.md +++ b/docs/docs/self-hosting/manage/production.md @@ -227,7 +227,7 @@ DefaultInstance: ``` - If you don't want to use the DefaultInstance configuration for the first instance that ZITADEL automatically creates for you during the [setup phase](/self-hosting/manage/configure#database-initialization), you can provide a FirstInstance YAML section using the --steps argument. -- Learn how to configure ZITADEL via the [Console user interface](/guides/manage/console/overview). +- Learn how to configure ZITADEL via the [Console user interface](/guides/manage/console/console-overview). - Probably, you also want to [apply your custom branding](/guides/manage/customize/branding), [hook into certain events](/guides/manage/customize/behavior), [customize texts](/guides/manage/customize/texts) or [add metadata to your users](/guides/manage/customize/user-metadata). - If you want to automatically create ZITADEL resources, you can use the [ZITADEL Terraform Provider](/guides/manage/terraform-provider). diff --git a/docs/sidebars.js b/docs/sidebars.js index 7eff47894..1b4dbdcf7 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -22,213 +22,35 @@ const sidebar_api_application_v2 = require("./docs/apis/resources/application_se module.exports = { guides: [ - "guides/overview", { type: "category", label: "Get Started", collapsed: false, - link: { type: "doc", id: "guides/start/quickstart" }, items: [ + "guides/overview", "guides/start/quickstart", { type: "category", - label: "Frontend", - items: [ - "examples/login/angular", - "examples/login/flutter", - "examples/login/go", - "examples/login/java-spring", - "examples/login/nextjs", - "examples/login/python-django", - "examples/login/react", - "examples/login/symfony", - "examples/login/vue", - { - type: "link", - label: ".Net", - href: "https://github.com/smartive/zitadel-net", - }, - ], - collapsed: true, - }, - { - type: "category", - label: "Backend", - items: [ - "examples/secure-api/go", - "examples/secure-api/java-spring", - "examples/secure-api/python-django", - "examples/secure-api/python-flask", - "examples/secure-api/nodejs-nestjs", - "examples/secure-api/pylon", - { - type: "link", - label: ".Net", - href: "https://github.com/smartive/zitadel-net", - }, - ], - collapsed: true, - }, - ], - }, - { - type: "category", - label: "Examples & SDKs", - items: [ - { - type: "autogenerated", - dirName: "sdk-examples", - }, - { - type: "link", - label: "Dart", - href: "https://github.com/smartive/zitadel-dart", - }, - { - type: "link", - label: "Elixir", - href: "https://github.com/maennchen/zitadel_api", - }, - { - type: "link", - label: "FastAPI", - href: "https://github.com/cleanenergyexchange/fastapi-zitadel-auth", - }, - { - type: "link", - label: "NextAuth", - href: "https://next-auth.js.org/providers/zitadel", - }, - { - type: "link", - label: "Node.js", - href: "https://www.npmjs.com/package/@zitadel/node", - }, - { - type: "link", - label: ".Net", - href: "https://github.com/smartive/zitadel-net", - }, - { - type: "link", - label: "Passport.js", - href: "https://github.com/buehler/node-passport-zitadel", - }, - { - type: "link", - label: "Rust", - href: "https://github.com/smartive/zitadel-rust", - }, - { - type: "link", - label: "Pylon", - href: "https://github.com/getcronit/pylon", - }, - { - type: "link", - label: "Vanilla-JS", - href: "https://github.com/zitadel/zitadel-vanilla-js", - }, - ], - }, - { - type: "category", - label: "Manage", - collapsed: true, - items: [ - { - type: "category", - label: "Cloud", + label: "Key Concepts", link: { type: "generated-index", - title: "Overview", - slug: "guides/manage/cloud/overview", + title: "Key Concepts", + slug: "concepts", description: - "Our customer portal is used to manage all your ZITADEL instances. You can also manage your subscriptions, billing, newsletters and support requests.", + "This part of our documentation contains ZITADEL specific or general concepts required to understand the system or our guides.", }, items: [ - "guides/manage/cloud/start", - "guides/manage/cloud/instances", - "guides/manage/cloud/settings", - "guides/manage/cloud/billing", - "guides/manage/cloud/users", - "guides/manage/cloud/support", + "concepts/structure/instance", + "guides/manage/console/organizations-overview", + "guides/manage/console/projects-overview", + "guides/manage/console/applications-overview", + "guides/manage/console/users-overview", + "concepts/structure/managers", ], }, { type: "category", - label: "Console", - link: { - type: "doc", - id: "guides/manage/console/overview", - }, - items: [ - "guides/manage/console/overview", - "guides/manage/console/default-settings", - "guides/manage/console/organizations", - "guides/manage/console/projects", - "guides/manage/console/roles", - "guides/manage/console/applications", - "guides/manage/console/users", - "guides/manage/console/managers", - "guides/manage/console/actions", - ], - }, - { - type: "category", - label: "Customize", - items: [ - { - type: "autogenerated", - dirName: "guides/manage/customize", - }, - ], - }, - { - type: "category", - label: "Users", - items: [ - "guides/manage/user/reg-create-user", - "guides/manage/customize/user-metadata", - "guides/manage/user/scim2", - ], - }, - "guides/manage/terraform-provider", - ], - }, - { - type: "category", - label: "Migrate", - collapsed: true, - items: [ - "guides/migrate/introduction", - "guides/migrate/users", - { - type: "category", - label: "Sources", - collapsed: true, - items: [ - "guides/migrate/sources/zitadel", - "guides/migrate/sources/auth0", - "guides/migrate/sources/keycloak", - ], - }, - ], - }, - { - type: "category", - label: "Integrate", - link: { - type: "generated-index", - title: "Integrate", - slug: "guides/integrate", - description: - "Integrate your users and application with ZITADEL. In this section you will find resource on how to authenticate your users, configure external identity providers, access the ZITADEL APIs to manage resources, and integrate with third party services and tools.", - }, - items: [ - { - type: "category", - label: "Login Users", + label: "Authenticate Users", link: { type: "generated-index", title: "Login users with ZITADEL", @@ -238,51 +60,93 @@ module.exports = { }, items: [ "guides/integrate/login/login-users", - { - type: "link", - href: "/docs/guides/integrate/login/login-users#zitadels-session-api", - label: "Session API", - }, + "guides/integrate/login/hosted-login", + "guides/integrate/login/oidc/logout", + ], + }, + { + type: "category", + label: "Example Applications", + items: [ { type: "category", - label: "Hosted Login", - link: { - type: "doc", - id: "guides/integrate/login/hosted-login", - }, + label: "Frontend (SPA)", items: [ { type: "link", - href: "/docs/guides/integrate/login/hosted-login#hosted-login-version-2", - label: "Login V2", + label: "Vanilla-JS", + href: "https://github.com/zitadel/zitadel-vanilla-js", }, + "examples/login/react", + "examples/login/angular", + "examples/login/vue", ], }, - { - type: "link", - href: "/docs/guides/integrate/login/login-users#build-a-custom-login-ui-to-authenticate-users", - label: "Custom Login UI", - }, { type: "category", - label: "OpenID Connect", - collapsed: true, - link: { - type: "generated-index", - title: "Authenticate users with OpenID Connect (OIDC)", - slug: "guides/integrate/login/oidc", - description: - "This guide explains how to utilize ZITADEL for user authentication within your applications using OpenID Connect (OIDC). Here, we offer comprehensive guidance on seamlessly integrating ZITADEL's authentication features, ensuring both security and user experience excellence. Throughout this documentation, we'll cover the setup process for ZITADEL authentication, including the recommended OIDC flows tailored to different application types. Additionally, we'll provide clear instructions on securely signing out or logging out users from your application, ensuring data security and user privacy. With our guidance, you'll be equipped to leverage ZITADEL's authentication capabilities effectively, enhancing your application's security posture while delivering a seamless login experience for your users.", - }, + label: "Mobile & Native", items: [ - "guides/integrate/login/oidc/login-users", - "guides/integrate/login/oidc/oauth-recommended-flows", - "guides/integrate/login/oidc/device-authorization", - "guides/integrate/login/oidc/logout", - "guides/integrate/login/oidc/webkeys", + "examples/login/flutter", + ], + }, + { + type: "category", + label: "Full-Stack / SSR", + items: [ + "examples/login/nextjs", + "examples/login/nextjs-b2b", + ], + }, + { + type: "category", + label: "Web App (Server-Side)", + items: [ + "examples/login/symfony", + "examples/login/java-spring", + "examples/login/python-django", + "examples/login/go" + ], + }, + { + type: "category", + label: "APIs / Backend Services", + items: [ + "examples/secure-api/go", + "examples/secure-api/java-spring", + "examples/secure-api/python-django", + "examples/secure-api/python-flask", + "examples/secure-api/nodejs-nestjs", + "examples/secure-api/pylon", + ], + }, + ], + }, + { + type: "category", + label: "Use Cases", + link: { + type: "generated-index", + title: "Use Cases", + slug: "guides/solution-scenarios/introduction", + description: + "Customers of an SaaS Identity and access management system usually have all distinct use cases and requirements. This guide attempts to explain real-world implementations and break them down into solution scenarios which aim to help you getting started with ZITADEL.", + }, + items: [ + "guides/solution-scenarios/b2b", + "guides/solution-scenarios/configurations", + "guides/solution-scenarios/saas", + "guides/solution-scenarios/b2c", + "guides/solution-scenarios/frontend-calling-backend-API", + { + type: "category", + label: "Machine-to-Machine (M2M)", + items: [ + "guides/integrate/service-users/authenticate-service-users", + "guides/integrate/service-users/private-key-jwt", + "guides/integrate/service-users/client-credentials", + "guides/integrate/service-users/personal-access-token", ], }, - "guides/integrate/login/saml", ], }, { @@ -304,38 +168,298 @@ module.exports = { }, { type: "category", - label: "Token Introspection", - collapsed: true, + label: "Branding & Customization", items: [ + "guides/manage/customize/branding", + "guides/manage/customize/texts", + "guides/manage/customize/restrictions", + "guides/manage/customize/user-schema", + "guides/manage/customize/user-metadata", + "guides/manage/customize/notification-providers", + "concepts/features/custom-domain", + ] + }, + ], + }, + { + type: "category", + label: "Integrate & Authenticate", + collapsed: true, + items: [ + { + type: "category", + label: "OIDC & OAuth Flows", + link: { + type: "generated-index", + title: "Authenticate users with OpenID Connect (OIDC)", + slug: "guides/integrate/login/oidc", + description: + "This guide explains how to utilize ZITADEL for user authentication within your applications using OpenID Connect (OIDC). Here, we offer comprehensive guidance on seamlessly integrating ZITADEL's authentication features, ensuring both security and user experience excellence. Throughout this documentation, we'll cover the setup process for ZITADEL authentication, including the recommended OIDC flows tailored to different application types. Additionally, we'll provide clear instructions on securely signing out or logging out users from your application, ensuring data security and user privacy. With our guidance, you'll be equipped to leverage ZITADEL's authentication capabilities effectively, enhancing your application's security posture while delivering a seamless login experience for your users.", + }, + items: [ + "guides/integrate/login/oidc/oauth-recommended-flows", + "guides/integrate/login/oidc/login-users", + "guides/integrate/login/oidc/device-authorization", + "apis/openidoauth/endpoints", + "apis/openidoauth/authn-methods", + "apis/openidoauth/scopes", + "apis/openidoauth/claims", + "apis/openidoauth/grant-types", + "apis/openidoauth/authrequest", + "guides/integrate/login/oidc/webkeys", + "guides/integrate/token-exchange", + ], + }, + { + type: "category", + label: "SAML", + items: [ + "guides/integrate/login/saml", + "apis/saml/endpoints", + ], + }, + { + type: "category", + label: "API Access", + items: [ + "guides/integrate/zitadel-apis/access-zitadel-apis", + "guides/integrate/zitadel-apis/access-zitadel-system-api", + "guides/integrate/zitadel-apis/event-api", + "guides/integrate/zitadel-apis/example-zitadel-api-with-go", + "guides/integrate/zitadel-apis/example-zitadel-api-with-dot-net", { - type: "autogenerated", - dirName: "guides/integrate/token-introspection", + type: "link", + label: "Zitadel APIs", + href: "/docs/apis/introduction", }, ], }, - "guides/integrate/token-exchange", + { + type: "category", + label: "SDKs", + items: [ + "sdk-examples/introduction", + { + type: "category", + label: "Frontend (SPA)", + items: [ + "sdk-examples/react", + "sdk-examples/angular", + "sdk-examples/vue", + ], + }, + { + type: "category", + label: "Mobile & Native", + items: [ + { + type: "link", + label: "Dart / Flutter", + href: "https://github.com/smartive/zitadel-dart", + }, + { + type: "link", + label: ".NET (MAUI/Xamarin)", + href: "https://github.com/smartive/zitadel-net", + }, + ], + }, + { + type: "category", + label: "Full-Stack / SSR", + items: [ + "sdk-examples/nextjs", + "sdk-examples/nuxtjs", + "sdk-examples/sveltekit", + "sdk-examples/qwik", + "sdk-examples/solidstart", + "sdk-examples/astro", + { + type: "link", + label: "NextAuth", + href: "https://next-auth.js.org/providers/zitadel", + }, + ], + }, + { + type: "category", + label: "Backend & API", + items: [ + { + type: "category", + label: "Node.js", + items: [ + "sdk-examples/client-libraries/node", + "sdk-examples/expressjs", + "sdk-examples/fastify", + "sdk-examples/hono", + "sdk-examples/nestjs", + { + type: "link", + label: "Passport.js", + href: "https://github.com/buehler/node-passport-zitadel", + }, + { + type: "link", + label: "Node.js (Community)", + href: "https://www.npmjs.com/package/@zitadel/node", + }, + ], + }, + { + type: "category", + label: "Python", + items: [ + "sdk-examples/client-libraries/python", + "sdk-examples/python-flask", + "sdk-examples/python-django", + { + type: "link", + label: "FastAPI", + href: "https://github.com/cleanenergyexchange/fastapi-zitadel-auth", + }, + ], + }, + { + type: "category", + label: "Go", + items: ["sdk-examples/go"], + }, + { + type: "category", + label: "Java", + items: [ + "sdk-examples/java", + "sdk-examples/client-libraries/java", + ], + }, + { + type: "category", + label: "PHP", + items: [ + "sdk-examples/symfony", + "sdk-examples/client-libraries/php", + ], + }, + { + type: "category", + label: "Other Languages", + items: [ + "sdk-examples/client-libraries/ruby", + { + type: "link", + label: "Elixir", + href: "https://github.com/maennchen/zitadel_api", + }, + { + type: "link", + label: "Rust", + href: "https://github.com/smartive/zitadel-rust", + }, + { + type: "link", + label: "Pylon", + href: "https://github.com/getcronit/pylon", + }, + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "SCIM", + link: { + type: "doc", + id: "guides/manage/user/scim2", + }, + items: ["guides/integrate/scim-okta-guide"] + }, + { + type: "category", + label: "Token Introspection", + link: { + type: "doc", + id: "guides/integrate/token-introspection/index", + }, + items: [ + "guides/integrate/token-introspection/basic-auth", + "guides/integrate/token-introspection/private-key-jwt", + ] + }, "guides/integrate/back-channel-logout", { type: "category", - label: "Service Users", - link: { - type: "doc", - id: "guides/integrate/service-users/authenticate-service-users", - }, - collapsed: true, + label: "External Integrations", items: [ { - type: "autogenerated", - dirName: "guides/integrate/service-users", + type: "category", + label: "Services", + items: [ + "guides/integrate/services/google-workspace", + "guides/integrate/services/aws-saml", + "guides/integrate/services/atlassian-saml", + "guides/integrate/services/pingidentity-saml", + "guides/integrate/services/google-cloud", + "guides/integrate/services/cloudflare-oidc", + "guides/integrate/services/gitlab-saml", + "guides/integrate/services/auth0-saml", + "guides/integrate/services/auth0-oidc", + "guides/integrate/services/gitlab-self-hosted", + { + type: "link", + label: "Bold BI", + href: "https://support.boldbi.com/kb/article/13708/how-to-configure-zitadel-oauth-login-in-bold-bi", + }, + { + type: "link", + label: "Cloudflare Workers", + href: "https://zitadel.com/blog/increase-spa-security-with-cloudflare-workers", + }, + { + type: "link", + label: "Firezone", + href: "https://www.firezone.dev/docs/authenticate/oidc/zitadel", + }, + { + type: "link", + label: "Netbird", + href: "https://docs.netbird.io/selfhosted/identity-providers", + }, + { + type: "link", + label: "Nextcloud", + href: "https://zitadel.com/blog/zitadel-as-sso-provider-for-selfhosting", + }, + { + type: "link", + label: "Psono", + href: "https://doc.psono.com/admin/configuration/oidc-zitadel.html", + }, + { + type: "link", + label: "Zoho Desk", + href: "https://help.zoho.com/portal/en/kb/desk/user-management-and-security/data-security/articles/setting-up-saml-single-signon-for-help-center#Zitadel_IDP", + }, + ], + }, + { + type: "category", + label: "Tools", + items: [ + { + type: "link", + label: "Argo CD", + href: "https://argo-cd.readthedocs.io/en/latest/operator-manual/user-management/zitadel/", + }, + "guides/integrate/tools/apache2", + "guides/integrate/authenticated-mongodb-charts", + "examples/identity-proxy/oauth2-proxy", + ], }, ], }, - { - type: "category", - label: "Role Management", - collapsed: true, - items: ["guides/integrate/retrieve-user-roles"], - }, { type: "category", label: "Build your own Login UI", @@ -364,336 +488,418 @@ module.exports = { }, { type: "category", - label: "Login users with SSO", + label: "Actions", + items: [ + { + type: "category", + label: "V1", + link: { + type: "doc", + id: "concepts/features/actions", + }, + items: [ + "guides/manage/console/actions-overview", + "apis/actions/modules", + "apis/actions/code-examples", + "apis/actions/internal-authentication", + "apis/actions/external-authentication", + "apis/actions/complement-token", + "apis/actions/customize-samlresponse", + "apis/actions/objects", + "guides/manage/customize/behavior", + ] + }, + { + type: "category", + label: "V2", + link: { + type: "doc", + id: "concepts/features/actions_v2", + }, + items: [ + "guides/integrate/actions/usage", + "guides/integrate/actions/testing-request", + "guides/integrate/actions/testing-request-manipulation", + "guides/integrate/actions/testing-response", + "guides/integrate/actions/testing-response-manipulation", + "guides/integrate/actions/testing-function", + "guides/integrate/actions/testing-function-manipulation", + "guides/integrate/actions/testing-event", + "guides/integrate/actions/testing-request-signature", + "guides/integrate/actions/migrate-from-v1", + "guides/integrate/actions/webhook-site-setup", + ], + }, + ], + }, + { + type: "category", + label: "Migrate", + collapsed: true, + items: [ + "guides/migrate/introduction", + "guides/migrate/users", + "guides/migrate/sources/zitadel", + "guides/migrate/sources/auth0", + "guides/migrate/sources/keycloak", + ], + }, + ], + }, + { + type: "category", + label: "Configure Identity & Policies", + collapsed: true, + items: [ + "guides/manage/user/reg-create-user", + "guides/manage/terraform-provider", + { + type: "category", + label: "Identity Providers", link: { type: "doc", id: "guides/integrate/identity-providers/introduction", }, - collapsed: true, items: [ - "guides/integrate/identity-providers/apple", - "guides/integrate/identity-providers/azure-ad-oidc", - "guides/integrate/identity-providers/azure-ad-saml", - "guides/integrate/identity-providers/generic-oidc", - "guides/integrate/identity-providers/github", - "guides/integrate/identity-providers/gitlab", - "guides/integrate/identity-providers/google", - "guides/integrate/identity-providers/jwt_idp", - "guides/integrate/identity-providers/keycloak", - "guides/integrate/identity-providers/ldap", - "guides/integrate/identity-providers/linkedin-oauth", - "guides/integrate/identity-providers/mocksaml", - "guides/integrate/identity-providers/okta-oidc", - "guides/integrate/identity-providers/okta-saml", - "guides/integrate/identity-providers/onelogin-saml", - "guides/integrate/identity-providers/openldap", - "guides/integrate/identity-providers/pingfederate-saml", - "guides/integrate/identity-providers/migrate", - "guides/integrate/identity-providers/additional-information", + { + type: "category", + label: "Social Logins", + collapsed: true, + items: [ + "guides/integrate/identity-providers/google", + "guides/integrate/identity-providers/apple", + "guides/integrate/identity-providers/github", + "guides/integrate/identity-providers/gitlab", + "guides/integrate/identity-providers/linkedin-oauth", + ], + }, + { + type: "category", + label: "Enterprise (SAML & OIDC)", + collapsed: true, + items: [ + "guides/integrate/identity-providers/azure-ad-oidc", + "guides/integrate/identity-providers/azure-ad-saml", + "guides/integrate/identity-providers/okta-oidc", + "guides/integrate/identity-providers/okta-saml", + "guides/integrate/identity-providers/keycloak", + "guides/integrate/identity-providers/onelogin-saml", + "guides/integrate/identity-providers/pingfederate-saml", + ], + }, + { + type: "category", + label: "Legacy & Directory (LDAP)", + items: [ + "guides/integrate/identity-providers/ldap", + "guides/integrate/identity-providers/openldap", + ], + }, + { + type: "category", + label: "Custom & Generic", + items: [ + "guides/integrate/identity-providers/generic-oidc", + "guides/integrate/identity-providers/jwt_idp", + "guides/integrate/identity-providers/mocksaml", + ], + }, + { + type: "category", + label: "Guides", + items: [ + "guides/integrate/identity-providers/migrate", + "guides/integrate/identity-providers/additional-information", + ] + } ], }, { type: "category", - label: "ZITADEL APIs", - link: { - type: "doc", - id: "guides/integrate/zitadel-apis/access-zitadel-apis", - }, - collapsed: true, + label: "Policies", items: [ - { - type: "autogenerated", - dirName: "guides/integrate/zitadel-apis", - }, + "guides/manage/console/default-settings", + "concepts/structure/policies", ], }, { type: "category", - label: "Services", - link: { - type: "generated-index", - title: "Integrate ZITADEL with your Favorite Services", - slug: "/guides/integrate/services", - description: - "With the guides in this section you will learn how to integrate ZITADEL with your services.", - }, - collapsed: true, + label: "Roles & Permissions", items: [ - { - type: "autogenerated", - dirName: "guides/integrate/services", - }, - { - type: "link", - label: "Bold BI (boldbi.com)", - href: "https://support.boldbi.com/kb/article/13708/how-to-configure-zitadel-oauth-login-in-bold-bi", - }, - { - type: "link", - label: "Cloudflare workers", - href: "https://zitadel.com/blog/increase-spa-security-with-cloudflare-workers", - }, - { - type: "link", - label: "Firezone (firezone.dev)", - href: "https://www.firezone.dev/docs/authenticate/oidc/zitadel", - }, - { - type: "link", - label: "Nextcloud", - href: "https://zitadel.com/blog/zitadel-as-sso-provider-for-selfhosting", - }, - { - type: "link", - label: "Netbird (netbird.io)", - href: "https://docs.netbird.io/selfhosted/identity-providers", - }, - { - type: "link", - label: "Psono (psono.com)", - href: "https://doc.psono.com/admin/configuration/oidc-zitadel.html", - }, - { - type: "link", - label: "Zoho Desk (zoho.com)", - href: "https://help.zoho.com/portal/en/kb/desk/user-management-and-security/data-security/articles/setting-up-saml-single-signon-for-help-center#Zitadel_IDP", - }, + "guides/manage/console/roles", + "guides/integrate/retrieve-user-roles", + "concepts/structure/granted_projects", + "guides/manage/console/managers", ], }, { type: "category", - label: "Tools", - link: { - type: "generated-index", - title: "Integrate ZITADEL with your Tools", - slug: "/guides/integrate/tools", - description: - "With the guides in this section you will learn how to integrate ZITADEL with your favorite tools.", - }, - collapsed: true, + label: "Compliance & Security", items: [ - { - type: "link", - label: "Argo CD", - href: "https://argo-cd.readthedocs.io/en/latest/operator-manual/user-management/zitadel/", - }, - "guides/integrate/tools/apache2", - "guides/integrate/authenticated-mongodb-charts", - "examples/identity-proxy/oauth2-proxy", + "concepts/features/audit-trail", + "guides/integrate/external-audit-log", ], }, - "guides/integrate/external-audit-log", - { - type: "category", - label: "Actions", - link: { - type: "generated-index", - title: "Use Actions to integrate ZITADEL with your Favorite Services", - slug: "/guides/integrate/actions", - description: - "With the guides in this section you will learn how to use action to integrate Zitadel with your services.", - }, - collapsed: true, - items: [ - { - type: "doc", - id: "guides/integrate/actions/usage", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-request", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-request-manipulation", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-response", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-response-manipulation", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-function", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-function-manipulation", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-event", - }, - { - type: "doc", - id: "guides/integrate/actions/testing-request-signature", - }, - { - type: "doc", - id: "guides/integrate/actions/migrate-from-v1", - }, - { - type: "doc", - id: "guides/integrate/actions/webhook-site-setup", - }, - ], - }, - { - type: "category", - label: "SCIM v2.0", - collapsed: true, - items: ["guides/integrate/scim-okta-guide"], - }, ], }, { type: "category", - label: "Solution Scenarios", - link: { - type: "generated-index", - title: "Solution Scenarios", - slug: "guides/solution-scenarios/introduction", - description: - "Customers of an SaaS Identity and access management system usually have all distinct use cases and requirements. This guide attempts to explain real-world implementations and break them down into solution scenarios which aim to help you getting started with ZITADEL.", - }, + label: "Test & Debug", collapsed: true, - items: [ - "guides/solution-scenarios/b2c", - "guides/solution-scenarios/b2b", - "guides/solution-scenarios/saas", - "guides/solution-scenarios/domain-discovery", - "guides/solution-scenarios/configurations", - "guides/solution-scenarios/frontend-calling-backend-API", - "guides/solution-scenarios/restrict-console", - ], - }, - { - type: "category", - label: "Concepts", - collapsed: true, - link: { - type: "generated-index", - title: "Concepts and Features", - slug: "concepts", - description: - "This part of our documentation contains ZITADEL specific or general concepts required to understand the system or our guides.", - }, items: [ { - type: "category", - label: "Resources", - collapsed: false, - items: [ - { - type: "autogenerated", - dirName: "concepts/structure", - }, - ], - }, - { - type: "category", - label: "Features", - collapsed: false, - items: [ - { - type: "autogenerated", - dirName: "concepts/features", - }, - ], - }, - { - type: "autogenerated", - dirName: "concepts/knowledge", + type: "link", + label: "OIDC Playground", + href: "https://zitadel.com/playgrounds/oidc", }, ], }, { type: "category", - label: "Architecture", + label: "Deploy & Operate", collapsed: true, items: [ - "concepts/architecture/software", - "concepts/architecture/solution", - "concepts/architecture/secrets", + "guides/manage/console/console-overview", + { + type: "category", + label: "Customer Portal", + collapsed: true, + link: { + type: "generated-index", + title: "Overview", + slug: "guides/manage/cloud/overview", + description: + "Our customer portal is used to manage all your ZITADEL instances. You can also manage your subscriptions, billing, newsletters and support requests.", + }, + items: [ + "guides/manage/cloud/start", + "guides/manage/cloud/instances", + "guides/manage/cloud/settings", + "guides/manage/cloud/billing", + "guides/manage/cloud/users", + ], + }, + { + type: "category", + label: "Self-Hosted", + items: [ + "self-hosting/deploy/overview", + "self-hosting/deploy/linux", + "self-hosting/deploy/macos", + "self-hosting/deploy/devcontainer", + "self-hosting/deploy/compose", + "self-hosting/deploy/kubernetes", + { + type: "category", + label: "Manage", + collapsed: true, + items: [ + { + type: "category", + label: "Production & Operations", + collapsed: false, + items: [ + "self-hosting/manage/production", + "self-hosting/manage/productionchecklist", + "self-hosting/manage/usage_control", + ], + }, + { + type: "category", + label: "Configuration", + collapsed: true, + items: [ + "self-hosting/manage/configure/configure", + "self-hosting/manage/custom-domain", + "self-hosting/manage/tls_modes", + "self-hosting/manage/http2", + "self-hosting/manage/login-client", + ], + }, + { + type: "category", + collapsed: true, + label: "Reverse Proxy", + link: { + type: "doc", + id: "self-hosting/manage/reverseproxy/reverse_proxy", + }, + items: [ + "self-hosting/manage/reverseproxy/traefik/traefik", + "self-hosting/manage/reverseproxy/nginx/nginx", + "self-hosting/manage/reverseproxy/caddy/caddy", + "self-hosting/manage/reverseproxy/httpd/httpd", + "self-hosting/manage/reverseproxy/cloudflare/cloudflare", + "self-hosting/manage/reverseproxy/cloudflare_tunnel/cloudflare_tunnel", + "self-hosting/manage/reverseproxy/zitadel_cloud/zitadel_cloud", + ], + }, + { + type: "category", + label: "Observability", + collapsed: true, + items: [ + "self-hosting/manage/service_ping", + { + type: "category", + label: "Metrics", + collapsed: true, + link: { + type: "doc", + id: "self-hosting/manage/metrics/overview", + }, + items: ["self-hosting/manage/metrics/prometheus"], + }, + ], + }, + { + type: "category", + label: "Tools", + collapsed: true, + items: [ + { + type: "category", + label: "Command Line Interface", + collapsed: true, + link: { + type: "doc", + id: "self-hosting/manage/cli/overview", + }, + items: ["self-hosting/manage/cli/mirror"], + }, + ], + }, + ], + }, + "self-hosting/deploy/troubleshooting/troubleshooting", + ], + }, + { + type: "category", + label: "Scaling & Performance", + items: [ + "self-hosting/manage/updating_scaling", + "self-hosting/manage/database/database", + "self-hosting/manage/cache", + ], + }, + ], + }, + { + type: "category", + label: "Architecture & Concepts", + collapsed: true, + items: [ + { + type: "category", + label: "System Architecture", + items: [ + "concepts/architecture/solution", + "concepts/architecture/software", + "concepts/architecture/secrets", + ], + }, "concepts/principles", { type: "category", - label: "Event Store", - collapsed: true, - items: [ - "concepts/eventstore/overview", - "concepts/eventstore/implementation", - ], - }, - ], - }, - { - type: "category", - label: "Product Information", - collapsed: true, - items: [ - "product/roadmap", - "product/release-cycle", - { - type: "link", - label: "Changelog", - href: "https://zitadel.com/changelog", - }, - ], - }, - { - type: "category", - label: "Support", - collapsed: true, - items: [ - { - type: "link", - label: "Support States", - href: "https://help.zitadel.com/zitadel-support-states" - }, - { - type: "link", - label: "Zitadel Release Cycle", - href: "https://help.zitadel.com/zitadel-software-release-cycle" - }, - "support/troubleshooting", - { - type: "category", - label: "Technical Advisory", - link: { - type: "doc", - id: "support/technical_advisory", - }, - collapsed: true, + label: "Advanced Topics", items: [ { - type: "autogenerated", - dirName: "support/advisory", + type: "category", + label: "Event Store", + items: [ + "concepts/eventstore/overview", + "concepts/eventstore/implementation", + ] }, + "concepts/features/selfservice", + "concepts/features/account-linking", + "concepts/features/external-user-grant", + "concepts/features/identity-brokering", + "concepts/features/passkeys", + "concepts/knowledge/opaque-tokens", + "guides/solution-scenarios/domain-discovery", + "guides/solution-scenarios/restrict-console", ], }, ], }, + { + type: "category", + label: "Product, Releases & Support", + collapsed: true, + items: [ + { + type: "category", + label: "Product Features", + items: [ + "product/roadmap", + ], + }, + { + type: "category", + label: "Releases", + items: [ + { + type: "link", + label: "Changelog", + href: "https://zitadel.com/changelog", + }, + "product/release-cycle", + ], + }, + { + type: "category", + label: "Support Resources", + items: [ + "support/troubleshooting", + "support/technical_advisory", + { + type: "link", + label: "Support States", + href: "https://help.zitadel.com/zitadel-support-states", + }, + { + type: "link", + label: "Zitadel Release Cycle", + href: "https://help.zitadel.com/zitadel-software-release-cycle", + }, + { + type: "link", + label: "Knowledge Base", + href: "https://help.zitadel.com", + } + ], + }, + { + type: "link", + label: "Pricing", + href: "https://zitadel.com/pricing", + }, + { + type: "link", + label: "Contact Us", + href: "https://zitadel.com/contact", + }, + "guides/manage/cloud/support", + ], + }, ], apis: [ "apis/introduction", { type: "category", label: "Core Resources", - collapsed: false, + collapsed: true, link: { type: "doc", id: "apis/apis/index", }, items: [ - { type: "category", label: "V2", - collapsed: false, + collapsed: true, link: { type: "doc", id: "apis/v2", @@ -900,7 +1106,7 @@ module.exports = { { type: "category", label: "V1", - collapsed: false, + collapsed: true, link: { type: "generated-index", title: "APIs V1 (GA)", @@ -972,32 +1178,11 @@ module.exports = { }, { type: "category", - label: "Sign In Users ", - collapsed: false, + label: "Observability", + collapsed: true, items: [ - { - type: "category", - label: "OpenID Connect & OAuth", - collapsed: true, - items: [ - "apis/openidoauth/endpoints", - { - label: "OIDC Playground", - type: "link", - href: "https://zitadel.com/playgrounds/oidc", - }, - "apis/openidoauth/scopes", - "apis/openidoauth/claims", - "apis/openidoauth/authn-methods", - "apis/openidoauth/grant-types", - ], - }, - { - type: "category", - label: "SAML 2.0", - collapsed: true, - items: ["apis/saml/endpoints"], - }, + "apis/observability/metrics", + "apis/observability/health", ], }, { @@ -1006,32 +1191,11 @@ module.exports = { collapsed: true, items: ["apis/scim2"], }, - { - type: "category", - label: "Actions", - collapsed: false, - items: [ - "apis/actions/introduction", - "apis/actions/modules", - "apis/actions/code-examples", - "apis/actions/internal-authentication", - "apis/actions/external-authentication", - "apis/actions/complement-token", - "apis/actions/customize-samlresponse", - "apis/actions/objects", - ], - }, { type: "doc", label: "gRPC Status Codes", id: "apis/statuscodes", }, - { - type: "category", - label: "Observability", - collapsed: false, - items: ["apis/observability/metrics", "apis/observability/health"], - }, { type: "link", label: "Rate Limits (Cloud)", @@ -1040,7 +1204,7 @@ module.exports = { { type: "category", label: "Benchmarks", - collapsed: false, + collapsed: true, link: { type: "doc", id: "apis/benchmarks/index", @@ -1104,84 +1268,18 @@ module.exports = { ], }, ], - selfHosting: [ - { - type: "category", - label: "Deploy", - collapsed: false, - items: [ - "self-hosting/deploy/overview", - "self-hosting/deploy/linux", - "self-hosting/deploy/macos", - "self-hosting/deploy/compose", - "self-hosting/deploy/devcontainer", - "self-hosting/deploy/kubernetes", - "self-hosting/deploy/troubleshooting/troubleshooting", - ], - }, - { - type: "category", - label: "Manage", - collapsed: false, - items: [ - "self-hosting/manage/production", - "self-hosting/manage/productionchecklist", - "self-hosting/manage/login-client", - "self-hosting/manage/configure/configure", - { - type: "category", - collapsed: false, - label: "Reverse Proxy", - link: { - type: "doc", - id: "self-hosting/manage/reverseproxy/reverse_proxy", - }, - items: [ - "self-hosting/manage/reverseproxy/traefik/traefik", - "self-hosting/manage/reverseproxy/nginx/nginx", - "self-hosting/manage/reverseproxy/caddy/caddy", - "self-hosting/manage/reverseproxy/httpd/httpd", - "self-hosting/manage/reverseproxy/cloudflare/cloudflare", - "self-hosting/manage/reverseproxy/cloudflare_tunnel/cloudflare_tunnel", - "self-hosting/manage/reverseproxy/zitadel_cloud/zitadel_cloud", - ], - }, - "self-hosting/manage/custom-domain", - "self-hosting/manage/http2", - "self-hosting/manage/tls_modes", - "self-hosting/manage/database/database", - "self-hosting/manage/cache", - "self-hosting/manage/service_ping", - { - type: "category", - label: "Metrics", - collapsed: false, - link: { - type: "doc", - id: "self-hosting/manage/metrics/overview", - }, - items: ["self-hosting/manage/metrics/prometheus"], - }, - "self-hosting/manage/updating_scaling", - "self-hosting/manage/usage_control", - { - type: "category", - label: "Command Line Interface", - collapsed: false, - link: { - type: "doc", - id: "self-hosting/manage/cli/overview", - }, - items: ["self-hosting/manage/cli/mirror"], - }, - ], - }, + selfHosting: [{ + type: "link", + label: "Self-Hosting Home", + href: + "/docs/self-hosting/deploy/overview" + } ], legal: [ { type: "category", label: "Legal Agreements", - collapsed: false, + collapsed: true, link: { type: "generated-index", title: "Legal Agreements", @@ -1197,7 +1295,7 @@ module.exports = { { type: "category", label: "Service Description", - collapsed: false, + collapsed: true, link: { type: "generated-index", title: "Service description", @@ -1220,7 +1318,7 @@ module.exports = { { type: "category", label: "Policies", - collapsed: false, + collapsed: true, link: { type: "generated-index", title: "Policies", @@ -1238,4 +1336,4 @@ module.exports = { ], }, ], -}; \ No newline at end of file +}; diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index 729688a43..8c499f674 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -49,7 +49,7 @@ const features = [ description="" />