diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 0000000000..bf0ce4fd64 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,5 @@ +reviews: + review_status: false + # Temporarily exclude MDX files from review processing. + path_filters: + - "!**/*.mdx" diff --git a/.github/workflows/closed_references.yml b/.github/workflows/closed_references.yml index 9a1b48350a..7d1fe776cb 100644 --- a/.github/workflows/closed_references.yml +++ b/.github/workflows/closed_references.yml @@ -19,10 +19,10 @@ jobs: runs-on: ubuntu-latest name: Find closed references steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2-beta + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 with: - node-version: "14" + node-version: "24" - uses: ory/closed-reference-notifier@v1 with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/conventional_commits.yml b/.github/workflows/conventional_commits.yml index c4d3905117..d4fd6e4ef6 100644 --- a/.github/workflows/conventional_commits.yml +++ b/.github/workflows/conventional_commits.yml @@ -24,7 +24,7 @@ jobs: name: Validate PR title runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - id: config uses: ory/ci/conventional_commit_config@master with: diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml index e903667d45..efa436020d 100644 --- a/.github/workflows/labels.yml +++ b/.github/workflows/labels.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6 - name: Synchronize Issue Labels uses: ory/label-sync-action@v0 with: diff --git a/docs/_common/need-selfhosted-support.mdx b/docs/_common/need-selfhosted-support.mdx index e05ae29a80..9f79825c46 100644 --- a/docs/_common/need-selfhosted-support.mdx +++ b/docs/_common/need-selfhosted-support.mdx @@ -1,6 +1,6 @@ :::info Professional support? Ory offers support for self-hosted Ory software through the Ory Enterprise License (OEL). Read more about the OEL -[here](https://www.ory.com/docs/self-hosted/oel). +[here](/docs/oel/getting-started). ::: diff --git a/docs/ecosystem/api-design.mdx b/docs/ecosystem/api-design.mdx index 87972d7f2a..71c00faae8 100644 --- a/docs/ecosystem/api-design.mdx +++ b/docs/ecosystem/api-design.mdx @@ -4,7 +4,7 @@ title: API Design --- This document provides a summary of Ory's REST design with topics like pagination and date formats. If you're interested in Ory's -API design, check out the [REST API design guidelines](../open-source/guidelines/rest-api-guidelines.md). +API design, check out the [REST API design guidelines](../oss/guidelines/rest-api-guidelines.md) ## Date format diff --git a/docs/getting-started/integrate-auth/01_go.mdx b/docs/getting-started/integrate-auth/01_go.mdx index fc6e426919..d168940ba9 100644 --- a/docs/getting-started/integrate-auth/01_go.mdx +++ b/docs/getting-started/integrate-auth/01_go.mdx @@ -2,6 +2,7 @@ id: go title: Integrate authentication into Go sidebar_label: Go +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/integrate-auth/05_php.mdx b/docs/getting-started/integrate-auth/05_php.mdx index ec87c100c8..90e6ba4647 100644 --- a/docs/getting-started/integrate-auth/05_php.mdx +++ b/docs/getting-started/integrate-auth/05_php.mdx @@ -2,6 +2,7 @@ id: php title: Integrate authentication into PHP sidebar_label: PHP +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/integrate-auth/10_expressjs.mdx b/docs/getting-started/integrate-auth/10_expressjs.mdx index a223061c8c..cc63b0467a 100644 --- a/docs/getting-started/integrate-auth/10_expressjs.mdx +++ b/docs/getting-started/integrate-auth/10_expressjs.mdx @@ -2,6 +2,7 @@ id: expressjs title: Integrate authentication into Node.js / Express.js sidebar_label: Node.js / Express.js +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/integrate-auth/14_auth-js.mdx b/docs/getting-started/integrate-auth/14_auth-js.mdx index e333c76b24..1e7df66434 100644 --- a/docs/getting-started/integrate-auth/14_auth-js.mdx +++ b/docs/getting-started/integrate-auth/14_auth-js.mdx @@ -2,6 +2,7 @@ id: auth-js title: Integrate authentication into Auth.js and NextAuth sidebar_label: Auth.js / NextAuth +displayed_sidebar: quickstartsSidebar --- # Integrate authentication into Auth.js and NextAuth diff --git a/docs/getting-started/integrate-auth/16_nextjs_app_router.mdx b/docs/getting-started/integrate-auth/16_nextjs_app_router.mdx index 65bbe1f233..f13a26e1ba 100644 --- a/docs/getting-started/integrate-auth/16_nextjs_app_router.mdx +++ b/docs/getting-started/integrate-auth/16_nextjs_app_router.mdx @@ -2,6 +2,7 @@ id: nextjs-app-router-quickstart title: Next.js App Router Quickstart sidebar_label: Next.js (App Router) +displayed_sidebar: quickstartsSidebar --- import Tabs from "@theme/Tabs" diff --git a/docs/getting-started/integrate-auth/17_nextjs_pages_router.mdx b/docs/getting-started/integrate-auth/17_nextjs_pages_router.mdx index 9d5e1cfbc1..493ddd8c64 100644 --- a/docs/getting-started/integrate-auth/17_nextjs_pages_router.mdx +++ b/docs/getting-started/integrate-auth/17_nextjs_pages_router.mdx @@ -2,6 +2,7 @@ id: nextjs-pages-router-quickstart title: Next.js Pages Router Quickstart sidebar_label: Next.js (Pages Router) +displayed_sidebar: quickstartsSidebar --- import Tabs from "@theme/Tabs" diff --git a/docs/getting-started/integrate-auth/20_flutter-web-redirect.mdx b/docs/getting-started/integrate-auth/20_flutter-web-redirect.mdx index b623467e57..7827a439fc 100644 --- a/docs/getting-started/integrate-auth/20_flutter-web-redirect.mdx +++ b/docs/getting-started/integrate-auth/20_flutter-web-redirect.mdx @@ -2,6 +2,7 @@ id: flutter-web-redirect title: Integrate authentication into Flutter Web sidebar_label: Flutter +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/integrate-auth/25_react.mdx b/docs/getting-started/integrate-auth/25_react.mdx index 2b46dca9ca..0740029443 100644 --- a/docs/getting-started/integrate-auth/25_react.mdx +++ b/docs/getting-started/integrate-auth/25_react.mdx @@ -2,6 +2,7 @@ id: react title: Integrate authentication into React + API sidebar_label: React +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/integrate-auth/30_vue.mdx b/docs/getting-started/integrate-auth/30_vue.mdx index 4d5c61be13..03fc8dd4a1 100644 --- a/docs/getting-started/integrate-auth/30_vue.mdx +++ b/docs/getting-started/integrate-auth/30_vue.mdx @@ -2,6 +2,7 @@ id: vue title: Integrate authentication into Vue.js + API sidebar_label: Vue.js +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/integrate-auth/35_react-native.mdx b/docs/getting-started/integrate-auth/35_react-native.mdx index 6654b666ed..3badb39cb7 100644 --- a/docs/getting-started/integrate-auth/35_react-native.mdx +++ b/docs/getting-started/integrate-auth/35_react-native.mdx @@ -2,6 +2,7 @@ id: react-native title: Integrate Authentication into React Native sidebar_label: React Native +displayed_sidebar: quickstartsSidebar --- import CodeFromRemote from "@theme/CodeFromRemote" diff --git a/docs/getting-started/integrate-auth/36_java.mdx b/docs/getting-started/integrate-auth/36_java.mdx index 7de31dc617..f5ed3ebd12 100644 --- a/docs/getting-started/integrate-auth/36_java.mdx +++ b/docs/getting-started/integrate-auth/36_java.mdx @@ -2,6 +2,7 @@ id: java title: Integrate authentication into Java + Spring Boot sidebar_label: Java (Spring Boot) +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/integrate-auth/40_dotnet.mdx b/docs/getting-started/integrate-auth/40_dotnet.mdx index 425087c085..43f59deb74 100644 --- a/docs/getting-started/integrate-auth/40_dotnet.mdx +++ b/docs/getting-started/integrate-auth/40_dotnet.mdx @@ -2,6 +2,7 @@ id: dotnet title: Integrate authentication into ASP.NET sidebar_label: .NET / ASP.NET +displayed_sidebar: quickstartsSidebar --- ```mdx-code-block diff --git a/docs/getting-started/ory-network-oauth2.mdx b/docs/getting-started/ory-network-oauth2.mdx index 54fc32de2f..a318074f3d 100644 --- a/docs/getting-started/ory-network-oauth2.mdx +++ b/docs/getting-started/ory-network-oauth2.mdx @@ -1,7 +1,7 @@ --- id: ory-network-oauth2 -title: Perform OAuth2 Authorization Code Grant and Client Credentials Grant -sidebar_label: Try it +title: OAuth2 authorization code and client credentials grants +sidebar_label: OAuth2 grants --- # Try common OAuth2 Grants diff --git a/docs/getting-started/overview.mdx b/docs/getting-started/overview.mdx index 8e48156881..e0dd78dd40 100644 --- a/docs/getting-started/overview.mdx +++ b/docs/getting-started/overview.mdx @@ -1,15 +1,18 @@ --- id: overview -title: Quickstarts & Tutorials +title: Quickstarts +displayed_sidebar: quickstartsSidebar +hide_title: true --- -Are you looking for an example to just get started? Check out all available examples! +import { QuickstartsOverviewHeading } from "@site/src/components/QuickStarts/QuickstartsOverviewHeading" + + + +Get started with Ory using the guides and examples that best match your use case. ```mdx-code-block -import ExampleList from "@site/src/components/Examples/example-list" -import * as content from "@site/src/pages/_assets/examples-content" +import { QuickstartFilter } from "@site/src/components/QuickStarts/quickstart-filter" - - - + ``` diff --git a/docs/guides/oauth2-openid-connect.mdx b/docs/guides/oauth2-openid-connect.mdx index 03d945f2df..056c6af19b 100644 --- a/docs/guides/oauth2-openid-connect.mdx +++ b/docs/guides/oauth2-openid-connect.mdx @@ -8,5 +8,5 @@ title: OAuth2 and OpenID Connect import DocCardList from '@theme/DocCardList'; import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; - + ``` diff --git a/docs/guides/operations.mdx b/docs/guides/operations.mdx index e23d17883c..aedb3b9dbd 100644 --- a/docs/guides/operations.mdx +++ b/docs/guides/operations.mdx @@ -4,8 +4,8 @@ title: Operations --- ```mdx-code-block -import DocCardList from '@theme/DocCardList'; -import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; +{/* import DocCardList from '@theme/DocCardList'; */} +{/* import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; */} - +{/* */} ``` diff --git a/docs/hydra/reference/configuration.mdx b/docs/hydra/reference/configuration.mdx index 830085e894..a3f9143be5 100644 --- a/docs/hydra/reference/configuration.mdx +++ b/docs/hydra/reference/configuration.mdx @@ -1,6 +1,6 @@ --- id: configuration -title: Configuration +title: Configure Ory Hydra --- ```mdx-code-block diff --git a/docs/hydra/self-hosted/dependencies-environment.md b/docs/hydra/self-hosted/dependencies-environment.md index a3c2ff26e9..e885475d87 100644 --- a/docs/hydra/self-hosted/dependencies-environment.md +++ b/docs/hydra/self-hosted/dependencies-environment.md @@ -47,8 +47,7 @@ DSN=sqlite:///path/to/hydra.sqlite?_fk=true The `_fk=true` parameter is required for SQLite to enable foreign key constraints. -For additional DSN options including SSL/TLS configuration, see -[Deployment Fundamentals and Requirements](../../self-hosted/deployment). +For additional DSN options including SSL/TLS configuration, see [Deployment Fundamentals and Requirements](../../oss/deployment). ## Running migrations diff --git a/docs/hydra/self-hosted/deploy-hydra-example.mdx b/docs/hydra/self-hosted/deploy-hydra-example.mdx index 61ff4fa166..9f3fe2920e 100644 --- a/docs/hydra/self-hosted/deploy-hydra-example.mdx +++ b/docs/hydra/self-hosted/deploy-hydra-example.mdx @@ -8,8 +8,8 @@ import CodeBlock from "@theme/CodeBlock" This guide explains how to set up and run Ory Hydra in an exemplary production environment. It uses Postgres as database, Nginx as reverse proxy, and Digital Ocean as cloud provider. You can use another -[relational database](../../self-hosted/deployment#data-storage-and-persistence), a different reverse proxy, deploy on any other -cloud host, and [spin up a custom user interface in your favorite language](../sdk/overview) - this is just an example! +[relational database](/docs/oss/deployment#data-storage-and-persistence), a different reverse proxy, deploy on any other cloud +host, and [spin up a custom user interface in your favorite language](../sdk/overview) - this is just an example! ## Create a Droplet @@ -477,4 +477,4 @@ server { - Read the [Prepare for production](./production). - Fork the [Ory Hydra Node.js UI Reference](https://github.com/ory/hydra-login-consent-node) or [build a custom UI in the language of your choice](../sdk/01_overview.md). -- [Add Identity and Account Management](../../identities/index.mdx) +- [Add Identity and Account Management](/docs/oel/kratos/intro) diff --git a/docs/hydra/self-hosted/production.md b/docs/hydra/self-hosted/production.md index b13b3cf459..75679c7666 100644 --- a/docs/hydra/self-hosted/production.md +++ b/docs/hydra/self-hosted/production.md @@ -7,7 +7,7 @@ Read this document to prepare for production when self-hosting Ory Hydra. Feel free to [open an issue or pull request](https://github.com/ory/docs/) when you have an idea how to improve this documentation. -Read more about [deployment fundamentals and requirements for Ory](../../self-hosted/deployment). +Read more about [deployment fundamentals and requirements for Ory](../../oss/deployment). ## Security checklist diff --git a/docs/identities/index.mdx b/docs/identities/index.mdx index e92daeb0c6..0a061b3bcd 100644 --- a/docs/identities/index.mdx +++ b/docs/identities/index.mdx @@ -6,7 +6,7 @@ sidebar_label: Introduction Ory Kratos Identities is an API-first identity and user management system built on top of the widely deployed open-source [Ory Kratos](https://github.com/ory/kratos) following -[cloud architecture best practices](ecosystem/software-architecture-philosophy.mdx). It implements mechanisms that allow handling +[cloud architecture best practices](../oss/software-architecture-philosophy.mdx). It implements mechanisms that allow handling core use cases that the majority of modern software applications have to deal with: - **Self-service login and registration**: Allow end-users to create and sign in to accounts using username/email and password diff --git a/docs/intro.mdx b/docs/intro.mdx index da27479e11..8d1c9e102c 100644 --- a/docs/intro.mdx +++ b/docs/intro.mdx @@ -125,4 +125,4 @@ Ory is the largest open-source ecosystem in the area of authentication, authoriz in the world. Ory is not another company "greenwashing" with open source by publishing SDKs under open-source licenses. Instead, all Ory core systems are available as Apache 2.0 licensed software without enterprise or open-core models. -Head over to the [Ory Open Source Overview](./open-source.mdx) for an introduction to the different projects. +Head over to the [Ory Open Source Overview](./oss/open-source.mdx) for an introduction to the different projects. diff --git a/docs/keto/examples/olymp-file-sharing.mdx b/docs/keto/examples/olymp-file-sharing.mdx index 84c682e2c5..7472a91398 100644 --- a/docs/keto/examples/olymp-file-sharing.mdx +++ b/docs/keto/examples/olymp-file-sharing.mdx @@ -1,5 +1,7 @@ --- -title: "Basic: Olymp library" +id: file-sharing-example +title: "File sharing example" +sidebar_label: File sharing example --- ## A basic, down-to-earth full feature example diff --git a/docs/keto/guides/production.md b/docs/keto/guides/production.md index bd83ad878a..2bcae34d43 100644 --- a/docs/keto/guides/production.md +++ b/docs/keto/guides/production.md @@ -7,12 +7,12 @@ Read this document to prepare for production when self-hosting Ory Keto. Feel free to [open an issue or pull request](https://github.com/ory/docs/) when you have an idea how to improve this documentation. -Read more about [deployment fundamentals and requirements for Ory](../../self-hosted/deployment). +Read more about [deployment fundamentals and requirements for Ory](../../oss/deployment). ## Database Ory Keto requires a production-grade database such as PostgreSQL, MySQL, CockroachDB. Don't use SQLite in production! Read more -about [deployment fundamentals and requirements for Ory](../../self-hosted/deployment). +about [deployment fundamentals and requirements for Ory](../../oss/deployment). ## Security checklist diff --git a/docs/kratos/configuring.md b/docs/kratos/configuring.md index 1cfd26ae44..06434db11b 100644 --- a/docs/kratos/configuring.md +++ b/docs/kratos/configuring.md @@ -20,4 +20,4 @@ described in the following section. Environmental variables take precedence over config file values. Nested paths get mapped to config values by putting an underscore `_` between every level, so `selfservice.flows.settings.ui_url` becomes `SELFSERVICE_FLOWS_SETTINGS_UI_URL=`. -Please note that there are some caveats when using env vars [documented here](../ecosystem/configuring). +Please note that there are some caveats when using env vars [documented here](../oss/configuring). diff --git a/docs/kratos/guides/deploy-kratos-example.mdx b/docs/kratos/guides/deploy-kratos-example.mdx index 7d8ba67649..5b8ac11971 100644 --- a/docs/kratos/guides/deploy-kratos-example.mdx +++ b/docs/kratos/guides/deploy-kratos-example.mdx @@ -9,8 +9,8 @@ import CodeBlock from "@theme/CodeBlock" This guide explains how to set up and run Ory Kratos in an exemplary production environment. It uses Postgres as database, Nginx as reverse proxy, Digital Ocean as cloud provider, and the [Ory Kratos Node.js UI Reference](https://github.com/ory/kratos-selfservice-ui-node) as user interface. You can use another -[relational database](../../self-hosted/deployment#data-storage-and-persistence), a different reverse proxy, deploy on any other -cloud host, and [spin up a custom interface in your favorite language](../sdk/overview) - this is just an example! +[relational database](/docs/oss/deployment#data-storage-and-persistence), a different reverse proxy, deploy on any other cloud +host, and [spin up a custom interface in your favorite language](../sdk/overview) - this is just an example! ## Create a Droplet diff --git a/docs/kratos/guides/production.md b/docs/kratos/guides/production.md index 1724ad2317..5f3ac77edf 100644 --- a/docs/kratos/guides/production.md +++ b/docs/kratos/guides/production.md @@ -7,7 +7,7 @@ Read this document to prepare for production when self-hosting Ory Kratos. Feel free to [open an issue or pull request](https://github.com/ory/docs/) when you have an idea how to improve this documentation. -Read more about [deployment fundamentals and requirements for Ory](../../self-hosted/deployment). +Read more about [deployment fundamentals and requirements for Ory](../../oss/deployment). ## Database diff --git a/docs/kratos/manage-identities/25_import-user-accounts-identities.mdx b/docs/kratos/manage-identities/25_import-user-accounts-identities.mdx index 51cc55af58..8cfc006987 100644 --- a/docs/kratos/manage-identities/25_import-user-accounts-identities.mdx +++ b/docs/kratos/manage-identities/25_import-user-accounts-identities.mdx @@ -657,7 +657,7 @@ automatically link the email address with the social sign-in provider. However, process. For more details, refer to the -[automatic account linking documentation](../social-signin/95_account-linking.mdx#automatic-account-linking). +[automatic account linking documentation](../self-service/flows/account-recovery-password-reset.mdx). ### SAML connections diff --git a/docs/kratos/passwordless/06_passkeys-mobile.mdx b/docs/kratos/passwordless/06_passkeys-mobile.mdx index c12242d881..6e27aa1087 100644 --- a/docs/kratos/passwordless/06_passkeys-mobile.mdx +++ b/docs/kratos/passwordless/06_passkeys-mobile.mdx @@ -52,8 +52,8 @@ The script automatically: - Calls `navigator.credentials.get()` for authentication. - Submits the WebAuthn response back to Ory. -See [Custom UI Advanced Integration](../bring-your-own-ui/custom-ui-advanced-integration#passwordless-authentication.mdx) for -details on using `webauthn.js` in custom UIs. +See [Custom UI Advanced Integration](../bring-your-own-ui/custom-ui-advanced-integration#passwordless-authentication) for details +on using `webauthn.js` in custom UIs. ### Manual WebAuthn integration diff --git a/docs/migrate-to-ory/migrate/index.mdx b/docs/migrate-to-ory/migrate/index.mdx index 8203bfc3b6..5ec03eaa09 100644 --- a/docs/migrate-to-ory/migrate/index.mdx +++ b/docs/migrate-to-ory/migrate/index.mdx @@ -5,7 +5,7 @@ sidebar_label: Understand your current IAM system sidebar_position: 1 --- -# Understand your current IAM system +# Migrating to Ory — Understand your current IAM system Before you can migrate smoothly, you need a complete picture of how your identity management system works today. This step ensures nothing gets missed—from everyday login flows to rare edge cases—and sets the foundation for mapping existing functionality to Ory diff --git a/docs/network/getting-started/auth-overview.mdx b/docs/network/getting-started/auth-overview.mdx new file mode 100644 index 0000000000..50c1050615 --- /dev/null +++ b/docs/network/getting-started/auth-overview.mdx @@ -0,0 +1,7 @@ + + +import { AuthOverview } from "@site/src/components/Shared/AuthOverview" + +# Authentication in Ory Network + + diff --git a/docs/network/getting-started/index.mdx b/docs/network/getting-started/index.mdx new file mode 100644 index 0000000000..5d9e1ba653 --- /dev/null +++ b/docs/network/getting-started/index.mdx @@ -0,0 +1,125 @@ +--- +title: Introduction to Ory Network +--- + +Ory is a software infrastructure provider building a global zero-trust network for humans, robots, devices, and software services. +Ory develops open-source software on [GitHub](https://github.com/ory) and publishes open standards such as the +[Ory Permission Language](https://github.com/ory/keto/blob/master/docs/ory_permission_language_spec.md). +[The Ory Network](https://console.ory.sh/) uses cloud-native open-source technologies (Kubernetes, Crossplane, Cockroach, Linux, +Ory) and standards (OAuth 2.0/2.1, OpenID Connect, MITREid, WebAuthn, TOTP, FIDO3) to deliver a low-latency, planet-scale +zero-trust infrastructure. Ory combines centuries of open source, security, operational, and industry expertise with a +user-centric and security-first mindset. + +Core infrastructure components of [Ory Network](https://console.ory.sh) are open source to foster collaboration, reduce supply +chain risk, broaden access to secure services, and introduce the open standard for internet security. Being open source Ory +improves the safety of everyone: + +- Ory Identities offers a secure and modern central identity management solution with MFA, passwordless, WebAuthn, and more. It's + based on the open-source [Ory Kratos Identity Server](https://github.com/ory/kratos). +- Ory OAuth2 & OpenID Connect implements 15+ IETF and OpenID standards to facilitate single sign-on (SSO), delegation, and API + access authorization. It's based on the open-source [Ory Hydra Federation Server](https://github.com/ory/hydra). +- Ory Permissions is a low-latency, high-performance, relationship-based authorization system that enables fine-grained access + control (incl. RBAC and ABAC models) in any application. It's based on the open-source + [Ory Keto Permission Server](https://github.com/ory/keto), which implements + [Zanzibar: Google’s Consistent, Global Authorization System](https://research.google/pubs/pub48190/). + +Ory develops and maintains many additional open-source projects. From an Ory Zero Trust Identity & Access Proxy +[Ory Oathkeeper](https://github.com/ory/oathkeeper) to developer tooling [Ory Dockertest](https://github.com/ory/dockertest) to +language-specific libraries [Ory Ladon](https://github.com/ory/ladon). Ory has +[170+ open source repositories](https://github.com/orgs/ory/repositories) and over 35.000 GitHub stars. + +Ory secures billions of requests each month, runs in over 50,000 live deployments, and improves hourly. + +## Why Ory is different + +Ory differentiates from other vendors in the following key areas: + +- Ory core services and APIs are developed and licensed under Apache 2.0, allowing you to participate, collaborate, and understand + the inner workings of Ory. +- You can bring your UI, in the programming language of your choosing, with the user experience that you like. +- From designing Identity Schemas using JSON Schema, to webhooks, to advanced configuration options - Ory is the most customizable + platform out there. +- Ory spans the whole authentication and authorization universe with well-designed products and APIs: + - Identity Management with session management & flows for login, registration, recovery, verification, MFA, and more. + - Permission and Role Management. + - Delegation via OAuth2 and OpenID Connect. + - Zero Trust Networking. + - Modern API design with partial support for gRPC. + +## Ory Network + +The Ory Network is the commercial offering of Ory and is built on top of Ory Open Source software. The goal with Ory Network is to +offer a planet-scale, low-latency, resilient, and secure service that's easy to use and set up. + +In short: Ory Network is the most convenient way to run Ory. [Sign up](https://console.ory.sh/registration) and create a free +developer project. + +## Components + +Each project in Ory Network is an isolated tenant and uses many components providing functionality, user interfaces, and APIs +around identities, sessions, login, OAuth2, permissions, and more. The core components of projects in Ory Network are +[Ory Open Source servers](https://github.com/ory/). + +### Identities and sessions + +Ory Network incorporates the open-source [Ory Kratos Identity Server](https://www.ory.com/kratos) and offers: + +- Self-service flows are everything users do on their own / without the help of others: +- Registration with passwords, social sign-in, OpenID Connect, passkeys, and more. +- Login with passwords, social sign-in, OpenID Connect, passkeys, and more. +- Updating the profile, email, changing the password, un/linking with social sign-in providers, and more. +- Recovering the account by resetting the password. +- Verifying email addresses, phone numbers, and more. +- Multi-factor authentication flows and recovery processes. +- Administrative identity management to get, create, update, and delete identities and their data. +- Headless APIs and data models allow you to fully customize Identity Schemas - for example adding fields like name, accept ToS, + phone number - and create your login, registration, profile settings, recovery, and verification screen using SDKs and REST + APIs. +- SCIM support for automated user provisioning and deprovisioning with supported identity providers. + +### Permissions and relationships + +Ory Network incorporates the open-source [Ory Keto Permission Server](https://www.ory.com/keto) and offers: + +- Permission management to get, create, update, and delete permissions. +- Permission checking to check if a user has a permission. + +### OAuth2 and OIDC + +Ory Network incorporates the open-source [Ory Hydra OAuth2 & OpenID Server](https://www.ory.com/hydra) and offers: + +- Fully featured OAuth2 & [OpenID Certified](https://openid.net/developers/certified/)® OIDC Provider + +### SAML + +Ory Network incorporates the open-source [Ory Polis](https://www.ory.com/polis) and offers: + +- Enterprise SSO integration with SAML identity providers such as Okta, Azure AD, and Google Workspace. +- Simplified SSO flow by implementing SSO as a standard OAuth 2.0 flow, abstracting away the complexities of SAML. +- Act as a SAML Identity Provider (IdP). + +### Ory Console + +Ory Console is the management UI of Ory Network. + +### Ory Account Experience + +Ory Account Experience implements screens such as login, registration, account recovery, account setting, and account verification +for fast adoption of Ory. + +Ory allows you to implement your own authentication UI by offering simple, headless APIs. Use the open-source +[Ory Elements](https://github.com/ory/elements) components library for fast integration with frameworks like React and Next.js. + +### Ory Actions + +[Ory Actions](/docs/kratos/hooks/01_configure-hooks.mdx) provide a flexible way to extend the capabilities of the Ory Network by +defining custom business logic, automating system behavior in response to events, and integrating with third-party services such +as CRM platforms, payment gateways, business analytics tools, and integration platforms. + +## Ory Open Source + +Ory is the largest open-source ecosystem in the area of authentication, authorization, access control, and zero-trust networking +in the world. Ory is not another company "greenwashing" with open source by publishing SDKs under open-source licenses. Instead, +all Ory core systems are available as Apache 2.0 licensed software without enterprise or open-core models. + +Head over to the [Ory Open Source Overview](/docs/oss/open-source.mdx) for an introduction to the different projects. diff --git a/docs/network/hydra/index.mdx b/docs/network/hydra/index.mdx new file mode 100644 index 0000000000..c158c58a63 --- /dev/null +++ b/docs/network/hydra/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Hydra—Delegated AuthZ & Federated AuthN +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/index.mdx" + + diff --git a/docs/network/hydra/ory-network-oauth2.mdx b/docs/network/hydra/ory-network-oauth2.mdx new file mode 100644 index 0000000000..e646f6d020 --- /dev/null +++ b/docs/network/hydra/ory-network-oauth2.mdx @@ -0,0 +1,13 @@ +--- +id: ory-network-oauth2 +title: OAuth2 authorization code and client credentials grants +sidebar_label: OAuth2 grants +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/ory-network-oauth2.mdx" + + diff --git a/docs/network/hydra/quickstarts/index.mdx b/docs/network/hydra/quickstarts/index.mdx new file mode 100644 index 0000000000..c158c58a63 --- /dev/null +++ b/docs/network/hydra/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Hydra—Delegated AuthZ & Federated AuthN +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/index.mdx" + + diff --git a/docs/network/hydra/quickstarts/ory-network-oauth2.mdx b/docs/network/hydra/quickstarts/ory-network-oauth2.mdx new file mode 100644 index 0000000000..b06b490371 --- /dev/null +++ b/docs/network/hydra/quickstarts/ory-network-oauth2.mdx @@ -0,0 +1,13 @@ +--- +id: ory-network-oauth2 +title: OAuth2 authorization code and client credentials grants +sidebar_label: Get started +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/ory-network-oauth2.mdx" + + diff --git a/docs/network/keto/index.mdx b/docs/network/keto/index.mdx new file mode 100644 index 0000000000..fb8bff005f --- /dev/null +++ b/docs/network/keto/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Keto—Fine-grained Permissions +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/index.mdx" + + diff --git a/docs/network/keto/olymp-file-sharing.mdx b/docs/network/keto/olymp-file-sharing.mdx new file mode 100644 index 0000000000..e8ce71276e --- /dev/null +++ b/docs/network/keto/olymp-file-sharing.mdx @@ -0,0 +1,9 @@ +--- +id: file-sharing-example +title: "File sharing example" +sidebar_label: File sharing example +--- + +import MyPartial from "@site/src/components/Shared/keto/olymp-file-sharing.mdx" + + diff --git a/docs/network/keto/overview.mdx b/docs/network/keto/overview.mdx new file mode 100644 index 0000000000..c73911f0f0 --- /dev/null +++ b/docs/network/keto/overview.mdx @@ -0,0 +1,13 @@ +--- +id: overview +title: Get started with Ory Keto +sidebar_label: Get started +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/overview.mdx" + + diff --git a/docs/network/keto/quickstart.mdx b/docs/network/keto/quickstart.mdx new file mode 100644 index 0000000000..4701e6224e --- /dev/null +++ b/docs/network/keto/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Keto Quickstart +sidebar_label: Ory Keto Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/quickstart.mdx" + + diff --git a/docs/network/keto/quickstarts/index.mdx b/docs/network/keto/quickstarts/index.mdx new file mode 100644 index 0000000000..fb8bff005f --- /dev/null +++ b/docs/network/keto/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Keto—Fine-grained Permissions +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/index.mdx" + + diff --git a/docs/network/keto/quickstarts/olymp-file-sharing.mdx b/docs/network/keto/quickstarts/olymp-file-sharing.mdx new file mode 100644 index 0000000000..e8ce71276e --- /dev/null +++ b/docs/network/keto/quickstarts/olymp-file-sharing.mdx @@ -0,0 +1,9 @@ +--- +id: file-sharing-example +title: "File sharing example" +sidebar_label: File sharing example +--- + +import MyPartial from "@site/src/components/Shared/keto/olymp-file-sharing.mdx" + + diff --git a/docs/network/keto/quickstarts/overview.mdx b/docs/network/keto/quickstarts/overview.mdx new file mode 100644 index 0000000000..c73911f0f0 --- /dev/null +++ b/docs/network/keto/quickstarts/overview.mdx @@ -0,0 +1,13 @@ +--- +id: overview +title: Get started with Ory Keto +sidebar_label: Get started +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/overview.mdx" + + diff --git a/docs/network/keto/quickstarts/quickstart.mdx b/docs/network/keto/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..4701e6224e --- /dev/null +++ b/docs/network/keto/quickstarts/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Keto Quickstart +sidebar_label: Ory Keto Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/quickstart.mdx" + + diff --git a/docs/network/kratos/01_mfa-overview.mdx b/docs/network/kratos/01_mfa-overview.mdx new file mode 100644 index 0000000000..74ad20b84e --- /dev/null +++ b/docs/network/kratos/01_mfa-overview.mdx @@ -0,0 +1,15 @@ +--- +id: mfa-overview +title: Multi-factor authentication +sidebar_label: Multi-factor authentication +--- + + + + + +```mdx-code-block +import MyPartial from "@site/src/components/Shared/kratos/01_mfa-overview.mdx" + + +``` diff --git a/docs/network/kratos/01_overview.mdx b/docs/network/kratos/01_overview.mdx new file mode 100644 index 0000000000..764aab2d23 --- /dev/null +++ b/docs/network/kratos/01_overview.mdx @@ -0,0 +1,13 @@ +--- +id: identity-model +title: What is an identity in Ory? +sidebar_label: Identity management +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/01_overview.mdx" + + diff --git a/docs/network/kratos/intro.mdx b/docs/network/kratos/intro.mdx new file mode 100644 index 0000000000..f5b2a157e3 --- /dev/null +++ b/docs/network/kratos/intro.mdx @@ -0,0 +1,13 @@ +--- +id: intro +title: Introduction to Ory Kratos +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/index.mdx" + + diff --git a/docs/network/kratos/quickstarts/01_mfa-overview.mdx b/docs/network/kratos/quickstarts/01_mfa-overview.mdx new file mode 100644 index 0000000000..74ad20b84e --- /dev/null +++ b/docs/network/kratos/quickstarts/01_mfa-overview.mdx @@ -0,0 +1,15 @@ +--- +id: mfa-overview +title: Multi-factor authentication +sidebar_label: Multi-factor authentication +--- + + + + + +```mdx-code-block +import MyPartial from "@site/src/components/Shared/kratos/01_mfa-overview.mdx" + + +``` diff --git a/docs/network/kratos/quickstarts/01_overview.mdx b/docs/network/kratos/quickstarts/01_overview.mdx new file mode 100644 index 0000000000..764aab2d23 --- /dev/null +++ b/docs/network/kratos/quickstarts/01_overview.mdx @@ -0,0 +1,13 @@ +--- +id: identity-model +title: What is an identity in Ory? +sidebar_label: Identity management +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/01_overview.mdx" + + diff --git a/docs/network/kratos/quickstarts/intro.mdx b/docs/network/kratos/quickstarts/intro.mdx new file mode 100644 index 0000000000..d916e978e7 --- /dev/null +++ b/docs/network/kratos/quickstarts/intro.mdx @@ -0,0 +1,13 @@ +--- +id: intro +title: Introduction to Ory Kratos—Identity & AuthN +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/index.mdx" + + diff --git a/docs/network/oathkeeper/index.mdx b/docs/network/oathkeeper/index.mdx new file mode 100644 index 0000000000..eb3577e02d --- /dev/null +++ b/docs/network/oathkeeper/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Oathkeeper—Proxy-based Access Control +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/index.mdx" + + diff --git a/docs/network/oathkeeper/quickstarts/index.mdx b/docs/network/oathkeeper/quickstarts/index.mdx new file mode 100644 index 0000000000..eb3577e02d --- /dev/null +++ b/docs/network/oathkeeper/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Oathkeeper—Proxy-based Access Control +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/index.mdx" + + diff --git a/docs/network/polis/index.mdx b/docs/network/polis/index.mdx new file mode 100644 index 0000000000..1103d96a9e --- /dev/null +++ b/docs/network/polis/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Polis—Enterprise SSO AuthZ +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/index.mdx" + + diff --git a/docs/network/polis/quickstart.mdx b/docs/network/polis/quickstart.mdx new file mode 100644 index 0000000000..ec338b2cc4 --- /dev/null +++ b/docs/network/polis/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Polis Quickstart +sidebar_label: Ory Polis Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/quickstart.mdx" + + diff --git a/docs/network/polis/quickstarts/index.mdx b/docs/network/polis/quickstarts/index.mdx new file mode 100644 index 0000000000..1103d96a9e --- /dev/null +++ b/docs/network/polis/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Polis—Enterprise SSO AuthZ +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/index.mdx" + + diff --git a/docs/network/polis/quickstarts/quickstart.mdx b/docs/network/polis/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..ec338b2cc4 --- /dev/null +++ b/docs/network/polis/quickstarts/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Polis Quickstart +sidebar_label: Ory Polis Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/quickstart.mdx" + + diff --git a/docs/oel/getting-started/auth-overview.mdx b/docs/oel/getting-started/auth-overview.mdx new file mode 100644 index 0000000000..85d0b4cfdb --- /dev/null +++ b/docs/oel/getting-started/auth-overview.mdx @@ -0,0 +1,7 @@ + + +import { AuthOverview } from "@site/src/components/Shared/AuthOverview" + +# Authentication in Ory Enterprise License + + diff --git a/docs/oel/getting-started/index.mdx b/docs/oel/getting-started/index.mdx new file mode 100644 index 0000000000..8b4056f63e --- /dev/null +++ b/docs/oel/getting-started/index.mdx @@ -0,0 +1,67 @@ +--- +title: Introduction to Ory Enterprise License +--- + +The Ory Enterprise License (OEL) is a commercial license designed for businesses and organizations that rely on Ory's open-source +identity and access control software (Ory Hydra, Ory Kratos, Ory Keto, Ory Oathkeeper, and Ory Polis) in production and +mission-critical environments. It grants access to enterprise-grade features, dedicated support, and builds optimized for +stability, security, and scalability. + +:::info + +Interested in the Ory Enterprise License? +[Contact us to discuss your requirements.](https://www.ory.sh/contact) + +::: + +## When to use the Ory Enterprise License + +You should consider the Ory Enterprise License if your organization + +- operates Ory solutions in critical production environments where downtime is unacceptable. +- requires timely patches and updates for security vulnerabilities (CVEs) within specific timeframes. +- needs dedicated support from Ory's core engineering team with guaranteed response times (SLAs) for incident resolution. +- handles high-traffic volumes and large datasets (100GBs scale) requiring optimized database performance and zero-downtime + migrations. +- needs enterprise-specific functionalities not available in the open-source versions, such as the OAuth2 Resource Owner Password + Credentials (ROPC) grant in Ory Hydra or multi-tenancy/organizations features in Ory Kratos. +- requires advanced deployment patterns like multi-region for high availability, disaster recovery, and data domiciling. + +In contrast, open-source builds are well-suited for + +- individuals and researchers exploring Ory's capabilities. +- development and testing environments. +- deployments where occasional downtime for upgrades is acceptable and CVE patching is not required. + +## Benefits of Ory Enterprise License + +All Ory Enterprise builds share common advantages over their open-source counterparts: + +- Regular, up-to-date releases: Enterprise builds are released frequently and include the latest dependencies, addressing known + CVEs in Golang, third-party libraries, and other components. +- Dedicated support & SLAs: OEL holders receive dedicated support channels and are covered by Service Level Agreements (SLAs), + ensuring qualified responses within defined timeframes based on incident priority. +- Drop-in replacement: OEL is designed as direct replacements for open-source installations, requiring no special configuration or + complex migration paths from existing OSS setups. +- Unlocked Enterprise features: The OEL activates exclusive functionalities. Specific enterprise features for each Ory service are + detailed in their respective documentation sections. +- Zero-downtime migrations: Unlike open-source versions that require downtime during upgrades, enterprise builds support + zero-downtime migrations. +- Optimized CockroachDB integration: For deployments with large-scale databases and traffic patterns, an enhanced CockroachDB + integration is available. This provides not only zero-downtime upgrades but also zero-downtime schema migrations by leveraging + CockroachDB's Online schema changes feature. +- Multi-Region deployments: Enterprise builds, when used with CockroachDB, support multi-region deployments. This enables: + - Enhanced high-availability: Go beyond simple Availability Zone (AZ) failover with true multi-region resilience for superior + uptime and disaster recovery. + - Data domiciling: Comply with data privacy regulations like GDPR, CCPA, and others by keeping data in specific geographic + regions while maintaining a global, logical view of all data within a single database. + - Lower latency: Improve application performance for globally distributed users by locating data closer to them. +- Seamless operation: Running, configuring, and using enterprise builds follows the same familiar patterns as the open-source + versions. + +## Use cases + +The Ory Enterprise License is leveraged by organizations requiring robust and scalable identity infrastructure. For instance, +OpenAI utilizes the Ory Enterprise License with Ory Hydra Enterprise to manage authentication for its 400 million weekly active +users, ensuring reliability, massive scale, and uninterrupted service. Read more about +[OpenAI's use of Ory](https://www.ory.com/case-studies/openai). diff --git a/docs/oel/hydra/01_tracing.mdx b/docs/oel/hydra/01_tracing.mdx new file mode 100644 index 0000000000..a31bf7e2a2 --- /dev/null +++ b/docs/oel/hydra/01_tracing.mdx @@ -0,0 +1,9 @@ +--- +id: tracing +title: Distributed tracing +sidebar_label: Distributed tracing +--- + +import MyPartial from "@site/src/components/Shared/hydra/01_tracing.mdx" + + diff --git a/docs/oel/hydra/10_scalability.mdx b/docs/oel/hydra/10_scalability.mdx new file mode 100644 index 0000000000..d76326343e --- /dev/null +++ b/docs/oel/hydra/10_scalability.mdx @@ -0,0 +1,9 @@ +--- +id: scalability +title: Scalability +sidebar_label: Scalability +--- + +import MyPartial from "@site/src/components/Shared/kratos/10_scalability.mdx" + + diff --git a/docs/oel/hydra/index.mdx b/docs/oel/hydra/index.mdx new file mode 100644 index 0000000000..b2edc603b8 --- /dev/null +++ b/docs/oel/hydra/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Hydra +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/index.mdx" + + diff --git a/docs/oel/hydra/quickstart.mdx b/docs/oel/hydra/quickstart.mdx new file mode 100644 index 0000000000..8f79e8c14c --- /dev/null +++ b/docs/oel/hydra/quickstart.mdx @@ -0,0 +1,12 @@ +--- +id: quickstart +title: Ory Hydra (OAuth2) Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/quickstart.mdx" + + diff --git a/docs/oel/hydra/quickstarts/index.mdx b/docs/oel/hydra/quickstarts/index.mdx new file mode 100644 index 0000000000..b2edc603b8 --- /dev/null +++ b/docs/oel/hydra/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Hydra +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/index.mdx" + + diff --git a/docs/oel/hydra/quickstarts/quickstart.mdx b/docs/oel/hydra/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..8f79e8c14c --- /dev/null +++ b/docs/oel/hydra/quickstarts/quickstart.mdx @@ -0,0 +1,12 @@ +--- +id: quickstart +title: Ory Hydra (OAuth2) Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/quickstart.mdx" + + diff --git a/docs/oel/keto/index.mdx b/docs/oel/keto/index.mdx new file mode 100644 index 0000000000..110e138795 --- /dev/null +++ b/docs/oel/keto/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Keto +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/index.mdx" + + diff --git a/docs/oel/keto/overview.mdx b/docs/oel/keto/overview.mdx new file mode 100644 index 0000000000..c73911f0f0 --- /dev/null +++ b/docs/oel/keto/overview.mdx @@ -0,0 +1,13 @@ +--- +id: overview +title: Get started with Ory Keto +sidebar_label: Get started +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/overview.mdx" + + diff --git a/docs/oel/keto/quickstart.mdx b/docs/oel/keto/quickstart.mdx new file mode 100644 index 0000000000..4701e6224e --- /dev/null +++ b/docs/oel/keto/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Keto Quickstart +sidebar_label: Ory Keto Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/quickstart.mdx" + + diff --git a/docs/oel/keto/quickstarts/index.mdx b/docs/oel/keto/quickstarts/index.mdx new file mode 100644 index 0000000000..110e138795 --- /dev/null +++ b/docs/oel/keto/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Keto +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/index.mdx" + + diff --git a/docs/oel/keto/quickstarts/overview.mdx b/docs/oel/keto/quickstarts/overview.mdx new file mode 100644 index 0000000000..c73911f0f0 --- /dev/null +++ b/docs/oel/keto/quickstarts/overview.mdx @@ -0,0 +1,13 @@ +--- +id: overview +title: Get started with Ory Keto +sidebar_label: Get started +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/overview.mdx" + + diff --git a/docs/oel/keto/quickstarts/quickstart.mdx b/docs/oel/keto/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..4701e6224e --- /dev/null +++ b/docs/oel/keto/quickstarts/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Keto Quickstart +sidebar_label: Ory Keto Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/quickstart.mdx" + + diff --git a/docs/oel/kratos/01_mfa-overview.mdx b/docs/oel/kratos/01_mfa-overview.mdx new file mode 100644 index 0000000000..74ad20b84e --- /dev/null +++ b/docs/oel/kratos/01_mfa-overview.mdx @@ -0,0 +1,15 @@ +--- +id: mfa-overview +title: Multi-factor authentication +sidebar_label: Multi-factor authentication +--- + + + + + +```mdx-code-block +import MyPartial from "@site/src/components/Shared/kratos/01_mfa-overview.mdx" + + +``` diff --git a/docs/oel/kratos/01_overview.mdx b/docs/oel/kratos/01_overview.mdx new file mode 100644 index 0000000000..764aab2d23 --- /dev/null +++ b/docs/oel/kratos/01_overview.mdx @@ -0,0 +1,13 @@ +--- +id: identity-model +title: What is an identity in Ory? +sidebar_label: Identity management +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/01_overview.mdx" + + diff --git a/docs/oel/kratos/10_scalability.mdx b/docs/oel/kratos/10_scalability.mdx new file mode 100644 index 0000000000..d76326343e --- /dev/null +++ b/docs/oel/kratos/10_scalability.mdx @@ -0,0 +1,9 @@ +--- +id: scalability +title: Scalability +sidebar_label: Scalability +--- + +import MyPartial from "@site/src/components/Shared/kratos/10_scalability.mdx" + + diff --git a/docs/oel/kratos/intro.mdx b/docs/oel/kratos/intro.mdx new file mode 100644 index 0000000000..f5b2a157e3 --- /dev/null +++ b/docs/oel/kratos/intro.mdx @@ -0,0 +1,13 @@ +--- +id: intro +title: Introduction to Ory Kratos +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/index.mdx" + + diff --git a/docs/oel/kratos/quickstart.mdx b/docs/oel/kratos/quickstart.mdx new file mode 100644 index 0000000000..30ce27cebe --- /dev/null +++ b/docs/oel/kratos/quickstart.mdx @@ -0,0 +1,12 @@ +--- +id: quickstart +title: Ory Kratos Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/quickstart.mdx" + + diff --git a/docs/oel/kratos/quickstarts/01_mfa-overview.mdx b/docs/oel/kratos/quickstarts/01_mfa-overview.mdx new file mode 100644 index 0000000000..74ad20b84e --- /dev/null +++ b/docs/oel/kratos/quickstarts/01_mfa-overview.mdx @@ -0,0 +1,15 @@ +--- +id: mfa-overview +title: Multi-factor authentication +sidebar_label: Multi-factor authentication +--- + + + + + +```mdx-code-block +import MyPartial from "@site/src/components/Shared/kratos/01_mfa-overview.mdx" + + +``` diff --git a/docs/oel/kratos/quickstarts/01_overview.mdx b/docs/oel/kratos/quickstarts/01_overview.mdx new file mode 100644 index 0000000000..764aab2d23 --- /dev/null +++ b/docs/oel/kratos/quickstarts/01_overview.mdx @@ -0,0 +1,13 @@ +--- +id: identity-model +title: What is an identity in Ory? +sidebar_label: Identity management +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/01_overview.mdx" + + diff --git a/docs/oel/kratos/quickstarts/intro.mdx b/docs/oel/kratos/quickstarts/intro.mdx new file mode 100644 index 0000000000..f5b2a157e3 --- /dev/null +++ b/docs/oel/kratos/quickstarts/intro.mdx @@ -0,0 +1,13 @@ +--- +id: intro +title: Introduction to Ory Kratos +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/index.mdx" + + diff --git a/docs/oel/kratos/quickstarts/quickstart.mdx b/docs/oel/kratos/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..30ce27cebe --- /dev/null +++ b/docs/oel/kratos/quickstarts/quickstart.mdx @@ -0,0 +1,12 @@ +--- +id: quickstart +title: Ory Kratos Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/quickstart.mdx" + + diff --git a/docs/oel/oathkeeper/configure-deploy.mdx b/docs/oel/oathkeeper/configure-deploy.mdx new file mode 100644 index 0000000000..94a30e434e --- /dev/null +++ b/docs/oel/oathkeeper/configure-deploy.mdx @@ -0,0 +1,13 @@ +--- +id: configure-deploy +title: Configure and deploy +sidebar_label: Configure and deploy +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/configure-deploy.mdx" + + diff --git a/docs/oel/oathkeeper/index.mdx b/docs/oel/oathkeeper/index.mdx new file mode 100644 index 0000000000..9c49e19fe0 --- /dev/null +++ b/docs/oel/oathkeeper/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Oathkeeper +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/index.mdx" + + diff --git a/docs/oel/oathkeeper/quickstarts/configure-deploy.mdx b/docs/oel/oathkeeper/quickstarts/configure-deploy.mdx new file mode 100644 index 0000000000..94a30e434e --- /dev/null +++ b/docs/oel/oathkeeper/quickstarts/configure-deploy.mdx @@ -0,0 +1,13 @@ +--- +id: configure-deploy +title: Configure and deploy +sidebar_label: Configure and deploy +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/configure-deploy.mdx" + + diff --git a/docs/oel/oathkeeper/quickstarts/index.mdx b/docs/oel/oathkeeper/quickstarts/index.mdx new file mode 100644 index 0000000000..9c49e19fe0 --- /dev/null +++ b/docs/oel/oathkeeper/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Oathkeeper +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/index.mdx" + + diff --git a/docs/oel/polis/index.mdx b/docs/oel/polis/index.mdx new file mode 100644 index 0000000000..98cea59a8c --- /dev/null +++ b/docs/oel/polis/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Polis +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/index.mdx" + + diff --git a/docs/oel/polis/quickstart.mdx b/docs/oel/polis/quickstart.mdx new file mode 100644 index 0000000000..ec338b2cc4 --- /dev/null +++ b/docs/oel/polis/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Polis Quickstart +sidebar_label: Ory Polis Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/quickstart.mdx" + + diff --git a/docs/oel/polis/quickstarts/index.mdx b/docs/oel/polis/quickstarts/index.mdx new file mode 100644 index 0000000000..98cea59a8c --- /dev/null +++ b/docs/oel/polis/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Polis +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/index.mdx" + + diff --git a/docs/oel/polis/quickstarts/quickstart.mdx b/docs/oel/polis/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..ec338b2cc4 --- /dev/null +++ b/docs/oel/polis/quickstarts/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Polis Quickstart +sidebar_label: Ory Polis Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/quickstart.mdx" + + diff --git a/docs/ecosystem/changelog.mdx b/docs/oss/changelog.mdx similarity index 100% rename from docs/ecosystem/changelog.mdx rename to docs/oss/changelog.mdx diff --git a/docs/open-source/commitment.mdx b/docs/oss/commitment.mdx similarity index 98% rename from docs/open-source/commitment.mdx rename to docs/oss/commitment.mdx index 159cb1d5c5..8cec820c4f 100644 --- a/docs/open-source/commitment.mdx +++ b/docs/oss/commitment.mdx @@ -1,7 +1,7 @@ --- title: Ory is committed to open source id: commitment -sidebar_label: Commitment +sidebar_label: Commitment to open source --- Ory is fundamentally rooted in open source, its community dynamics, and development principles. Ory software is licensed under the diff --git a/docs/ecosystem/community.mdx b/docs/oss/community.mdx similarity index 100% rename from docs/ecosystem/community.mdx rename to docs/oss/community.mdx diff --git a/docs/ecosystem/configuring.mdx b/docs/oss/configuring.mdx similarity index 100% rename from docs/ecosystem/configuring.mdx rename to docs/oss/configuring.mdx diff --git a/docs/ecosystem/contributing.mdx b/docs/oss/contributing.mdx similarity index 100% rename from docs/ecosystem/contributing.mdx rename to docs/oss/contributing.mdx diff --git a/docs/oss/deployment.mdx b/docs/oss/deployment.mdx new file mode 100644 index 0000000000..6dd423524e --- /dev/null +++ b/docs/oss/deployment.mdx @@ -0,0 +1,8 @@ +--- +id: deployment +title: Database +--- + +import { DeploymentDatabase } from "@site/src/components/Shared/self-hosted/deployment" + + diff --git a/docs/oss/getting-started/auth-overview.mdx b/docs/oss/getting-started/auth-overview.mdx new file mode 100644 index 0000000000..dca07efae0 --- /dev/null +++ b/docs/oss/getting-started/auth-overview.mdx @@ -0,0 +1,7 @@ + + +import { AuthOverview } from "@site/src/components/Shared/AuthOverview" + +# Authentication in Ory Open Source + + diff --git a/docs/oss/getting-started/index.mdx b/docs/oss/getting-started/index.mdx new file mode 100644 index 0000000000..ac85e0302d --- /dev/null +++ b/docs/oss/getting-started/index.mdx @@ -0,0 +1,116 @@ +--- +title: Introduction to Ory Open Source +--- + +We provide an open source ecosystem of services with clear boundaries that solve authentication and authorization: + +- Ory Kratos is an identity management server. +- Ory Hydra is an OAuth 2.0 and OpenID Connect provider. +- Ory Oathkeeper is an Identity and Access Proxy. +- Ory Keto is an access control server. + +Each service works standalone but you can also combine them to get the full feature set. If you've never heard of an Identity & +Access Proxy before, or you want to learn more about the individual services and how they play together, stick with us through the +next paragraphs. + +Almost every application has the concept of users and permissions. An anonymous user, for example, is allowed to read blog posts +while certain authenticated users are allowed to write blog posts. While this is the basis for most applications out there, access +control becomes increasingly complex as an application grows. What started out with a user's username and password now shifted to +machine-2-machine interaction, third party developers accessing your user's data, and maybe even a micro service system +architecture. + +Our projects solve the simplest use case and give you the ability to instantly ready the system for more complex scenarios without +painful and slow upgrade processes. + +## Ory Kratos + +![Ory Kratos](https://raw.githubusercontent.com/ory/meta/master/static/logos/logo-kratos.svg) + +The identity management server Ory Kratos enables you to implement user management, login and registration in a secure and +straightforward way. Don't rewrite every aspect of identity management yourself. Ory Kratos implements all common flows such as +login and logout, account activation, mfa/2fa, profile and session management, user facing errors and account recovery methods. +Just spin up a docker image and write a simple UI for it in the language or framework of your choice. Don't worry about GDPR, +address verification or protecting your users data against common and frequently changing attack vectors. Ory Kratos applies +security standards established by experts (National Institute of Sciences NIST, Internet Engineering Task Force IETF, Microsoft +Research, Google Research, Troy Hunt, ..), so you can concentrate on building. You have custom requirements for your users +experience? No problem, implement your own custom flows without hassle. + +## Ory Hydra + +![Ory Hydra](https://raw.githubusercontent.com/ory/meta/master/static/logos/logo-hydra.svg) + +Ory Hydra enables you to become an OAuth 2.0 and OpenID Connect provider. If you're not writing a basic web app but something that +has to work on different devices, that has machine-2-machine interaction, or enables third-party developers to use your API (and +pay for it), then this is what you're looking for. Ory Hydra isn't identity management, though. Instead, it connects to your +existing identity management (for example the one from the paragraph above, or your MySQL+PHP login service, or your Federated +SAML SSO) and is capable of issuing, in a secure and OpenID Certified manner, access, refresh, and ID tokens. Of course, it's +shipped as a 5MB Docker Image with almost no configuration required. + +## Ory Oathkeeper + +![Ory Oathkeeper](https://raw.githubusercontent.com/ory/meta/master/static/logos/logo-oathkeeper.svg) + +Now that your users access your application through, for example, a React/Angular app and a REST api, you need a way to +authenticate the user and to check if they have the necessary permissions (we call this "access control" from now on). One way +would be, of course, to add these checks in your code. Another is to deploy the 5MB Ory Oathkeeper Docker Image, define access +rules for your API endpoints (for example OAuth 2.0 Access Token + certain set of permissions, a valid JSON Web Token, a valid +SAML assertion, ...) and put it - like a firewall - in front of your services. + +## Ory Keto + +![Ory Keto](https://raw.githubusercontent.com/ory/meta/master/static/logos/logo-keto.svg) + +You might start out with a simple permission system. You've got different roles: anonymous users (not logged in), authenticated +users (logged in), and administrators. At some point however, the system gets more complex. You want to distinguish permissions +based on the user's organization, the access time (think time lock in banking), or the billing plan he/she's on. Big cloud +providers such as Amazon Web Services or Google solve this using "Access Control Policies". These policies represent flexible +rules and allow you to express complex access control scenarios. You could, of course, write your own system or spend a bit of +time educating yourself about RBAC, ACL, ABAC, ACP - or (you probably already guessed it) - boot up the 5MB Ory Keto Docker Image. +Ory Keto is able to authenticate different types of credentials (for example OAuth 2.0 Access Tokens, SAML Assertions, JSON Web +Tokens, ...) and allows you to define advanced permission rules ("Access Control Policies"). And there's of course an endpoint +that tells you if a certain set of credentials (for example an OAuth 2.0 Access Token) is allowed to modify that blog post. + +## Ory Polis + +![Ory Polis](https://raw.githubusercontent.com/ory/meta/master/static/logos/logo-polis.svg) + +Ory Polis is your trusted solution for enterprise Single Sign-On (SSO) without the headaches of SAML and OIDC. If you're building +a multi-tenant SaaS platform and your B2B customers need to sign in with their corporate identity providers—like Entra ID, Okta or +Google Workspace - Ory Polis makes it simple. Instead of creating custom SSO flows for each customer and wrestling with complex +SAML configurations, you can deploy the Ory Polis Docker image and be ready in minutes. Ory Polis abstracts away the protocol +complexity by translating SAML into a standard OAuth 2.0 or OIDC flow, creating a seamless bridge between your application and +enterprise identity providers. It’s modular, supports your preferred database, and can be self-hosted for complete control over +data and privacy. Built for flexibility and scale, Ory Polis handles as many tenants and identity providers as your business +demands. If you're delivering enterprise-grade SaaS and need SSO that just works, Ory Polis is the missing link. + +## Ory Elements + +![Ory Elements](https://raw.githubusercontent.com/ory/meta/master/static/logos/logo-elements.svg) + +Ory Elements is a component library that allows you to build custom user interfaces for Ory self-service flows. It provides a set +of pre-built components that can be easily integrated into your application, enabling you to create a seamless user experience +while leveraging Ory's powerful authentication and identity management capabilities. Ory Elements is designed to work with Ory +Kratos' self-service flows, such as login, registration, settings, verification, and recovery, as well as the OAuth2 consent flow. +It allows you to customize the look and feel of your UI to match your brand and user experience requirements. You can use Ory +Elements to build a custom UI that fits your application's design and user experience. + +## Find Your Ory Stack + +Not sure which Ory products you need? Use our [Product Selector](/product-selector) to answer a few questions and discover the +right Ory products for your use case. + +## All of Ory Open Source + +```mdx-code-block +import { ProjectOverviewGraph } from "@site/src/pages/_assets/project-overview-graph" + + +``` + +If you were to use the full Ory Ecosystem, it would probably look something like this. Keep in mind that any component shown here +can be replaced or removed, depending on your use case. + +Now you know what this ecosystem has to offer you. To get some more information on the services, read the developer guide by +selecting the software of your choice from the navigation on the left! + +Contact us at [support@ory.com](mailto:support@ory.com) if you need consulting with your specific project. diff --git a/docs/oss/guidelines/e2e-integration-tests.mdx b/docs/oss/guidelines/e2e-integration-tests.mdx new file mode 100644 index 0000000000..cdef217614 --- /dev/null +++ b/docs/oss/guidelines/e2e-integration-tests.mdx @@ -0,0 +1,8 @@ +--- +id: e2e-integration-tests +title: End-to-end and integration tests +--- + +import { E2EIntegrationTests } from "@site/src/components/Shared/kratos/e2e-integration-tests" + + diff --git a/docs/open-source/guidelines/rest-api-guidelines.md b/docs/oss/guidelines/rest-api-guidelines.md similarity index 100% rename from docs/open-source/guidelines/rest-api-guidelines.md rename to docs/oss/guidelines/rest-api-guidelines.md diff --git a/docs/oss/hydra/01_tracing.mdx b/docs/oss/hydra/01_tracing.mdx new file mode 100644 index 0000000000..a31bf7e2a2 --- /dev/null +++ b/docs/oss/hydra/01_tracing.mdx @@ -0,0 +1,9 @@ +--- +id: tracing +title: Distributed tracing +sidebar_label: Distributed tracing +--- + +import MyPartial from "@site/src/components/Shared/hydra/01_tracing.mdx" + + diff --git a/docs/oss/hydra/index.mdx b/docs/oss/hydra/index.mdx new file mode 100644 index 0000000000..b2edc603b8 --- /dev/null +++ b/docs/oss/hydra/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Hydra +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/index.mdx" + + diff --git a/docs/oss/hydra/quickstart.mdx b/docs/oss/hydra/quickstart.mdx new file mode 100644 index 0000000000..8f79e8c14c --- /dev/null +++ b/docs/oss/hydra/quickstart.mdx @@ -0,0 +1,12 @@ +--- +id: quickstart +title: Ory Hydra (OAuth2) Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/quickstart.mdx" + + diff --git a/docs/oss/hydra/quickstarts/index.mdx b/docs/oss/hydra/quickstarts/index.mdx new file mode 100644 index 0000000000..b2edc603b8 --- /dev/null +++ b/docs/oss/hydra/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Hydra +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/index.mdx" + + diff --git a/docs/oss/hydra/quickstarts/quickstart.mdx b/docs/oss/hydra/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..8f79e8c14c --- /dev/null +++ b/docs/oss/hydra/quickstarts/quickstart.mdx @@ -0,0 +1,12 @@ +--- +id: quickstart +title: Ory Hydra (OAuth2) Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/hydra/quickstart.mdx" + + diff --git a/docs/oss/index.md b/docs/oss/index.md new file mode 100644 index 0000000000..ad78d74cc0 --- /dev/null +++ b/docs/oss/index.md @@ -0,0 +1,4 @@ +--- +title: Ory Open Source +hide_title: true +--- diff --git a/docs/oss/keto/index.mdx b/docs/oss/keto/index.mdx new file mode 100644 index 0000000000..110e138795 --- /dev/null +++ b/docs/oss/keto/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Keto +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/index.mdx" + + diff --git a/docs/oss/keto/overview.mdx b/docs/oss/keto/overview.mdx new file mode 100644 index 0000000000..c73911f0f0 --- /dev/null +++ b/docs/oss/keto/overview.mdx @@ -0,0 +1,13 @@ +--- +id: overview +title: Get started with Ory Keto +sidebar_label: Get started +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/overview.mdx" + + diff --git a/docs/oss/keto/quickstart.mdx b/docs/oss/keto/quickstart.mdx new file mode 100644 index 0000000000..4701e6224e --- /dev/null +++ b/docs/oss/keto/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Keto Quickstart +sidebar_label: Ory Keto Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/quickstart.mdx" + + diff --git a/docs/oss/keto/quickstarts/index.mdx b/docs/oss/keto/quickstarts/index.mdx new file mode 100644 index 0000000000..110e138795 --- /dev/null +++ b/docs/oss/keto/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Keto +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/index.mdx" + + diff --git a/docs/oss/keto/quickstarts/olymp-file-sharing.mdx b/docs/oss/keto/quickstarts/olymp-file-sharing.mdx new file mode 100644 index 0000000000..e8ce71276e --- /dev/null +++ b/docs/oss/keto/quickstarts/olymp-file-sharing.mdx @@ -0,0 +1,9 @@ +--- +id: file-sharing-example +title: "File sharing example" +sidebar_label: File sharing example +--- + +import MyPartial from "@site/src/components/Shared/keto/olymp-file-sharing.mdx" + + diff --git a/docs/oss/keto/quickstarts/quickstart.mdx b/docs/oss/keto/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..4701e6224e --- /dev/null +++ b/docs/oss/keto/quickstarts/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Keto Quickstart +sidebar_label: Ory Keto Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/keto/quickstart.mdx" + + diff --git a/docs/oss/kratos/01_mfa-overview.mdx b/docs/oss/kratos/01_mfa-overview.mdx new file mode 100644 index 0000000000..74ad20b84e --- /dev/null +++ b/docs/oss/kratos/01_mfa-overview.mdx @@ -0,0 +1,15 @@ +--- +id: mfa-overview +title: Multi-factor authentication +sidebar_label: Multi-factor authentication +--- + + + + + +```mdx-code-block +import MyPartial from "@site/src/components/Shared/kratos/01_mfa-overview.mdx" + + +``` diff --git a/docs/oss/kratos/01_overview.mdx b/docs/oss/kratos/01_overview.mdx new file mode 100644 index 0000000000..764aab2d23 --- /dev/null +++ b/docs/oss/kratos/01_overview.mdx @@ -0,0 +1,13 @@ +--- +id: identity-model +title: What is an identity in Ory? +sidebar_label: Identity management +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/01_overview.mdx" + + diff --git a/docs/oss/kratos/10_scalability.mdx b/docs/oss/kratos/10_scalability.mdx new file mode 100644 index 0000000000..d76326343e --- /dev/null +++ b/docs/oss/kratos/10_scalability.mdx @@ -0,0 +1,9 @@ +--- +id: scalability +title: Scalability +sidebar_label: Scalability +--- + +import MyPartial from "@site/src/components/Shared/kratos/10_scalability.mdx" + + diff --git a/docs/oss/kratos/intro.mdx b/docs/oss/kratos/intro.mdx new file mode 100644 index 0000000000..f5b2a157e3 --- /dev/null +++ b/docs/oss/kratos/intro.mdx @@ -0,0 +1,13 @@ +--- +id: intro +title: Introduction to Ory Kratos +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/index.mdx" + + diff --git a/docs/oss/kratos/quickstart.mdx b/docs/oss/kratos/quickstart.mdx new file mode 100644 index 0000000000..30ce27cebe --- /dev/null +++ b/docs/oss/kratos/quickstart.mdx @@ -0,0 +1,12 @@ +--- +id: quickstart +title: Ory Kratos Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/quickstart.mdx" + + diff --git a/docs/oss/kratos/quickstarts/01_mfa-overview.mdx b/docs/oss/kratos/quickstarts/01_mfa-overview.mdx new file mode 100644 index 0000000000..74ad20b84e --- /dev/null +++ b/docs/oss/kratos/quickstarts/01_mfa-overview.mdx @@ -0,0 +1,15 @@ +--- +id: mfa-overview +title: Multi-factor authentication +sidebar_label: Multi-factor authentication +--- + + + + + +```mdx-code-block +import MyPartial from "@site/src/components/Shared/kratos/01_mfa-overview.mdx" + + +``` diff --git a/docs/oss/kratos/quickstarts/01_overview.mdx b/docs/oss/kratos/quickstarts/01_overview.mdx new file mode 100644 index 0000000000..764aab2d23 --- /dev/null +++ b/docs/oss/kratos/quickstarts/01_overview.mdx @@ -0,0 +1,13 @@ +--- +id: identity-model +title: What is an identity in Ory? +sidebar_label: Identity management +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/01_overview.mdx" + + diff --git a/docs/oss/kratos/quickstarts/intro.mdx b/docs/oss/kratos/quickstarts/intro.mdx new file mode 100644 index 0000000000..f5b2a157e3 --- /dev/null +++ b/docs/oss/kratos/quickstarts/intro.mdx @@ -0,0 +1,13 @@ +--- +id: intro +title: Introduction to Ory Kratos +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/kratos/index.mdx" + + diff --git a/docs/oss/kratos/quickstarts/quickstart.mdx b/docs/oss/kratos/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..cedb34e8dd --- /dev/null +++ b/docs/oss/kratos/quickstarts/quickstart.mdx @@ -0,0 +1,8 @@ +--- +id: quickstart +title: Ory Kratos Quickstart +--- + +import MyPartial from "@site/src/components/Shared/kratos/quickstart.mdx" + + diff --git a/docs/oss/oathkeeper/configure-deploy.mdx b/docs/oss/oathkeeper/configure-deploy.mdx new file mode 100644 index 0000000000..94a30e434e --- /dev/null +++ b/docs/oss/oathkeeper/configure-deploy.mdx @@ -0,0 +1,13 @@ +--- +id: configure-deploy +title: Configure and deploy +sidebar_label: Configure and deploy +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/configure-deploy.mdx" + + diff --git a/docs/oss/oathkeeper/index.mdx b/docs/oss/oathkeeper/index.mdx new file mode 100644 index 0000000000..9c49e19fe0 --- /dev/null +++ b/docs/oss/oathkeeper/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Oathkeeper +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/index.mdx" + + diff --git a/docs/oss/oathkeeper/quickstarts/configure-deploy.mdx b/docs/oss/oathkeeper/quickstarts/configure-deploy.mdx new file mode 100644 index 0000000000..94a30e434e --- /dev/null +++ b/docs/oss/oathkeeper/quickstarts/configure-deploy.mdx @@ -0,0 +1,13 @@ +--- +id: configure-deploy +title: Configure and deploy +sidebar_label: Configure and deploy +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/configure-deploy.mdx" + + diff --git a/docs/oss/oathkeeper/quickstarts/index.mdx b/docs/oss/oathkeeper/quickstarts/index.mdx new file mode 100644 index 0000000000..9c49e19fe0 --- /dev/null +++ b/docs/oss/oathkeeper/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Oathkeeper +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/oathkeeper/index.mdx" + + diff --git a/docs/open-source.mdx b/docs/oss/open-source.mdx similarity index 91% rename from docs/open-source.mdx rename to docs/oss/open-source.mdx index d549209b80..9d44678e8b 100644 --- a/docs/open-source.mdx +++ b/docs/oss/open-source.mdx @@ -1,7 +1,7 @@ --- id: open-source title: Ory is open source -sidebar_label: Projects +sidebar_label: Ory projects --- This document provides an overview of the most popular Ory open-source projects, and other related resources. @@ -10,7 +10,7 @@ Ory has an open-source architecture, attitude, and heart. We believe in collabor ideas. Open source is a fundamental part of modern software development and allows everyone regardless of economic background to build a better world with software. -Most of what Ory does is open source. Read more about [Ory's commitment to open source](./open-source/commitment.mdx). +Most of what Ory does is open source. Read more about [Ory's commitment to open source](/docs/oss/commitment). ## Projects @@ -27,7 +27,7 @@ You can find all of our open-source projects on GitHub: | Project | Description | Documentation | | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -| [Ory SDK](https://github.com/ory/sdk) | Software development kit for all popular programming languages, generated using openapi-generator. | [SDK docs](./sdk) | +| [Ory SDK](https://github.com/ory/sdk) | Software development kit for all popular programming languages, generated using openapi-generator. | [SDK docs](/docs/sdk) | | [Ory Dockertest](https://github.com/ory/dockertest) | Dockertest helps you boot up docker images for your Go tests with minimal work. | [Dockertest godoc](https://godoc.org/github.com/ory/dockertest) | | [Ory Kubernetes Helm Charts](https://github.com/ory/k8s) | Kubernetes Helm Charts for the Ory ecosystem. | [k8s.ory.com](https://k8s.ory.com/helm/) | | [Ory Fosite](https://github.com/ory/fosite) | Extensible OAuth 2.0 and OpenID Connect SDK for Go. | [Fosite godoc](https://godoc.org/github.com/ory/fosite) | @@ -40,10 +40,10 @@ For many more visit [Ory on GitHub](https://github.com/ory). ## Open source resources -- [Contribute to Ory](./ecosystem/contributing.mdx) -- [Ory is committed to open source](./open-source/commitment.mdx) -- [Ory architecture principles](./ecosystem/software-architecture-philosophy.mdx) -- [Community resources in the Ory documentation](./ecosystem/community.mdx) +- [Contribute to Ory](/docs/oss/contributing) +- [Ory is committed to open source](/docs/oss/commitment) +- [Ory architecture principles](/docs/oss/software-architecture-philosophy) +- [Community resources in the Ory documentation](/docs/oss/community) - [Ory Community Chat](https://slack.ory.com/) - [GitHub discussions](https://github.com/discussions?discussions_q=org%3Aory) - [Ory Community Examples](https://github.com/ory/examples) diff --git a/docs/oss/polis/index.mdx b/docs/oss/polis/index.mdx new file mode 100644 index 0000000000..98cea59a8c --- /dev/null +++ b/docs/oss/polis/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Polis +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/index.mdx" + + diff --git a/docs/oss/polis/quickstart.mdx b/docs/oss/polis/quickstart.mdx new file mode 100644 index 0000000000..ec338b2cc4 --- /dev/null +++ b/docs/oss/polis/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Polis Quickstart +sidebar_label: Ory Polis Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/quickstart.mdx" + + diff --git a/docs/oss/polis/quickstarts/index.mdx b/docs/oss/polis/quickstarts/index.mdx new file mode 100644 index 0000000000..98cea59a8c --- /dev/null +++ b/docs/oss/polis/quickstarts/index.mdx @@ -0,0 +1,13 @@ +--- +id: index +title: Introduction to Ory Polis +sidebar_label: Introduction +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/index.mdx" + + diff --git a/docs/oss/polis/quickstarts/quickstart.mdx b/docs/oss/polis/quickstarts/quickstart.mdx new file mode 100644 index 0000000000..ec338b2cc4 --- /dev/null +++ b/docs/oss/polis/quickstarts/quickstart.mdx @@ -0,0 +1,13 @@ +--- +id: quickstart +title: Ory Polis Quickstart +sidebar_label: Ory Polis Quickstart +--- + + + + + +import MyPartial from "@site/src/components/Shared/polis/quickstart.mdx" + + diff --git a/docs/ecosystem/projects.mdx b/docs/oss/projects.mdx similarity index 97% rename from docs/ecosystem/projects.mdx rename to docs/oss/projects.mdx index fe37c46cea..366c41b2ea 100644 --- a/docs/ecosystem/projects.mdx +++ b/docs/oss/projects.mdx @@ -1,5 +1,5 @@ --- -id: projects +id: projects-old title: Introduction --- @@ -95,6 +95,11 @@ Kratos' self-service flows, such as login, registration, settings, verification, It allows you to customize the look and feel of your UI to match your brand and user experience requirements. You can use Ory Elements to build a custom UI that fits your application's design and user experience. +## Find Your Ory Stack + +Not sure which Ory products you need? Use our [Product Selector](/product-selector) to answer a few questions and discover the +right Ory products for your use case. + ## All of Ory Open Source ```mdx-code-block diff --git a/docs/ecosystem/software-architecture-philosophy.mdx b/docs/oss/software-architecture-philosophy.mdx similarity index 100% rename from docs/ecosystem/software-architecture-philosophy.mdx rename to docs/oss/software-architecture-philosophy.mdx diff --git a/docs/ecosystem/sqa.mdx b/docs/oss/telemetry.mdx similarity index 96% rename from docs/ecosystem/sqa.mdx rename to docs/oss/telemetry.mdx index edda5c2a5a..bf0da68d2f 100644 --- a/docs/ecosystem/sqa.mdx +++ b/docs/oss/telemetry.mdx @@ -1,8 +1,11 @@ --- -id: sqa -title: Software quality assurance +id: telemetry +title: Product telemetry and privacy --- +To continuously improve reliability and performance, Ory collects a limited set of fully anonymized product telemetry. This page +documents the data collected, its purpose, and the privacy protections applied. + Our goal is to provide you with the fastest and most reliable open source services. To achieve this goal, we collect metrics on endpoint performance and send a **fully anonymized** telemetry report ("anonymous usage statistics") to our servers. This data helps us understand how changes impact performance and stability of our open source service and identify potential issues. diff --git a/docs/ecosystem/upgrading.mdx b/docs/oss/upgrading.mdx similarity index 100% rename from docs/ecosystem/upgrading.mdx rename to docs/oss/upgrading.mdx diff --git a/docs/product-eco.mdx b/docs/product-eco.mdx new file mode 100644 index 0000000000..bcf9ca2770 --- /dev/null +++ b/docs/product-eco.mdx @@ -0,0 +1,10 @@ +--- +id: product-eco +title: Ory products +sidebar_label: Product options +#displayed_sidebar: sidebars-ciam +--- + +import Link from "@docusaurus/Link" + +Learn which products suit your business needs! diff --git a/docs/products/_static/kratos-hydra-keto.svg b/docs/products/_static/kratos-hydra-keto.svg new file mode 100644 index 0000000000..ddc06ea822 --- /dev/null +++ b/docs/products/_static/kratos-hydra-keto.svg @@ -0,0 +1,3 @@ + + +
Ory Keto
Ory Keto
Permissions
Permissions
Your App/Backend 1
Your App/Backend 1
User
User
Ory Kratos
Ory Kratos
Identity & AuthN
Identity & AuthN
Ory Hydra
Ory Hydra
OAuth2/ODIC
OAuth2/ODIC
Your App/Backend 2
Your App/Backend 2
3rd Party App
3rd Party App
\ No newline at end of file diff --git a/docs/products/_static/kratos-hydra.svg b/docs/products/_static/kratos-hydra.svg new file mode 100644 index 0000000000..a5da1c4d20 --- /dev/null +++ b/docs/products/_static/kratos-hydra.svg @@ -0,0 +1,3 @@ + + +
Your App/Backend 1
Your App/Backend 1
User
User
Ory Kratos
Ory Kratos
Identity & AuthN
Identity & AuthN
Ory Hydra
Ory Hydra
OAuth2/ODIC
OAuth2/ODIC
Your App/Backend 2
Your App/Backend 2
3rd Party App
3rd Party App
\ No newline at end of file diff --git a/docs/products/_static/kratos-keto.svg b/docs/products/_static/kratos-keto.svg new file mode 100644 index 0000000000..3f4c7ac154 --- /dev/null +++ b/docs/products/_static/kratos-keto.svg @@ -0,0 +1,3 @@ + + +
Your App/Backend
Your App/Backend
User
User
Ory Kratos
Ory Kratos
Identity & AuthN
Identity & AuthN
Ory Keto
Ory Keto
Permissions
Permissions
\ No newline at end of file diff --git a/docs/products/_static/kratos-polis-keto.svg b/docs/products/_static/kratos-polis-keto.svg new file mode 100644 index 0000000000..2cddff85e8 --- /dev/null +++ b/docs/products/_static/kratos-polis-keto.svg @@ -0,0 +1,3 @@ + + +
Your App/Backend
Your App/Backend
User
User
Ory Polis
Ory Polis
SAML/ODIC
Enterprise SSO
SAML/ODIC...
3rd party IdP
3rd party IdP
Ory Kratos
Ory Kratos
Identity & AuthN
Identity & AuthN
Ory Keto
Ory Keto
Permissions
Permissions
SAML 
protocol
SAML...
ODIC 
protocol
ODIC...
ODIC 
protocol
ODIC...
SAML-based
SAML-based
ODIC-based
ODIC-based
\ No newline at end of file diff --git a/docs/products/_static/ory-eco-arch-2000.png b/docs/products/_static/ory-eco-arch-2000.png new file mode 100644 index 0000000000..824b9a8745 Binary files /dev/null and b/docs/products/_static/ory-eco-arch-2000.png differ diff --git a/docs/products/_static/ory-eco-arch.png b/docs/products/_static/ory-eco-arch.png new file mode 100644 index 0000000000..9101d39f13 Binary files /dev/null and b/docs/products/_static/ory-eco-arch.png differ diff --git a/docs/products/_static/ory-fullstack.svg b/docs/products/_static/ory-fullstack.svg new file mode 100644 index 0000000000..7e72710351 --- /dev/null +++ b/docs/products/_static/ory-fullstack.svg @@ -0,0 +1,3 @@ + + +
Your App/API
Backend services
Your App/API...
Ory Keto
Ory Keto
Permissions
Permissions
Ory Oathkeeper
Ory Oathkeeper
API Gateway
API Gateway
Ory Hydra
Ory Hydra
OAuth2/ODIC
OAuth2/ODIC
User/Client
Browser, SPA, mobile
User/Client...
Corporate IdP
SAML, AD, etc
Corporate IdP...
allow / deny
allow / deny
token
token
SAML
SAML
session
session
Ory Kratos
Ory Kratos
Identity & AuthN
Identity & AuthN
Ory Polis
Ory Polis
Enterprise SSO
Enterprise SSO
SSO
SSO
assertion
assertion
identity
identi...
2
2
1
1
3
3
4
4
5
5
6
6
\ No newline at end of file diff --git a/docs/products/_static/oryeco-diagram4.png b/docs/products/_static/oryeco-diagram4.png new file mode 100644 index 0000000000..c3d265e672 Binary files /dev/null and b/docs/products/_static/oryeco-diagram4.png differ diff --git a/docs/products/_static/polis-only.svg b/docs/products/_static/polis-only.svg new file mode 100644 index 0000000000..11f0be0511 --- /dev/null +++ b/docs/products/_static/polis-only.svg @@ -0,0 +1,3 @@ + + +
Your App/Backend
Your App/Backend
User
User
Ory Polis
Ory Polis
SAML/ODIC
Enterprise SSO
SAML/ODIC...
3rd party IdP
3rd party IdP
3rd party IdP
3rd party IdP
ODIC-based
ODIC-based
SAML-based
SAML-based
SAML-based
SAML-based
ODIC 
protocol
ODIC...
SAML 
protocol
SAML...
SAML 
protocol
SAML...
\ No newline at end of file diff --git a/docs/products/overview.mdx b/docs/products/overview.mdx new file mode 100644 index 0000000000..902d9962aa --- /dev/null +++ b/docs/products/overview.mdx @@ -0,0 +1,205 @@ +--- +id: products-overview +title: Ory products, ecosystem, and architecture +--- + +import Link from "@docusaurus/Link" +import WelcomePageSection from "@site/src/components/Welcome/welcome" +import * as welcomeContent from "@site/src/pages/_assets/welcome-content" + +Ory's identity and access management platform is modular; each product handles a specific capability, and you combine them based +on what your system needs. This section walks you through choosing the right deployment option for your system, understanding what +each Ory product does, and seeing how products combine into solutions that address real-world authentication and authorization +requirements. + +## Which deployment option? + +The right option depends on your organization’s goals and how much control you want over your infrastructure. If you need to +maintain full control, meet strict compliance requirements, or operate at massive scale, Ory Enterprise License (OEL) is the best +fit. For teams that want zero infrastructure management and seamless scaling, Ory Network provides a fully managed platform. And +if you’re exploring, testing, or building prototypes, start with Ory Open Source or the Ory Network free tier. All Ory deployment +options share the same open standards and APIs, so you can move between them without rewriting your code. + + + +## Which Ory product? + +Each Ory deployment option, provides everything you need to build a modern identity and access management system. Ory doesn't +treat IAM as one monolithic system, we approach is as a set of layered responsibilities. Here’s how Ory maps core IAM concepts to +our products, each acting as a composable building block. + +NOTE: Product names, features, and capabilities may vary between deployment options. The product descriptions below apply +generally across all deployments. + +### The Ory ecosystem + +![Ory Ecosystem architecture](./_static/ory-eco-arch-2000.png) + +### Match your IAM challenge to an Ory product + +Choose Ory products based on the specific identity, authorization, or access control challenge you’re solving. + +| **IAM Concept / Layer** | **Core IAM Question** | **Ory Product — What it does and how** | +| ----------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Identity Management & Authentication | Who is the user and how do they sign in? | **Ory Kratos** Manages user identities and handles direct authentication flows such as login, registration, account recovery, MFA-ready flows, and session management (cookies/jwt). | +| Fine-grained Authorization & Permissions | Can this user perform this action on this specific resource? | **Ory Keto** Provides relationship-based, fine-grained authorization for application-level permissions, such as access to documents, projects, or business objects. | +| Delegated, Scope-based Authorization & Token Issuance | Which application can act on behalf of a user, and with what level of access? | **Ory Hydra** Implements OAuth2 and OpenID Connect to issue access and ID tokens with scopes. Delegates user login to Kratos or another IdP, enabling SSO and API access across apps and services. | +| Enterprise Federation & Single Sign-On (SSO) | How can enterprise customers sign in with their corporate identity provider? | **Ory Polis** Provides enterprise SSO by connecting apps to SAML and OIDC identity providers. Bridges legacy SAML into modern OAuth2 flows and supports SCIM directory sync for automated user and group provisioning. | +| Proxy Access Control (Enforcement) | Should this request be allowed to reach the API right now? | **Ory Oathkeeper** Acts as a proxy-based enforcement layer in front of APIs and services, validating credentials and applying authorization decisions before traffic reaches your application. | + +## From products to solutions + +Each Ory product solves a specific IAM challenge, but most real-world implementations combine several. Below are common product +combinations that demonstrate Ory's modular approach to building IAM solutions. These are example combinations and do not +represent all possibile scenerios. + +
+ + **Authentication & access control for your applications (Kratos & Keto)** + +Users register and sign in through Kratos, while Keto controls what they can see and do based on roles, relationships, or custom +rules. Use this combination when your application needs both identity management and fine-grained permissions. + +![Ory Kratos](./_static/kratos-keto.svg) + +1. User attempts to access client app; client app requests a login flow from Ory Kratos. +2. Ory Kratos returns a login flow ID. +3. User submits credentials; client app forwards credentials with flow ID to Ory Kratos. +4. Ory Kratos authenticates and returns a session cookie/token. +5. Client app attaches session cookie/token to subsequent requests. +6. Backend verifies session with Ory Kratos (gets user identity). +7. User creates a protected document; backend grants the user access to this document and writes permission to Ory Keto. +8. User attempts to access a previously protected document; backend requests permission look up in Ory Keto; Ory Keto verifies if + the user has permission to access the document and sends a response to allow or deny. + +
+ +
+ +**Authentication & delegated access across apps and services (Kratos & Hydra)** + +Users authenticate through Kratos, and Hydra issues standards-based OAuth2/OIDC tokens that enable single sign-on and let +applications act on users' behalf with scoped access. Use this combination when you need a shared identity across multiple apps, +third-party integrations, or API access. + +![Ory Kratos](./_static/kratos-hydra.svg) + +1. User attempts to access client app; client app requests an standards-based OAuth2 authorization code flow by redirecting the + request to Ory Hydra. +2. Ory Hydra redirects to Ory Kratos for user authentication. +3. Ory Kratos authenticates the user (login and/or MFA). On success, Ory Kratos notifies Ory Hydra. +4. Ory Hydra presents a consent screen; user approves requested scopes/permissions. +5. Ory Hydra issues an standards-based OAuth2 authorization code to the client app. +6. The client app exchanges the standards-based OAuth2 authorization code with Ory Hydra for tokens (access, refresh, ID tokens). +7. The client sends the access token on requests to your backend/API (resource server). +8. The backend validates the access token with Ory Hydra (via introspection or JWT validation). Ory Hydra detects the 'openid' + scope was requested and granted, and responds with an ID token in addition to the access token. Scopes in token govern what is + allowed. +9. User attempts to access a different client app; subsequent apps reuse the existing session and go straight to consent (unless + explicitly forced to re-authenticate). +10. User creates a protected document; backend grants the user access to this document and writes permission to Ory Keto. +11. User attempts to access a previously protected document; backend requests permission look up in Ory Keto; Ory Keto verifies if + the user has permission to access the document and sends a response to allow or deny. + +
+ +
+ +**Authentication, SSO, & fine-grained access control (Kratos, Hydra & Keto)** + +Combines user authentication, token-based SSO and delegated access, and granular permission checks into a single stack. Use this +combination when your system needs to manage who users are, which apps can act for them, and exactly what they're allowed to do. + +![Ory Kratos](./_static/kratos-hydra-keto.svg) + +1. User attempts to access client app; client app requests a standards-based OAuth2 authorization code flow by redirecting the + request to Ory Hydra. +2. Ory Hydra redirects to Ory Kratos for user authentication. +3. Ory Kratos authenticates the user (login and/or MFA). On success, Ory Kratos notifies Ory Hydra. +4. Ory Hydra presents a consent screen; user approves requested scopes/permissions. +5. Ory Hydra issues a standards-based OAuth2 authorization code to the client app. +6. The client app exchanges the standards-based OAuth2 authorization code with Ory Hydra for standard-based OIDC tokens (access, + refresh, ID tokens). +7. The client sends the access token on requests to your backend/API (resource server). +8. The backend validates the access token with Ory Hydra (via introspection or JWT validation). Ory Hydra detects the 'openid' + scope was requested and granted, and responds with an ID token in addition to the access token. Scopes in token govern what is + allowed. +9. Backend checks permissions with Ory Keto; Ory Keto returns an authorization decision (allow/deny). +10. The backend proceeds or blocks the request based on Keto's answer. +11. User attempts to access a different client app; subsequent apps reuse the existing session and go straight to consent (unless + explicitly forced to re-authenticate). + +
+ +
+ +**Enterprise SSO with external identity federation (Polis)** + +Ory Polis manages the federation and communication between the client app and the third-party identity provider. The client app +handles session management and user lifecycle. Use this combination when you need Enterprise-level external federated +authentication and you have to bridge legacy SAML-based client app with modern OIDC-base IdPs. + +![Ory Kratos](./_static/polis-only.svg) + +1. User attempts to access client app; the client app sends a OIDC request to Ory Polis. +2. Ory Polis allows the user to choose their IdP and redirects to the selected (SAML-based) IdP for authentication. +3. After successful authentication, Ory Polis processes the (SAML-based response) from the IdP and creates a new OIDC response to + send back to the client app. + +
+ +
+ +**Authentication, external identity federation, & fine-grained access control (Kratos, Polis, & Keto)** + +Users authenticate through Kratos or a federated external IdP via Polis, and Keto enforces what they can access. Use this +combination when you need both internal identity management and external federation with granular permissions. + +![Ory Kratos](./_static/kratos-polis-keto.svg) + +1. User attempts to access client app; the client app requests a login flow from Ory Kratos. +2. Ory Kratos returns a login flow ID. +3. User submits credentials; client app forwards credentials with flow ID to Ory Kratos. +4. Ory Kratos determines whether to handle the authenication or forward request to 3rd party IdP: + +- In the case where Ory Kratos authenticates: + + a. Ory Kratos authenticates and returns a session cookie/token. + + b. Client app attaches session cookie/token to subsequent requests. + +- In the case where Ory Kratos forwards request to 3rd party IdP. + + a. Ory Kratos redirects to Ory Polis, which in turn redirects to the 3rd party IdP. + + b. After successful authentication, Ory Polis processes the response from the IdP and creates a new response to send back to Ory + Kratos, which manages the local identity/session. + + c. Ory Kratos sends a response back to the client app with session cookie/token. + + d. Client app attaches session cookie/token to subsequent requests. + +5. User attempts to access a previously protected document; backend requests permission look up in Ory Keto. +6. Ory Keto verifies if the user has permission to access the document and sends a response to allow or deny. + +
+ +
+ +**Ory's full IAM stack (Kratos, Hydra, Keto, Polis, & Oathkeeper)** + +The complete Ory ecosystem covers authentication, token issuance, fine-grained permissions, external identity federation, and +request-level enforcement at the network edge. Use this when you need end-to-end identity and access management for users, apps, +APIs, and machine-to-machine contexts. This example continues from the "Authentication & delegated access across apps and services +(Kratos & Hydra)" example, and presumes the user is already authenticated. + +![Ory Kratos](./_static/ory-fullstack.svg) + +1. User access request hits Ory Oathkeeper. +2. If the user is already authenticated and the request contains a cookie, request goes to Ory Kratos for verification. +3. If the user is already authenticated and the request contains a token, request goes to Ory Hydra for verification. +4. Ory Oathkeeper validates session or token. +5. User attempts to access a previously protected document; backend requests permission look up in Ory Keto. +6. Ory Keto verifies if the user has permission to access the document and sends a response to allow or deny. + +
diff --git a/docs/products/product-arch b/docs/products/product-arch new file mode 100644 index 0000000000..a369906705 --- /dev/null +++ b/docs/products/product-arch @@ -0,0 +1,57 @@ +--- +id: products-arch +title: Ory product architecture +sidebar_label: Architecture +#displayed_sidebar: sidebars +--- + +## Authentication + +Kratos — fully standalone. Handles the complete identity lifecycle (registration, login, recovery, MFA, profile management) without dependencies. + +## Authorization + +Hydra — needs an identity provider. It's deliberately "headless"—it issues OAuth tokens but doesn't manage users. It asks "who is this user?" and needs Kratos (or another IdP) to answer. + +Keto — needs an identity provider. It answers "can this subject do this action?" but needs something upstream to authenticate who the subject is. + +## Authentication & Authorization + +Kratos + Keto — when you need authentication and fine-grained permissions within your own application(s). Users log in via Kratos, and Keto controls what they can access internally. + +Kratos + Hydra — when you need authentication plus OAuth 2.0/OIDC capabilities: SSO across multiple apps, third-party integrations, or federating identity to external services. + +Kratos + Hydra + Keto — when you need all three: user login, token issuance/SSO, and fine-grained permissions. + +The choice depends on whether you're solving for internal permissions vs. external/delegated access. + +flowchart TD + Start([What are you building?]) --> Q1{Need to manage
user identities?} + + Q1 -->|Yes| Kratos[✓ Kratos] + Q1 -->|No, using existing IdP| ExternalIdP[Use your existing IdP] + + Kratos --> Q2{Need B2B features?
Organizations, teams,
org-level SSO?} + ExternalIdP --> Q3 + + Q2 -->|Yes| Polis[✓ Add Polis] + Q2 -->|No| Q3 + Polis --> Q3 + + Q3{Need SSO across apps
or third-party integrations?} + + Q3 -->|Yes| Hydra[✓ Add Hydra] + Q3 -->|No| Q4 + Hydra --> Q4 + + Q4{Need fine-grained
permissions?
e.g. can user X edit doc Y} + + Q4 -->|Yes| Keto[✓ Add Keto] + Q4 -->|No| Q5 + Keto --> Q5 + + Q5{Microservices or
zero-trust architecture?} + + Q5 -->|Yes| Oathkeeper[✓ Add Oathkeeper] + Q5 -->|No| Done([Your stack is ready]) + Oathkeeper --> Done \ No newline at end of file diff --git a/docs/reference/overview.mdx b/docs/reference/overview.mdx new file mode 100644 index 0000000000..4268bdfb75 --- /dev/null +++ b/docs/reference/overview.mdx @@ -0,0 +1,51 @@ +--- +id: reference-overview +title: Reference +sidebar_label: Overview +#displayed_sidebar: sidebars-ciam +--- + +import Link from "@docusaurus/Link" + +## Ory CLI + +The Ory CLI is the primary interface for managing Ory from the command line. Use it to create and configure projects, manage +identities and permissions, run local development environments with built-in tunneling, and move configurations between +self-hosted and Ory Network deployments. + +[Learn more...](/category/ory-cli-reference) + +## Rest APIs + +Ory's REST APIs let you manage identities, OAuth2 clients, permissions, and project configuration programmatically. Public APIs +handle end-user flows like authentication. Administrative APIs require a Personal Access Token and cover backend operations. SDKs +are available for supported languages. + +[Learn more...](/reference/api) + +## Ory SDKs + +Ory provides two SDK families depending on your deployment. The Ory Network SDK is a single, unified client that covers identity +management, OAuth2, and permissions in one package. Service-specific SDKs are available for self-hosted deployments, with a +separate client for each Ory product. + +### Ory Network SDK + +A unified client (ory_client) for integrating with Ory Network. It covers identities, OAuth2, and permissions in a single package, +targeting your project's API at `https://{project_slug}.projects.oryapis.com/`. Available in multiple languages. Consult the REST +API documentation for code samples and usage examples. + +[Learn more...](/sdk) + +### Service‑specific SDKs for self‑hosted deployments + +Each SDK is documented under its respective product reference. These are intended for self-hosted deployments only. You must use +the unified Ory Network SDK for Ory Network integrations. + +Separate clients for each self-hosted Ory product: + +- [Ory Kratos](/kratos/sdk/overview) +- [Ory Hydra](/hydra/sdk/overview) +- [Ory Keto](/keto/sdk/overview) +- [Ory Polis](/polis/reference/api) +- [Ory Oathkeeper](/oathkeeper/sdk) diff --git a/docs/sdk.mdx b/docs/sdk.mdx index 7e9ac020f6..61f1ac4e64 100644 --- a/docs/sdk.mdx +++ b/docs/sdk.mdx @@ -10,7 +10,8 @@ Before using the SDK, consult the Ory [REST](./reference/api.mdx) API documentat various programming languages. This SDK is intended to be used with Ory Network. For self-hosting Ory services use the respective client. Read more in the -[self-hosting documentation](./ecosystem/projects) for each service under **Reference/SDK**. +[self-hosting documentation](./reference/reference-overview#servicespecific-sdks-for-selfhosted-deployments) for each service +under **Reference/SDK**. ## Download the SDK diff --git a/docs/ecosystem/security.mdx b/docs/security-compliance/security.mdx similarity index 100% rename from docs/ecosystem/security.mdx rename to docs/security-compliance/security.mdx diff --git a/docs/self-hosted/deployment.md b/docs/self-hosted/deployment.md deleted file mode 100644 index 51cbb5fb2f..0000000000 --- a/docs/self-hosted/deployment.md +++ /dev/null @@ -1,190 +0,0 @@ ---- -id: deployment -title: Database ---- - -## Integrates with Kubernetes - -Ory technology is cloud first and runs natively on Docker and Kubernetes and naturally supports Kubernetes Helm Charts. Head over -to our [Kubernetes Helm Chart Repository](https://k8s.ory.com/helm) for Charts and accompanying Documentation. - -## Data storage and persistence - -All Ory projects support storing data in memory and in relational databases: - -- PostgreSQL is fully supported. -- MySQL is fully supported. Some flavors like MariaDB and AWS Aurora may require additional setup. -- CockroachDB is fully supported. -- SQLite is supported (in-memory and persistent) but must not be used in a production deployment. - -### PostgreSQL - -If configuration key `dsn` (Data Source Name) is prefixed with `postgres://`, then PostgreSQL will be used as storage backend. An -example configuration would look like this: - -``` -DSN=postgres://user:password@host:123/database -``` - -Parameters are configured by appending them to the DSN query. For example, to set the `sslmode` parameter, you would append it to -the DSN query like this: - -``` -DSN=postgres://user:password@host:123/database?sslmode=verify-full -``` - -#### Supported parameters - -- `sslmode` (string): Whether or not to use SSL (default is `require`) - - `disable` - No SSL - - `require` - Always SSL (skip verification) - - `verify-ca` - Always SSL (verify that the certificate presented by the `server` was signed by a trusted CA) - - `verify-full` - Always SSL (verify that the certification presented by the server was signed by a trusted CA and the server - host name matches the one in the certificate). This is the recommended setting. -- `application_name` (string): Set to your application name (.e.g. `ory_hydra`, `ory_kratos`). This identifier will show up in - your database's metrics, allowing you to easily see which application performs which queries. -- `fallback_application_name` (string): An application_name to fall back to if one isn't provided. -- `search_path` (string): specifies the [search path](https://www.postgresql.org/docs/12/ddl-schemas.html), such as the schema. -- `sslcert` (string): TLS client certificate file location. The file must contain PEM encoded data. -- `sslkey` (string): TLS client certificate private key file location, matching `sslcert`. The file must contain PEM encoded data. -- `sslrootcert` (string): The location of the CA (root) certificate file. The file must contain PEM encoded data. - -##### Standard pooling - -- `max_conns` (number): Sets the maximum number of open (in use+idle) connections to the database. If this number is too low, - operations will be blocked waiting for a database connection. For the database server, connections might be expensive (e.g. - PostgreSQL without an intermediary connection pool), quite cheap (e.g. MySQL), or very cheap (e.g. CockroachDB). For the client - (Ory Software), database connections are always very cheap. -- `max_idle_conns` (number): The maximum number of _idle_ (not currently in use) connections. Useful to lower resource consumption - in your database if connections are expensive for the database server (primarily PostgreSQL without an intermediary connection - pool such as `pgbouncer`). -- `max_conn_lifetime` (duration: for example "500ms", "5s", "30m", "1h"): Sets the time after which a connection will be closed, - irrespective of how long it has been idle. This is useful for maintenance: most database systems will not close connections - towards the client even if the database server is being drained (for example for a software upgrade). Instead, the server relies - on the client to close the connection. In those scenarios, this value determines the drain time of your database nodes. Setting - this too short will cause connections to be re-established very frequently, negatively impacting latency. -- `max_conn_idle_time` (duration: for example "500ms", "5s", "30m", "1h"): Database connections will be closed after idling for - this duration. Potentially useful to reduce resource consumption on the database server (see `max_idle_conns`) after a traffic - spike. -- `connect_timeout` (number): Maximum wait for connection, in seconds. Zero or not specified means wait indefinitely. - -##### High-performance pooling - -High-performance pooling is supported in Ory Enterprise License (OEL) images. Read more about it in the -[high-performance pooling](./oel/high-performance-pooling) documentation. - -### CockroachDB - -If configuration key `dsn` (Data Source Name) is prefixed with `cockroach://`, then CockroachDB will be used as storage backend. -CockroachDB supports the same parameters as PostgreSQL. - -An example configuration would look like this: - -``` -DSN=cockroach://user:password@host:123/database?sslmode=verify-full&... -``` - -In CockroachDB, database connections consume little resources server-side. By contrast, establishing a new TLS connection to a -cluster can take several hundred milliseconds in many scenarios. As a consequence, Ory recommends using -[high-performance pooling](#high-performance-pooling) and setting the minimum and maximum pool sizes equal, as well as disabling -termination of idle connections (`pool_max_conn_idle_time=0`). - -In this configuration, a fixed-size pool of database connections is available at all times, preventing connection storms during -traffic spikes. This pool size should be oversized for normal use: you might see most connections seemingly idle in your database -metrics. Because connections are virtually free to keep around for both client and server, this is not a concern. An excessively -sized connection pool may overload your database during extreme traffic peaks, whereas an undersized pool will have requests -waiting unnecessarily. - -We recommend setting `pool_max_conn_lifetime=30m&pool_max_conn_lifetime_jitter=5m` as a compromise between low drain times during -CockroachDB upgrades and re-establishing connections more frequently than necessary. - -### MySQL - -If configuration key `dsn` (Data Source Name) is prefixed with `mysql://`, then MySQL will be used as storage backend. An example -configuration would look like this: - -``` -DSN=mysql://user:password@tcp(host:123)/database?parseTime=true -``` - -#### Supported parameters - -The following DSN parameters are supported: - -- `max_conns` (number): Sets the maximum number of open (in use+idle) connections to the database. If this number is too low, - operations will be blocked waiting for a database connection. For the database server, connections might be expensive (e.g. - PostgreSQL without an intermediary connection pool), quite cheap (e.g. MySQL), or very cheap (e.g. CockroachDB). For the client - (Ory Software), database connections are always very cheap. -- `max_idle_conns` (number): The maximum number of _idle_ (not currently in use) connections. Useful to lower resource consumption - in your database if connections are expensive for the database server (primarily PostgreSQL without an intermediary connection - pool such as `pgbouncer`). -- `max_conn_lifetime` (duration: for example "500ms", "5s", "30m", "1h"): Sets the time after which a connection will be closed, - irrespective of how long it has been idle. This is useful for maintenance: most database systems will not close connections - towards the client even if the database server is being drained (for example for a software upgrade). Instead, the server relies - on the client to close the connection. In those scenarios, this value determines the drain time of your database nodes. Setting - this too short will cause connections to be re-established very frequently, negatively impacting latency. -- `max_conn_idle_time` (duration: for example "500ms", "5s", "30m", "1h"): Database connections will be closed after idling for - this duration. Potentially useful to reduce resource consumption on the database server (see `max_idle_conns`) after a traffic - spike. -- `collation` (string): Sets the collation used for client-server interaction on connection. In contrast to charset, collation - doesn't issue additional queries. If the specified collation is unavailable on the target server, the connection will fail. -- `loc` (string): Sets the location for time.Time values. Note that this sets the location for time.Time values but doesn't change - MySQL's time_zone setting. For that set the time_zone DSN parameter. Please keep in mind, that param values must be - url.QueryEscape'ed. Alternatively you can manually replace the / with %2F. For example US/Pacific would be loc=US%2FPacific. -- `maxAllowedPacket` (number): Max packet size allowed in bytes. The default value is 4 MiB and should be adjusted to match the - server settings. maxAllowedPacket=0 can be used to automatically fetch the max_allowed_packet variable from server on every - connection. -- `readTimeout` (duration): I/O read timeout. The value must be a decimal number with a unit suffix ("ms", "s", "m", "h"), such as - "30s", "0.5m" or "1m30s". -- `timeout` (duration): Timeout for establishing connections, aka dial timeout. The value must be a decimal number with a unit - suffix ("ms", "s", "m", "h"), such as "30s", "0.5m" or "1m30s". -- `tls` (bool / string): tls=true enables TLS / SSL encrypted connection to the server. Use skip-verify if you want to use a - self-signed or invalid certificate (server side). -- `writeTimeout` (duration): I/O write timeout. The value must be a decimal number with a unit suffix ("ms", "s", "m", "h"), such - as "30s", "0.5m" or "1m30s". - -To set such a parameter, append it to the DSN query, for example: - -``` -DSN=mysql://user:password@tcp(host:123)/database?parseTime=true&writeTimeout=123s -``` - -#### AWS Aurora / MySQL 8.0+ not completing migrations - -If you encounter errors such as - -``` -An error occurred while connecting to SQL: error executing migrations/sql/20210817181232000006_unique_credentials.mysql.up.sql, sql: ALTER TABLE `identity_credential_identifiers` MODIFY `identity_credential_type_id` char(36) NOT NULL;: Error 1832: Cannot change column 'identity_credential_type_id': used in a foreign key constraint 'identity_credential_identifiers_type_id_fk_idx' -``` - -set `sql_mode=TRADITIONAL` to resolve the issue. - -See also: - -- https://github.com/ory/hydra/issues/3363 -- https://github.com/ory/kratos/issues/2167 - -### SQLite - -If configuration key `dsn` (Data Source Name) is prefixed with `sqlite://`, then SQLite will be used as storage backend. SQLite is -a great choice for development but has many drawbacks and should not be used in production. - -An example configuration would look like this: - -``` -DSN=sqlite:///tmp/some-db.sqlite?_fk=true -``` - -The following DSN parameters are required: - -- `_fk` (bool): Must be set to `true` (`?_fk=true`) for foreign keys to work. - -For a list of all supported query parameters, head over to -[github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3#connection-string). - -#### SQLite in-memory (ephemeral) - -Storing data in-memory helps you get started quickly without worrying about setting up a database first. Keep in mind that all -data is ephemeral and will be removed when the service is killed. - -Using in-memory storage is usually achieved by setting configuration key `DSN=memory`. diff --git a/docs/self-hosted/oel/keto/configuration.mdx b/docs/self-hosted/oel/keto/configuration.mdx index 484a6248b9..b8cd25c9c3 100644 --- a/docs/self-hosted/oel/keto/configuration.mdx +++ b/docs/self-hosted/oel/keto/configuration.mdx @@ -1,6 +1,6 @@ --- id: configuration -title: OEL Configuration +title: Configuration file --- ```mdx-code-block diff --git a/docs/self-hosted/oel/kratos/configuration.mdx b/docs/self-hosted/oel/kratos/configuration.mdx index bffd20a384..4a71b6395b 100644 --- a/docs/self-hosted/oel/kratos/configuration.mdx +++ b/docs/self-hosted/oel/kratos/configuration.mdx @@ -1,6 +1,6 @@ --- id: configuration -title: OEL Configuration +title: Configuration file --- ```mdx-code-block diff --git a/docs/self-hosted/oel/oathkeeper/configuration.mdx b/docs/self-hosted/oel/oathkeeper/configuration.mdx index 0e26458058..70c4319276 100644 --- a/docs/self-hosted/oel/oathkeeper/configuration.mdx +++ b/docs/self-hosted/oel/oathkeeper/configuration.mdx @@ -1,6 +1,6 @@ --- id: configuration -title: OEL Configuration +title: Configuration file --- ```mdx-code-block diff --git a/docs/self-hosted/oel/oauth2/changelog.mdx b/docs/self-hosted/oel/oauth2/changelog.mdx index 6137e397c2..f3c3cc303a 100644 --- a/docs/self-hosted/oel/oauth2/changelog.mdx +++ b/docs/self-hosted/oel/oauth2/changelog.mdx @@ -29,8 +29,8 @@ Changes: - fix for sql migration for Azure Postgres Flexible Server - https://github.com/ory/hydra/pull/3958 - introduces implementation of OAuth 2.0 Device Authorization Grant - https://github.com/ory/hydra/pull/3912 -- enables ["high performance pooling"](https://www.ory.com/docs/self-hosted/deployment#high-performance-pooling) parameters in the - DSN for PostgreSQL and CockroachDB +- enables ["high performance pooling"](/docs/oss/deployment#high-performance-pooling) parameters in the DSN for PostgreSQL and + CockroachDB ## 2025-03-19 diff --git a/docs/self-hosted/oel/oauth2/configuration.mdx b/docs/self-hosted/oel/oauth2/configuration.mdx index 6e9b315e13..a36f57bb2a 100644 --- a/docs/self-hosted/oel/oauth2/configuration.mdx +++ b/docs/self-hosted/oel/oauth2/configuration.mdx @@ -1,6 +1,6 @@ --- id: configuration -title: OEL Configuration +title: Configuration file --- ```mdx-code-block diff --git a/docs/self-hosted/oel/quickstart.mdx b/docs/self-hosted/oel/quickstart.mdx index e193841620..ff411f0ec5 100644 --- a/docs/self-hosted/oel/quickstart.mdx +++ b/docs/self-hosted/oel/quickstart.mdx @@ -30,7 +30,7 @@ import ImageTagsHydra from "./oel-hydra-image-tags.md" To run the Ory Hydra Enterprise build, you need to set the `DSN` environment variable to the -[database connection string](../deployment.md) and provide a [configuration file](../../hydra/reference/configuration.mdx). +[database connection string](/docs/oss/deployment) and provide a [configuration file](/docs/hydra/reference/configuration). Before deploying the service, you need to apply SQL migrations: diff --git a/docs/solutions/B2B.mdx b/docs/solutions/B2B.mdx new file mode 100644 index 0000000000..b175fdcba9 --- /dev/null +++ b/docs/solutions/B2B.mdx @@ -0,0 +1,36 @@ +--- +id: solution_B2B +title: B2B IAM Solution +sidebar_label: B2B IAM +--- + +B2B IAM (Business-to-Business Identity and Access Management) handles authentication and authorization for applications where your +customers are organizations, not just individual users. This adds complexity: you need to manage organizations (tenants), their +members, roles within those organizations, and often integrate with your customers' existing identity providers. + +Ory's stack supports B2B IAM patterns: + +- Ory Kratos — manages user identities, authentication flows (registration, login, password reset, MFA, social sign-in, SSO, + passkeys), and account management. + +- Ory Hydra — provides OAuth2/OIDC for secure API access and machine-to-machine authentication between services. + +- Ory Keto — models complex organizational permissions (user X is admin of organization Y, organization Y has access to resource + Z) using relationship-based access control. + +- Ory Oathkeeper — enforces tenant isolation at the API layer, ensuring users only access their organization's data. + +- Ory Polis — provides enterprise SSO via SAML 2.0 and OIDC, abstracting protocol complexity into a standard OAuth 2.0 flow. + Supports directory sync via SCIM for automatic user provisioning/deprovisioning, plus multi-tenancy and self-service SSO + configuration for your enterprise customers. + +The key B2B patterns that Ory supports include multi-tenancy (isolating customer data), organization hierarchies, role-based +access within organizations, delegated administration (letting your customers manage their own users), and enterprise SSO +onboarding via SAML 2.0 and OIDC federation. + +## [Why Ory for B2B?](https://www.ory.com/business-to-business-identity-and-access-management-iam) + +B2B customers expect enterprise-grade identity features—SAML SSO, directory sync, audit logs, compliance certifications. Building +SAML support alone can take months of XML parsing and certificate management. Ory Polis abstracts this complexity, letting you +implement enterprise SSO in days instead of months while staying flexible enough to match your specific tenant and permissions +model. diff --git a/docs/solutions/CIAM.mdx b/docs/solutions/CIAM.mdx new file mode 100644 index 0000000000..a6351a5fd2 --- /dev/null +++ b/docs/solutions/CIAM.mdx @@ -0,0 +1,30 @@ +--- +id: solution_CIAM +title: CIAM IAM Solution +sidebar_label: CIAM +--- + +Ory abstracts away the complexity of secure authentication flows, session management, token handling, and credential storage. +Instead of implementing password hashing, OAuth2 flows, CSRF protection, and session invalidation yourself, you integrate with +Ory's APIs. + +Ory's stack supports CIAM patterns: + +- Ory Kratos — identity management (registration, login, password reset, profile management, MFA, social sign-in, passkeys) + +- Ory Hydra — OAuth2 and OpenID Connect server for token-based API authorization + +- Ory Keto — fine-grained, relationship-based access control (permissions) + +- Ory Oathkeeper — identity-aware API gateway that validates sessions and tokens + +You define identity schemas (what data you store about users), configure authentication methods (password, social, passwordless), +and set authorization policies (who can access what). Ory handles the flow lifecycle, session management, and token handling. You +integrate via SDKs or REST APIs, and Ory's self-service flows mean users handle their own registration, login, and recovery +without you building custom UIs. + +## [Why Ory for CIAM?](https://www.ory.com/customer-identity-and-access-management-ciam) + +Building identity and access management correctly is hard! Subtle bugs create security vulnerabilities. Ory provides +battle-tested, open-source implementations you can self-host or run as a managed service (Ory Network), so your team focuses on +your product, not reinventing login screens. diff --git a/docs/solutions/agentic.mdx b/docs/solutions/agentic.mdx new file mode 100644 index 0000000000..c83224c9c8 --- /dev/null +++ b/docs/solutions/agentic.mdx @@ -0,0 +1,34 @@ +--- +id: solution_agentic +title: Agentic IAM Solution +sidebar_label: Agentic IAM +--- + +Agentic IAM handles authentication and authorization for AI agents, autonomous software that acts on behalf of users or systems to +perform tasks, make decisions, and interact with APIs. As AI agents become more prevalent, they need secure identities, scoped +permissions, and auditable access trails just like human users. + +Ory's stack supports Agentic IAM patterns: + +- Ory Hydra — issues OAuth 2.0 tokens for machine-to-machine authentication, enabling agents to securely access APIs with scoped + permissions. Supports the OAuth 2.0 Device Authorization Flow for agents that can't use browser-based flows, and token exchange + for delegation scenarios where agents act on behalf of users. + +- Ory Kratos — manages identities for both human users and service accounts, allowing you to define agent identities with specific + traits and metadata. + +- Ory Keto — enforces fine-grained, relationship-based access control so agents only access resources they're explicitly permitted + to use. Models complex delegation chains (user X authorizes agent Y to access resource Z on their behalf). + +- Ory Oathkeeper — validates agent tokens at the API gateway, enforcing permission boundaries before requests reach your services. + +The key Agentic IAM patterns that Ory supports include agent identity registration, scoped token issuance (limiting what an agent +can do), delegation and consent (users authorizing agents to act on their behalf), token chain revocation (instantly revoking an +agent's access), and audit logging for compliance and debugging. + +## [Why Ory for Agentic IAM?](https://www.ory.com/agentic-artificial-intelligence-ai-agents) + +Every AI agent request—whether from a human, app, or autonomous system—must be verified and authorized with the right permissions. +Building secure agent authentication yourself means handling token lifecycles, delegation chains, and revocation across +distributed systems. Ory provides the OAuth 2.0 and permissions infrastructure to implement Agentic IAM while maintaining the +auditability and control enterprises require. diff --git a/docs/solutions/overview.mdx b/docs/solutions/overview.mdx new file mode 100644 index 0000000000..dc002d9f8f --- /dev/null +++ b/docs/solutions/overview.mdx @@ -0,0 +1,64 @@ +--- +id: solutions-overview +title: Solutions Overview +sidebar_label: Solutions overview +#displayed_sidebar: sidebars-ciam +--- + +import { OverviewCard } from "@site/src/components/welcomePage/OverviewCard" +import WelcomePageSection from "@site/src/components/Welcome/welcome" +import * as welcomeContent from "@site/src/pages/_assets/welcome-content" + +# Solutions overview + +Ory provides flexible identity and access management solutions for different use cases. Choose the solution that best fits your +business needs. + +
+ + +{" "} + + + +{" "} + + + + +
+ +

Identity management & authentication solutions

+

What your users need for authentication and user management.

+ + + +

Authorization solutions

+

How to secure access to resources and APIs.

+ + + +

Permission management solutions

+

Controlling who can access what.

+ + diff --git a/docs/solutions/workforce.mdx b/docs/solutions/workforce.mdx new file mode 100644 index 0000000000..a1f1d34e21 --- /dev/null +++ b/docs/solutions/workforce.mdx @@ -0,0 +1,42 @@ +--- +id: solution_workforce +title: Workforce IAM Solution +sidebar_label: Workforce IAM +--- + +Workforce IAM handles authentication and authorization for your internal users — employees, contractors, and partners who need +secure access to internal applications, tools, and resources. Unlike CIAM where you control the full identity lifecycle, workforce +scenarios often require integrating with existing corporate identity providers, enforcing compliance policies, and managing access +across a mix of internal and third-party applications. + +Ory's stack supports Workforce IAM patterns: + +- Ory Kratos: manages employee identities, authentication flows (login, MFA, password reset, account management), and supports + federation with existing corporate identity providers via OIDC and SAML so employees use their existing credentials. + +- Ory Hydra: provides OAuth2/OIDC for single sign-on across internal applications and secure machine-to-machine communication + between internal services. + +- Ory Keto: enforces role-based and relationship-based access control across internal tools and resources. Models organizational + structures (user X belongs to department Y, department Y has access to application Z) and enforces least-privilege access + policies. + +- Ory Polis: federates with corporate identity providers via SAML 2.0 and OIDC, enabling employees to authenticate with existing + enterprise credentials. Supports directory sync via SCIM for automated onboarding and offboarding as employees join, move + between teams, or leave the organization. + +- Ory Oathkeeper: acts as an identity-aware gateway for internal services, validating employee sessions and enforcing access + policies before requests reach backend applications. + +The key Workforce IAM patterns that Ory supports include single sign-on across internal applications, integration with existing +corporate identity providers (Active Directory, Okta, Google Workspace), automated provisioning and deprovisioning via SCIM +directory sync, role-based access control aligned to organizational structure, MFA enforcement for sensitive resources, and +session policies that adapt to compliance requirements. + +## [Why Ory for Workforce IAM?](https://www.ory.com/workforce-identity-and-access-management-iam) + +Employee onboarding and offboarding is a security-critical process — orphaned accounts and stale permissions are among the most +common attack vectors in enterprise breaches. Building SSO federation and directory sync yourself means months of SAML XML +parsing, SCIM endpoint implementation, and lifecycle management logic. Ory provides the identity federation, provisioning, and +access control infrastructure to secure your workforce while integrating with the corporate identity systems your organization +already uses. diff --git a/docs/welcome.mdx b/docs/welcome.mdx index 9f27befd32..707ed7a29b 100644 --- a/docs/welcome.mdx +++ b/docs/welcome.mdx @@ -2,7 +2,7 @@ id: welcome title: Welcome to Ory! sidebar_label: Introduction -slug: welcome +slug: /welcome-doc --- Find all the guides and resources you need to develop with Ory. diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 295267dca0..2a6863ea01 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -16,8 +16,8 @@ const config: Config = { url: `https://www.ory.com`, baseUrl: "/docs/", favicon: "img/favico.png", - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "throw", + onBrokenLinks: "warn", + onBrokenMarkdownLinks: "warn", onDuplicateRoutes: "throw", organizationName: "ory", projectName: "docs", @@ -71,18 +71,6 @@ const config: Config = { className: "copyright-2023-ory-corp", line: "Copyright © 2023 Ory Corp", }, - { - className: "copyright-2024-ory-corp", - line: "Copyright © 2024 Ory Corp", - }, - { - className: "copyright-2025-ory-corp", - line: "Copyright © 2025 Ory Corp", - }, - { - className: "copyright-2026-ory-corp", - line: "Copyright © 2026 Ory Corp", - }, { className: "spdx-license-identifier", line: "SPDX-License-Identifier: Apache-2.0", @@ -101,7 +89,7 @@ const config: Config = { copyright: `Copyright © ${new Date().getFullYear()} Ory Corp`, links: [ { - label: "Need Support?", + label: "Support?", href: "https://www.ory.com/support", }, { @@ -110,11 +98,11 @@ const config: Config = { }, { label: "Status", - href: "https://status.ory.com/", + href: "https://status.ory.com", }, { label: "Privacy", - href: "https://www.ory.com/legal/privacy", + href: "https://www.ory.com/privacy", }, { label: "Company", @@ -122,7 +110,7 @@ const config: Config = { }, { label: "Terms of Service", - href: "https://www.ory.com/legal/tos", + href: "https://www.ory.com/tos", }, { label: "Schedule a discovery call", @@ -134,7 +122,7 @@ const config: Config = { ] satisfies Preset.ThemeConfig["footer"]["links"], logo: { alt: "Ory logo in white", - src: "/docs/img/logos/logo-dark-mode.svg", + src: "/docs/img/logos/logo-ory-white-2022-11-04.svg", href: "https://www.ory.com/", height: 80, width: 130.7, @@ -156,27 +144,25 @@ const config: Config = { return { name: "docusaurus-tailwindcss", configurePostCss(postcssOptions) { - // Use the new PostCSS plugin for Tailwind CSS postcssOptions.plugins.push(require("@tailwindcss/postcss")) return postcssOptions }, } }, + [ "@docusaurus/plugin-content-docs", { - path: "docs", - sidebarPath: require.resolve("./src/sidebar.ts"), - editUrl: `https://github.com/ory/docs/edit/master`, - // editCurrentVersion: false, - routeBasePath: "/", + id: "default", + path: "docs", // all product docs live here + routeBasePath: "/", // gives URLs like /docs/xxx + sidebarPath: require.resolve("./sidebars.ts"), + editUrl: "https://github.com/ory/docs/edit/master", showLastUpdateAuthor: true, showLastUpdateTime: true, - disableVersioning: false, - include: ["**/*.md", "**/*.mdx", "**/*.jsx", "**/*.tsx"], - docRootComponent: "@theme/DocRoot", }, ], + "@docusaurus/plugin-content-pages", require.resolve("./src/plugins/docusaurus-polyfill"), // require.resolve("./src/plugins/docusaurus-static-fonts"), diff --git a/index.js b/index.js new file mode 100644 index 0000000000..6a169729c5 --- /dev/null +++ b/index.js @@ -0,0 +1,28 @@ +const webpack = require("webpack") +const NodePolyfillPlugin = require("node-polyfill-webpack-plugin") + +module.exports = function (context, options) { + return { + name: "docusaurus-polyfill", + configureWebpack(config, isServer, utils) { + return { + plugins: [new NodePolyfillPlugin()], + resolve: { + fallback: { + buffer: require.resolve("buffer/"), + }, + }, + module: { + rules: [ + { + test: /\.m?js/, + resolve: { + fullySpecified: false, + }, + }, + ], + }, + } + }, + } +} diff --git a/package-lock.json b/package-lock.json index e1720c1264..7e72b99ac2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@rjsf/utils": "5.24.1", "@rjsf/validator-ajv8": "5.24.1", "@tanstack/react-query": "^5.64.2", + "@xyflow/react": "^12.10.1", "axios": "^1.13.2", "buffer": "^6.0.3", "classnames": "2.5.1", @@ -5818,17 +5819,18 @@ } }, "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@redocly/openapi-core/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -6830,14 +6832,6 @@ "react": "^18 || ^19" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "dev": true, @@ -7144,8 +7138,30 @@ "@types/ms": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -7495,129 +7511,195 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "license": "Apache-2.0" }, + "node_modules/@xyflow/react": { + "version": "12.10.1", + "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.10.1.tgz", + "integrity": "sha512-5eSWtIK/+rkldOuFbOOz44CRgQRjtS9v5nufk77DV+XBnfCGL9HAQ8PG00o2ZYKqkEU/Ak6wrKC95Tu+2zuK3Q==", + "license": "MIT", + "dependencies": { + "@xyflow/system": "0.0.75", + "classcat": "^5.0.3", + "zustand": "^4.4.0" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.75", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.75.tgz", + "integrity": "sha512-iXs+AGFLi8w/VlAoc/iSxk+CxfT6o64Uw/k0CKASOPqjqz6E0rb5jFZgJtXGZCpfQI6OQpu5EnumP5fGxQheaQ==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } + }, "node_modules/abbrev": { "version": "1.1.1", "dev": true, @@ -7654,9 +7736,10 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -7664,11 +7747,16 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, "peerDependencies": { - "acorn": "^8" + "acorn": "^8.14.0" } }, "node_modules/acorn-jsx": { @@ -7735,7 +7823,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -7986,7 +8076,9 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/assert": { @@ -8067,13 +8159,14 @@ } }, "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" } }, "node_modules/axios-retry": { @@ -8298,11 +8391,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", - "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", + "version": "2.10.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", + "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", + "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/batch": { @@ -8333,26 +8430,29 @@ } }, "node_modules/bn.js": { - "version": "5.2.1", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -8375,6 +8475,26 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -8391,6 +8511,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -8425,9 +8554,10 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8491,22 +8621,23 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.3", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", + "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", "license": "ISC", "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", + "elliptic": "^6.6.1", "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", + "parse-asn1": "^5.1.9", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.12" + "node": ">= 0.10" } }, "node_modules/browserify-sign/node_modules/isarray": { @@ -8549,9 +8680,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "funding": [ { "type": "opencollective", @@ -8567,11 +8698,11 @@ } ], "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -8783,9 +8914,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001755", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz", - "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==", + "version": "1.0.30001780", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", + "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", "funding": [ { "type": "opencollective", @@ -8799,7 +8930,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/ccount": { "version": "2.0.1", @@ -9020,6 +9152,12 @@ "dev": true, "license": "MIT" }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, "node_modules/classnames": { "version": "2.5.1", "license": "MIT" @@ -9642,7 +9780,9 @@ } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/create-hash": { @@ -10967,7 +11107,9 @@ } }, "node_modules/diff": { - "version": "4.0.2", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -10992,7 +11134,9 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/dir-glob": { @@ -11157,9 +11301,9 @@ } }, "node_modules/dompurify": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -11232,9 +11376,10 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.255", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.255.tgz", - "integrity": "sha512-Z9oIp4HrFF/cZkDPMpz2XSuVpc1THDpT4dlmATFlJUIBVCy9Vap5/rIXsASP1CscBacBqhabwh8vLctqBwEerQ==" + "version": "1.5.313", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz", + "integrity": "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==", + "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", @@ -11252,7 +11397,9 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/emittery": { @@ -11330,12 +11477,13 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -11437,7 +11585,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "license": "MIT" }, "node_modules/es-object-atoms": { @@ -11816,38 +11966,39 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -11885,9 +12036,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" }, "node_modules/express/node_modules/range-parser": { "version": "1.2.1", @@ -11949,15 +12101,13 @@ "license": "BSD-3-Clause" }, "node_modules/fast-xml-parser": { - "version": "4.5.1", + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.6.tgz", + "integrity": "sha512-Yd4vkROfJf8AuJrDIVMVmYfULKmIJszVsMv7Vo71aocsKgFxpdlpSHXSaInvyYfgw2PRuObQSW2GFpVMUjxu9A==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } ], "license": "MIT", @@ -12068,7 +12218,9 @@ } }, "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -12183,7 +12335,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.9", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -12502,6 +12656,8 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, "node_modules/global-dirs": { @@ -15378,10 +15534,16 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/loader-utils": { @@ -15424,7 +15586,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/lodash-es": { @@ -17717,7 +17881,9 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/mime": { @@ -17790,7 +17956,9 @@ "license": "MIT" }, "node_modules/minimatch": { - "version": "3.1.2", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -17817,9 +17985,9 @@ } }, "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { @@ -18066,9 +18234,9 @@ } }, "node_modules/node-forge": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", - "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" @@ -18369,9 +18537,10 @@ } }, "node_modules/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -18437,9 +18606,9 @@ } }, "node_modules/oas-linter/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "license": "ISC", "engines": { "node": ">= 6" @@ -18465,9 +18634,9 @@ } }, "node_modules/oas-resolver/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "license": "ISC", "engines": { "node": ">= 6" @@ -18502,9 +18671,9 @@ } }, "node_modules/oas-validator/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "license": "ISC", "engines": { "node": ">= 6" @@ -18867,14 +19036,15 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.7", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", + "pbkdf2": "^3.1.5", "safe-buffer": "^5.2.1" }, "engines": { @@ -19113,7 +19283,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -20950,8 +21122,13 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/ps-tree": { "version": "1.2.0", @@ -20980,7 +21157,9 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/pump": { @@ -21027,10 +21206,12 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.13.0", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -21111,14 +21292,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -21128,14 +21310,36 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -21143,6 +21347,15 @@ "node": ">=0.10.0" } }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/raw-loader": { "version": "4.0.2", "dev": true, @@ -21163,7 +21376,9 @@ } }, "node_modules/raw-loader/node_modules/ajv": { - "version": "6.12.6", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -22615,8 +22830,13 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.4.1", - "license": "ISC" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/scheduler": { "version": "0.25.0", @@ -22785,13 +23005,15 @@ } }, "node_modules/serve-handler": { - "version": "6.1.6", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", "license": "MIT", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", - "minimatch": "3.1.2", + "minimatch": "3.1.5", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" @@ -23897,17 +24119,18 @@ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", + "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "license": "MIT", "dependencies": { - "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", - "picocolors": "^1.0.0" + "picocolors": "^1.0.0", + "sax": "^1.5.0" }, "bin": { "svgo": "bin/svgo" @@ -23956,9 +24179,9 @@ } }, "node_modules/swagger2openapi/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "license": "ISC", "engines": { "node": ">= 6" @@ -23999,46 +24222,35 @@ "license": "MIT" }, "node_modules/tapable": { - "version": "2.2.1", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { "node": ">=18" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/tar/node_modules/yallist": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", @@ -24066,14 +24278,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -24097,27 +24310,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", "license": "MIT", @@ -24130,26 +24322,6 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "license": "MIT", @@ -24908,9 +25080,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -24925,6 +25097,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -25052,7 +25225,9 @@ } }, "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -25353,7 +25528,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.2", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -25384,32 +25561,36 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.95.0", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -25657,53 +25838,14 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/webpackbar": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", @@ -26193,6 +26335,34 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, "node_modules/zwitch": { "version": "2.0.4", "license": "MIT", diff --git a/package.json b/package.json index df509965dd..adebe08acb 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "@rjsf/utils": "5.24.1", "@rjsf/validator-ajv8": "5.24.1", "@tanstack/react-query": "^5.64.2", + "@xyflow/react": "^12.10.1", "axios": "^1.13.2", "buffer": "^6.0.3", "classnames": "2.5.1", diff --git a/sidebars-agentic.ts b/sidebars-agentic.ts new file mode 100644 index 0000000000..4a20a88da6 --- /dev/null +++ b/sidebars-agentic.ts @@ -0,0 +1,12 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 +// sidebars-agentic.ts +const agenticSidebar = [ + { + type: "category", + label: "Agentic IAM", + items: ["solutions/solution_agentic"], + }, +] + +export default agenticSidebar diff --git a/sidebars-b2b.ts b/sidebars-b2b.ts new file mode 100644 index 0000000000..8aee60f3ab --- /dev/null +++ b/sidebars-b2b.ts @@ -0,0 +1,12 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 +// sidebars-b2b.ts +const b2bSidebar = [ + { + type: "category", + label: "B2B", + items: ["solutions/solution_B2B"], + }, +] + +export default b2bSidebar diff --git a/sidebars-ciam.ts b/sidebars-ciam.ts new file mode 100644 index 0000000000..bd0f613db9 --- /dev/null +++ b/sidebars-ciam.ts @@ -0,0 +1,12 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 +// sidebars-ciam.ts +const ciamSidebar = [ + { + type: "category", + label: "CIAM", + items: ["solutions/solution_CIAM"], + }, +] + +export default ciamSidebar diff --git a/sidebars-network.ts b/sidebars-network.ts new file mode 100644 index 0000000000..3603c6bb12 --- /dev/null +++ b/sidebars-network.ts @@ -0,0 +1,819 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 + +// sidebars-network.ts +import { + SidebarItem, + SidebarItemConfig, +} from "@docusaurus/plugin-content-docs/src/sidebars/types" + +type SidebarItemsConfig = SidebarItemConfig[] + +const networkSidebar = [ + { + type: "category", + label: "Ory Network", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "network/getting-started/index", + }, + items: [ + "network/getting-started/index", + { + type: "category", + label: "Getting Started", + collapsed: true, + collapsible: true, + items: [ + { + type: "category", + label: "Migrating to Ory", + collapsed: true, + collapsible: true, + items: [ + { + type: "category", + label: "Phase 1: Plan & prepare", + collapsed: true, + collapsible: true, + items: [ + "migrate-to-ory/migrate/index", + "migrate-to-ory/migrate/map-to-orycap", + "migrate-to-ory/migrate/migrate-strategies", + //"migrate-to-ory/migrate/faq-migrate", + ], + }, + { + type: "category", + label: "Phase 2: Migrate", + collapsed: true, + collapsible: true, + items: [ + "migrate-to-ory/migrate/create-project", + "migrate-to-ory/migrate/design-id-schema", + "migrate-to-ory/migrate/integrate-frontend", + "migrate-to-ory/migrate/integrate-backend", + "migrate-to-ory/migrate/migrate-identities", + ], + }, + { + type: "category", + label: "Phase 3: Test & validate", + collapsed: true, + collapsible: true, + items: ["migrate-to-ory/migrate/test-validate"], + }, + { + type: "category", + label: "Phase 4: Go live", + collapsed: true, + collapsible: true, + items: ["migrate-to-ory/migrate/go-live"], + }, + ], + }, + "migrate-to-ory/auth0", + "getting-started/local-development", + { + type: "category", + label: "Ory Console", + collapsed: true, + collapsible: true, + items: [ + "guides/workspaces", + "console/single-sign-on", + "console/roles-and-permissions", + "guides/custom-domains", + "console/usage-billing", + "guides/manage-project-via-api", + "console/change-owner", + "guides/gitops", + "actions/live-events", + ], + }, + ], + }, + { + type: "category", + label: "Identity & AuthN", + className: "sidebar-icon sidebar-icon-kratos", + collapsed: true, + items: [ + "network/kratos/intro", + { + type: "category", + label: "Get Started", + collapsed: false, + collapsible: false, + link: { + type: "generated-index", + }, + items: ["identities/get-started/setup"], + }, + { + type: "category", + label: "Concepts", + collapsed: false, + collapsible: false, + link: { + type: "generated-index", + }, + items: [ + "security-model", + "identities/native-browser", + "concepts/redirects", + "kratos/hooks/configure-hooks", + "identities/sign-in/two-step-registration", + "identities/sign-in/identifier-first-authentication", + "identities/sign-in/login-hint", + "identities/sign-in/actions", + "identities/sign-in/code-submission-limit", + ], + }, + { + type: "category", + label: "Guides", + collapsed: false, + collapsible: false, + link: { + type: "generated-index", + }, + items: [ + { + type: "category", + label: "Identity management", + link: { + type: "doc", + id: "network/kratos/identity-model", + }, + items: [ + "kratos/manage-identities/create-users-identities", + "kratos/manage-identities/import-user-accounts-identities", + "identities/model/identity-state", + "kratos/manage-identities/invite-users", + "kratos/manage-identities/account-recovery", + "kratos/manage-identities/export-user-accounts-identities", + { + type: "category", + label: "SCIM", + link: { + type: "doc", + id: "kratos/manage-identities/scim", + }, + items: [ + "kratos/manage-identities/scim/ms-entra", + "kratos/manage-identities/scim/okta", + "kratos/manage-identities/scim/google-workspace", + ], + }, + "kratos/manage-identities/external-id", + ], + }, + { + type: "category", + label: "Identity schema", + link: { + type: "doc", + id: "kratos/manage-identities/identity-schema", + }, + items: [ + "kratos/manage-identities/managing-users-identities-metadata", + "identities/model/manage-identity-schema", + "kratos/manage-identities/customize-identity-schema", + "identities/model/identity-schema-selection", + "kratos/manage-identities/best-practices", + ], + }, + { + type: "category", + label: "Authentication", + link: { + type: "generated-index", + slug: "guides/authentication", + }, + items: [ + "kratos/concepts/credentials", + "kratos/concepts/credentials/username-email-password", + "kratos/passwordless/passwordless", + "kratos/passwordless/one-time-code", + "kratos/passwordless/passkeys", + "kratos/passwordless/passkeys-mobile", + "kratos/organizations/organizations", + "kratos/emails-sms/custom-email-templates", + ], + }, + { + type: "category", + label: "OpenID Connect SSO", + link: { + type: "doc", + id: "guides/oauth2-openid-connect", + }, + items: [ + "kratos/social-signin/overview", + { + type: "category", + label: "Social Sign-in Providers", + items: [ + "kratos/social-signin/generic", + "kratos/social-signin/ory", + "kratos/social-signin/google", + "kratos/social-signin/facebook", + "kratos/social-signin/microsoft", + "kratos/social-signin/github", + "kratos/social-signin/apple", + "kratos/social-signin/gitlab", + "kratos/social-signin/auth0", + "kratos/social-signin/salesforce", + "kratos/social-signin/slack", + "kratos/social-signin/spotify", + "kratos/social-signin/discord", + "kratos/social-signin/twitch", + "kratos/social-signin/netid", + "kratos/social-signin/yandex", + "kratos/social-signin/vk", + "kratos/social-signin/dingtalk", + "kratos/social-signin/lark", + "kratos/social-signin/patreon", + "kratos/social-signin/linkedin", + "kratos/social-signin/x-twitter", + "kratos/social-signin/line", + "kratos/social-signin/amazon", + "kratos/social-signin/uaepass", + ], + }, + "kratos/social-signin/data-mapping", + "kratos/social-signin/account-linking", + "kratos/social-signin/get-tokens", + "identities/sign-in/social-sign-in/redirect-url", + "kratos/social-signin/native-apps", + "kratos/social-signin/oidc-pkce", + "kratos/social-signin/fedcm", + ], + }, + { + type: "category", + label: "Flows", + link: { + type: "doc", + id: "kratos/self-service", + }, + items: [ + "kratos/concepts/browser-redirect-flow-completion", + "kratos/self-service/flows/user-registration", + "identities/get-started/sign-up", + "kratos/self-service/flows/user-login", + "identities/get-started/sign-in", + "kratos/self-service/flows/user-logout", + "identities/get-started/sign-out", + "kratos/self-service/flows/user-settings", + "kratos/self-service/flows/verify-email-account-activation", + "kratos/self-service/flows/CAPTCHA", + "kratos/self-service/flows/account-recovery-password-reset", + "identities/get-started/account-recovery", + "kratos/self-service/flows/user-facing-errors", + "identities/get-started/social-sign-in", + "identities/get-started/passwordless", + ], + }, + { + type: "category", + label: "Session", + link: { + type: "doc", + id: "kratos/session-management/overview", + }, + items: [ + "kratos/session-management/session-management", + "identities/get-started/session-management", + "identities/sign-in/check-session", + "kratos/session-management/session-lifespan", + "kratos/session-management/refresh-extend-sessions", + "kratos/session-management/revoke-sessions-hook", + "identities/session-to-jwt-cors", + "concepts/cache", + ], + }, + { + type: "category", + label: "Multi-factor authentication", + link: { + type: "doc", + id: "network/kratos/mfa-overview", + }, + items: [ + "kratos/mfa/lookup-secrets", + "kratos/mfa/totp", + "kratos/mfa/webauthn-fido-yubikey", + "kratos/mfa/mfa-via-sms", + "kratos/mfa/step-up-authentication", + "identities/get-started/mfa", + ], + }, + { + type: "category", + label: "Emails and SMS", + collapsed: true, + collapsible: true, + link: { + type: "doc", + id: "guides/email-sms", + }, + items: [ + "kratos/emails-sms/sending-emails-smtp", + "kratos/emails-sms/sending-sms", + ], + }, + { + type: "category", + label: "Ory Actions", + link: { + type: "doc", + id: "guides/integrate-with-ory-cloud-through-webhooks", + }, + items: [ + "identities/sign-in/actions", + "actions/revoke-active-sessions", + "actions/session", + "actions/require-verified-address", + { + type: "category", + label: "Integrations", + items: [ + "actions/integrations/hubspot", + "actions/integrations/mailchimp", + "actions/integrations/segment", + ], + }, + ], + }, + { + type: "category", + label: "Search", + link: { + type: "doc", + id: "kratos/manage-identities/search/identity-search-console", + }, + items: [ + "kratos/manage-identities/search/identity-search-console", + "kratos/manage-identities/search/identity-search-api", + ], + }, + { + type: "category", + label: "User interface", + link: { + type: "doc", + id: "kratos/bring-your-own-ui/custom-ui-overview", + }, + items: [ + "account-experience/index", + "kratos/bring-your-own-ui/custom-vs-built-in-ui", + { + type: "doc", + id: "elements/index", + label: "Ory Elements", + className: "external-link", + }, + { + type: "category", + label: "Build your custom UI", + link: { + type: "doc", + id: "getting-started/custom-ui", + }, + items: [ + "kratos/bring-your-own-ui/custom-ui-basic-integration", + "kratos/bring-your-own-ui/custom-ui-advanced-integration", + "kratos/concepts/ui-user-interface", + ], + }, + "kratos/bring-your-own-ui/configure-ory-to-use-your-ui", + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Fine-grained Permissions", + className: "sidebar-icon sidebar-icon-keto", + collapsed: true, + items: [ + "network/keto/index", + { + type: "category", + label: "Get started", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "network/keto/overview", + }, + items: [ + "network/keto/quickstart", + "network/keto/file-sharing-example", + ], + }, + { + type: "category", + label: "Concepts", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "keto/index", + }, + items: [ + "keto/guides/rbac", + { + type: "autogenerated", + dirName: "keto/concepts", + }, + "keto/reference/ory-permission-language", + ], + }, + { + type: "category", + label: "Guides", + collapsed: false, + collapsible: false, + items: [ + "keto/guides/simple-access-check-guide", + "keto/modeling/create-permission-model", + "keto/guides/list-api-display-objects", + "keto/guides/expand-api-display-who-has-access", + ], + }, + ], + }, + { + type: "category", + label: "Delegated AuthZ & Federated AuthN", + className: "sidebar-icon sidebar-icon-hydra", + collapsed: true, + items: [ + "network/hydra/index", + { + type: "category", + label: "Get started", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "network/hydra/ory-network-oauth2", + }, + items: [ + "getting-started/oauth2-openid/expressjs", + "hydra/guides/using-oauth2", + ], + }, + { + type: "category", + label: "Concepts", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "oauth2-oidc/index", + }, + items: [ + "oauth2-oidc/overview/oauth2-concepts", + "oauth2-oidc/overview/oidc-concepts", + "hydra/concepts/before-oauth2", + "hydra/security-architecture", + ], + }, + { + type: "category", + label: "Guides", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "hydra/guides/oauth2-token-introspection", + }, + items: [ + { + type: "category", + label: "Flows", + link: { + type: "doc", + id: "oauth2-oidc/authorization-code-flow", + }, + items: [ + "oauth2-oidc/authorization-code-flow", + "oauth2-oidc/client-credentials", + "oauth2-oidc/device-authorization", + "oauth2-oidc/resource-owner-password-grant", + "oauth2-oidc/refresh-token-grant", + "oauth2-oidc/userinfo-oidc", + "oauth2-oidc/oidc-logout", + "oauth2-oidc/wellknown-endpoint-discovery", + ], + }, + { + type: "category", + label: "Token management", + link: { + type: "generated-index", + slug: "guides/token-management", + }, + items: [ + "hydra/guides/oauth2-token-introspection", + "oauth2-oidc/revoke-consent", + "oauth2-oidc/skip-consent", + "oauth2-oidc/jwt-access-token", + "hydra/guides/audiences", + "hydra/guides/jwt", + "hydra/guides/client-token-expiration", + "hydra/guides/graceful-token-refresh", + "oauth2-oidc/claims-scope", + ], + }, + { + type: "category", + label: "Ory Actions", + items: ["hydra/guides/claims-at-refresh"], + }, + { + type: "category", + label: "Client management", + items: [ + "hydra/guides/oauth2-clients", + "hydra/jwks", + "hydra/guides/openid", + "oauth2-oidc/issuer-url", + ], + }, + { + type: "category", + label: "User Interface", + link: { + type: "doc", + id: "hydra/guides/custom-ui-oauth2", + }, + items: [ + "oauth2-oidc/custom-login-consent/flow", + "hydra/guides/logout", + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Enterprise SSO AuthZ", + className: "sidebar-icon sidebar-icon-polis", + collapsed: true, + items: [ + "network/polis/index", + { + type: "category", + label: "Get started", + collapsed: false, + collapsible: false, + items: ["network/polis/quickstart", "polis/reference/api"], + }, + { + type: "category", + label: "Enterprise SSO", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/saml-federation/index", + }, + items: [ + { + type: "category", + label: "Concepts", + link: { + type: "doc", + id: "polis/sso-flow/index", + }, + items: [ + "polis/sso-flow/index", + "polis/sso-flow/example-flow", + "polis/security", + ], + }, + { + type: "category", + label: "Configuration", + items: [ + "polis/deploy/env-variables", + "polis/guides/configuring-saml-sso", + "polis/guides/login-with-saml-sso", + "polis/deploy/pre-loaded-connections", + ], + }, + { + type: "category", + label: "Guides", + link: { + type: "doc", + id: "polis/guides/service", + }, + items: [ + "polis/guides/service", + "polis/guides/npm-library", + "polis/upgrade", + "polis/guides/examples", + "polis/sbom", + "polis/container-signing", + "polis/events", + "polis/observability", + { + type: "category", + label: "Frameworks", + items: [ + { + type: "autogenerated", + dirName: "polis/guides/frameworks", + }, + ], + }, + { + type: "category", + label: "Deployment", + items: [ + { + type: "autogenerated", + dirName: "polis/guides/deployment", + }, + ], + }, + ], + }, + { + type: "category", + label: "SAML SSO Providers", + link: { + type: "doc", + id: "polis/sso-providers/index", + }, + items: [ + { + type: "autogenerated", + dirName: "polis/sso-providers", + }, + ], + }, + ], + }, + { + type: "category", + label: "Directory Sync", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/directory-sync/index", + }, + items: [ + "polis/directory-sync/quickstart", + "polis/directory-sync/api-reference", + { + type: "category", + label: "Guides", + collapsed: true, + link: { + type: "generated-index", + slug: "polis/directory-sync/guides", + }, + items: [ + "polis/directory-sync/webhooks", + "polis/directory-sync/events", + "polis/directory-sync/observability", + "polis/directory-sync/examples", + "polis/directory-sync/faq", + { + type: "category", + label: "Directory providers", + link: { + type: "generated-index", + slug: "polis/directory-sync/providers", + }, + items: [ + { + type: "autogenerated", + dirName: "polis/directory-sync/providers", + }, + ], + }, + { + type: "category", + label: "Frameworks", + items: [ + { + type: "autogenerated", + dirName: "polis/directory-sync/guides", + }, + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Admin Portal", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/admin-portal/index", + }, + items: [ + { + type: "category", + label: "Guides", + collapsed: true, + link: { + type: "generated-index", + slug: "polis/admin-portal/guides", + }, + items: [ + "polis/admin-portal/enterprise-sso", + "polis/admin-portal/setup-links-enterprise-sso", + "polis/admin-portal/directory-sync", + "polis/admin-portal/setup-links-directory-sync", + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Proxy-based Access Control", + className: "sidebar-icon sidebar-icon-oathkeeper", + collapsed: true, + items: [ + "network/oathkeeper/index", + "oathkeeper/install", + "oathkeeper/reference/api", + { + type: "category", + label: "Concepts", + collapsed: false, + collapsible: false, + items: [ + "oathkeeper/api-access-rules", + { + type: "category", + label: "Handlers", + items: [ + "oathkeeper/pipeline", + "oathkeeper/pipeline/authn", + "oathkeeper/pipeline/authz", + "oathkeeper/pipeline/mutator", + "oathkeeper/pipeline/error", + ], + }, + "oathkeeper/grpc-middleware", + ], + }, + { + type: "category", + label: "Guides", + collapsed: false, + collapsible: false, + items: [ + "oathkeeper/configure-deploy", + "oathkeeper/guides/proxy-websockets", + "oathkeeper/guides/traefik-proxy-integration", + "oathkeeper/guides/upgrade", + ], + }, + { + type: "category", + label: "Reference", + collapsed: false, + collapsible: false, + items: [ + "oathkeeper/reference/configuration", + "oathkeeper/reference/configuration-editor", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "oathkeeper/cli", + }, + ], + }, + "oathkeeper/sdk", + ], + }, + ], + }, + ], + }, +] + +export default networkSidebar diff --git a/sidebars-oel.ts b/sidebars-oel.ts new file mode 100644 index 0000000000..128c000a72 --- /dev/null +++ b/sidebars-oel.ts @@ -0,0 +1,470 @@ +import { + SidebarItem, + SidebarItemConfig, +} from "@docusaurus/plugin-content-docs/src/sidebars/types" + +type SidebarItemsConfig = SidebarItemConfig[] + +const oelSidebar = [ + { + type: "category", + label: "Ory Enterprise License", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "oel/getting-started/index", + }, + items: [ + "oel/getting-started/index", + { + type: "category", + label: "Getting started", + collapsed: true, + collapsible: true, + items: [ + "self-hosted/oel/quickstart", + "self-hosted/oel/monitoring/monitoring", + "self-hosted/oel/high-performance-pooling", + ], + }, + { + type: "category", + label: "Ory Kratos", + className: "sidebar-icon sidebar-icon-kratos", + items: [ + "oel/kratos/intro", + "kratos/install", + "self-hosted/oel/kratos/upgrade", + "self-hosted/oel/kratos/changelog", + "oel/kratos/quickstart", + { + type: "category", + label: "Configuration", + items: [ + "kratos/configuring", + "self-hosted/oel/kratos/configuration", + "kratos/guides/configuring-cookies", + "kratos/guides/multi-domain-cookies", + "self-hosted/kratos/configuration/password", + "kratos/self-hosted/mfa", + "kratos/guides/setting-up-cors", + "self-hosted/kratos/configuration/oidc", + "kratos/guides/setting-up-password-hashing-parameters", + "kratos/guides/select-cipher-algorithm", + "kratos/self-hosted/email-http", + "kratos/reference/configuration-editor", + ], + }, + { + type: "category", + label: "Guides", + items: [ + "kratos/guides/docker", + "kratos/guides/deploy-kratos-example", + "kratos/guides/upgrade", + "kratos/guides/production", + "kratos/guides/multi-tenancy-multitenant", + "oel/kratos/scalability", + "kratos/self-hosted/mail-courier-templates", + "kratos/guides/tracing", + "kratos/guides/zero-trust-iap-proxy-identity-access-proxy", + "kratos/guides/https-tls", + "kratos/guides/hosting-own-have-i-been-pwned-api", + "kratos/guides/secret-key-rotation", + { + type: "category", + label: "Troubleshooting", + items: [ + { + type: "autogenerated", + dirName: "kratos/debug", + }, + ], + }, + ], + }, + { + type: "category", + label: "Reference", + items: [ + "kratos/reference/api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "kratos/cli", + }, + ], + }, + { + SDK: ["kratos/sdk/overview", "kratos/self-hosted/go"], + }, + "kratos/reference/configuration", + "kratos/reference/json-schema-json-paths", + "kratos/reference/html-forms", + ], + }, + ], + }, + { + type: "category", + label: "Ory Hydra", + className: "sidebar-icon sidebar-icon-hydra", + items: [ + "oel/hydra/index", + "hydra/self-hosted/install", + "self-hosted/oel/oauth2/migrate", + "self-hosted/oel/oauth2/revert-database-migrations", + "self-hosted/oel/oauth2/upgrade", + "hydra/self-hosted/upgrade", + "self-hosted/oel/oauth2/changelog", + "oel/hydra/quickstart", + { + type: "category", + label: "Configuration", + collapsed: true, + collapsible: true, + items: [ + "self-hosted/oel/oauth2/configuration", + "hydra/reference/configuration-editor", + "hydra/self-hosted/dependencies-environment", + "self-hosted/oel/oauth2/token-prefix", + "self-hosted/oel/oauth2/stateless-jwt", + "self-hosted/oel/oauth2/migrate-postgresql-ttl", + "hydra/self-hosted/hsm-support", + "oel/hydra/tracing", + ], + }, + { + type: "category", + label: "Guides", + items: [ + "hydra/self-hosted/configure-deploy", + "hydra/self-hosted/gitlab", + "hydra/self-hosted/merge-multiple-db-secrets", + "hydra/self-hosted/secrets-key-rotation", + "hydra/self-hosted/ssl-https-tls", + "hydra/guides/cookies", + "hydra/guides/cors", + "self-hosted/hydra/debug/csrf", + "oel/hydra/scalability", + "hydra/self-hosted/production", + "hydra/self-hosted/deploy-hydra-example", + "hydra/self-hosted/kubernetes-helm-chart", + ], + }, + { + type: "category", + label: "Reference", + items: [ + "hydra/reference/api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "hydra/cli", + }, + ], + }, + { + SDK: [ + "hydra/sdk/overview", + "hydra/self-hosted/go", + "hydra/self-hosted/js", + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Ory Keto", + className: "sidebar-icon sidebar-icon-keto", + items: [ + "oel/keto/index", + "keto/install", + "keto/guides/v0.7-migration", + "keto/guides/migrating-legacy-policies", + "keto/guides/upgrade", + "oel/keto/quickstart", + "self-hosted/oel/keto/changelog", + { + type: "category", + label: "Configuration", + items: [ + "self-hosted/oel/keto/configuration", + "keto/reference/configuration-editor", + ], + }, + { + type: "category", + label: "Guides", + items: ["keto/guides/production"], + }, + { + Reference: [ + "keto/reference/rest-api", + "keto/reference/proto-api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "keto/cli", + }, + ], + }, + { + SDK: ["keto/sdk/overview", "keto/self-hosted/go"], + }, + ], + }, + ], + }, + { + type: "category", + label: "Ory Polis", + className: "sidebar-icon sidebar-icon-polis", + collapsed: true, + collapsible: true, + items: [ + "oel/polis/index", + "polis/install", + "self-hosted/oel/polis/changelog", + "oel/polis/quickstart", + { + type: "category", + label: "Enterprise SSO", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/saml-federation/index", + }, + items: [ + { + type: "category", + label: "Concepts", + link: { + type: "doc", + id: "polis/sso-flow/index", + }, + items: [ + "polis/sso-flow/index", + "polis/sso-flow/example-flow", + "polis/security", + ], + }, + { + type: "category", + label: "Configuration", + items: [ + "polis/deploy/env-variables", + "polis/guides/configuring-saml-sso", + "polis/guides/login-with-saml-sso", + "polis/deploy/pre-loaded-connections", + ], + }, + { + type: "category", + label: "Guides", + link: { + type: "doc", + id: "polis/guides/service", + }, + items: [ + "polis/guides/service", + "polis/guides/npm-library", + "polis/upgrade", + "polis/guides/examples", + "polis/sbom", + "polis/container-signing", + "polis/events", + "polis/observability", + { + type: "category", + label: "Frameworks", + items: [ + { + type: "autogenerated", + dirName: "polis/guides/frameworks", + }, + ], + }, + { + type: "category", + label: "Deployment", + items: [ + { + type: "autogenerated", + dirName: "polis/guides/deployment", + }, + ], + }, + ], + }, + { + type: "category", + label: "SAML SSO Providers", + link: { + type: "doc", + id: "polis/sso-providers/index", + }, + items: [ + { + type: "autogenerated", + dirName: "polis/sso-providers", + }, + ], + }, + ], + }, + { + type: "category", + label: "Directory Sync", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/directory-sync/index", + }, + items: [ + "polis/directory-sync/quickstart", + "polis/directory-sync/api-reference", + { + type: "category", + label: "Guides", + collapsed: true, + link: { + type: "generated-index", + }, + items: [ + "polis/directory-sync/webhooks", + "polis/directory-sync/events", + "polis/directory-sync/observability", + "polis/directory-sync/examples", + "polis/directory-sync/faq", + { + type: "category", + label: "Directory providers", + items: [ + { + type: "autogenerated", + dirName: "polis/directory-sync/providers", + }, + ], + }, + { + type: "category", + label: "Frameworks", + items: [ + { + type: "autogenerated", + dirName: "polis/directory-sync/guides", + }, + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Admin Portal", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/admin-portal/index", + }, + items: [ + { + type: "category", + label: "Guides", + collapsed: true, + link: { + type: "generated-index", + }, + items: [ + "polis/admin-portal/enterprise-sso", + "polis/admin-portal/setup-links-enterprise-sso", + "polis/admin-portal/directory-sync", + "polis/admin-portal/setup-links-directory-sync", + ], + }, + ], + }, + "polis/reference/api", + ], + }, + { + type: "category", + label: "Ory Oathkeeper", + className: "sidebar-icon sidebar-icon-oathkeeper", + collapsed: true, + collapsible: true, + items: [ + "oel/oathkeeper/index", + "oathkeeper/install", + "self-hosted/oel/oathkeeper/upgrade-oathkeeper", + "self-hosted/oel/oathkeeper/changelog", + { + type: "category", + label: "Configure", + collapsed: false, + collapsible: false, + items: [ + "self-hosted/oel/oathkeeper/configuration", + "oathkeeper/reference/configuration-editor", + ], + }, + { + type: "category", + label: "Guides", + collapsed: false, + collapsible: false, + items: [ + "oathkeeper/guides/proxy-websockets", + "oathkeeper/guides/traefik-proxy-integration", + "oathkeeper/api-access-rules", + { + type: "category", + label: "Handlers", + items: [ + "oathkeeper/pipeline", + "oathkeeper/pipeline/authn", + "oathkeeper/pipeline/authz", + "oathkeeper/pipeline/mutator", + "oathkeeper/pipeline/error", + ], + }, + "oathkeeper/grpc-middleware", + "oel/oathkeeper/configure-deploy", + ], + }, + { + type: "category", + label: "Reference", + collapsed: false, + collapsible: false, + items: [ + "oathkeeper/reference/api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "oathkeeper/cli", + }, + ], + }, + "oathkeeper/sdk", + ], + }, + ], + }, + ], + }, +] + +export default oelSidebar diff --git a/sidebars-oss.ts b/sidebars-oss.ts new file mode 100644 index 0000000000..75de33b716 --- /dev/null +++ b/sidebars-oss.ts @@ -0,0 +1,503 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 + +// sidebars-oss.ts + +import { + SidebarItem, + SidebarItemConfig, +} from "@docusaurus/plugin-content-docs/src/sidebars/types" + +type SidebarItemsConfig = SidebarItemConfig[] + +const ossSidebar = [ + { + type: "category", + label: "Ory Open Source", + collapsible: false, + collapsed: false, + link: { + type: "doc", + id: "oss/getting-started/index", + }, + items: [ + "oss/getting-started/index", + { + type: "category", + label: "Open Source", + collapsed: true, + collapsible: true, + items: [ + "oss/open-source", + "oss/community", + "oss/contributing", + "oss/commitment", + "oss/software-architecture-philosophy", + ], + }, + { + type: "category", + label: "Getting started", + collapsed: true, + collapsible: true, + items: [ + "oss/deployment", + "oss/configuring", + "oss/guidelines/rest-api-guidelines", + "oss/guidelines/e2e-integration-tests", + ], + }, + { + type: "category", + label: "Ory Kratos", + className: "sidebar-icon sidebar-icon-kratos", + items: [ + { type: "ref", id: "oel/kratos/intro" }, + { type: "ref", id: "kratos/install" }, + "self-hosted/oel/kratos/upgrade", + "self-hosted/oel/kratos/changelog", + "oel/kratos/quickstart", + { + type: "category", + label: "Configuration", + items: [ + "kratos/configuring", + "self-hosted/oel/kratos/configuration", + "kratos/guides/configuring-cookies", + "kratos/guides/multi-domain-cookies", + "self-hosted/kratos/configuration/password", + "kratos/self-hosted/mfa", + "kratos/guides/setting-up-cors", + "self-hosted/kratos/configuration/oidc", + "kratos/guides/setting-up-password-hashing-parameters", + "kratos/guides/select-cipher-algorithm", + "kratos/self-hosted/email-http", + "kratos/reference/configuration-editor", + ], + }, + { + type: "category", + label: "Guides", + items: [ + "kratos/guides/docker", + "kratos/guides/deploy-kratos-example", + "kratos/guides/upgrade", + "kratos/guides/production", + "kratos/guides/multi-tenancy-multitenant", + "oel/kratos/scalability", + "kratos/self-hosted/mail-courier-templates", + "kratos/guides/tracing", + "kratos/guides/zero-trust-iap-proxy-identity-access-proxy", + "kratos/guides/https-tls", + "kratos/guides/hosting-own-have-i-been-pwned-api", + "kratos/guides/secret-key-rotation", + { + type: "category", + label: "Troubleshooting", + items: [ + { + type: "autogenerated", + dirName: "kratos/debug", + }, + ], + }, + ], + }, + { + type: "category", + label: "Reference", + items: [ + "kratos/reference/api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "kratos/cli", + }, + ], + }, + { + SDK: ["kratos/sdk/overview", "kratos/self-hosted/go"], + }, + "kratos/reference/configuration", + "kratos/reference/json-schema-json-paths", + "kratos/reference/html-forms", + ], + }, + ], + }, + { + type: "category", + label: "Ory Hydra", + className: "sidebar-icon sidebar-icon-hydra", + items: [ + "oel/hydra/index", + "hydra/self-hosted/install", + "self-hosted/oel/oauth2/migrate", + "self-hosted/oel/oauth2/revert-database-migrations", + "self-hosted/oel/oauth2/upgrade", + "hydra/self-hosted/upgrade", + "self-hosted/oel/oauth2/changelog", + "oel/hydra/quickstart", + { + type: "category", + label: "Configuration", + collapsed: true, + collapsible: true, + items: [ + "self-hosted/oel/oauth2/configuration", + "hydra/reference/configuration-editor", + "hydra/self-hosted/dependencies-environment", + "self-hosted/oel/oauth2/token-prefix", + "self-hosted/oel/oauth2/stateless-jwt", + "self-hosted/oel/oauth2/migrate-postgresql-ttl", + "hydra/self-hosted/hsm-support", + "oel/hydra/tracing", + ], + }, + { + type: "category", + label: "Guides", + items: [ + "hydra/self-hosted/configure-deploy", + "hydra/self-hosted/gitlab", + "hydra/self-hosted/merge-multiple-db-secrets", + "hydra/self-hosted/secrets-key-rotation", + "hydra/self-hosted/ssl-https-tls", + "hydra/guides/cookies", + "hydra/guides/cors", + "self-hosted/hydra/debug/csrf", + "oel/hydra/scalability", + "hydra/self-hosted/production", + "hydra/self-hosted/deploy-hydra-example", + "hydra/self-hosted/kubernetes-helm-chart", + ], + }, + { + type: "category", + label: "Reference", + items: [ + "hydra/reference/api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "hydra/cli", + }, + ], + }, + { + SDK: [ + "hydra/sdk/overview", + "hydra/self-hosted/go", + "hydra/self-hosted/js", + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Ory Keto", + className: "sidebar-icon sidebar-icon-keto", + items: [ + "oel/keto/index", + "keto/install", + "keto/guides/v0.7-migration", + "keto/guides/migrating-legacy-policies", + "keto/guides/upgrade", + "oel/keto/quickstart", + "self-hosted/oel/keto/changelog", + { + type: "category", + label: "Configuration", + items: [ + "self-hosted/oel/keto/configuration", + "keto/reference/configuration-editor", + ], + }, + { + type: "category", + label: "Guides", + items: ["keto/guides/production"], + }, + { + Reference: [ + "keto/reference/rest-api", + "keto/reference/proto-api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "keto/cli", + }, + ], + }, + { + SDK: ["keto/sdk/overview", "keto/self-hosted/go"], + }, + ], + }, + ], + }, + { + type: "category", + label: "Ory Polis", + className: "sidebar-icon sidebar-icon-polis", + collapsed: true, + collapsible: true, + items: [ + "oel/polis/index", + "polis/install", + "self-hosted/oel/polis/changelog", + "oel/polis/quickstart", + { + type: "category", + label: "Enterprise SSO", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/saml-federation/index", + }, + items: [ + { + type: "category", + label: "Concepts", + link: { + type: "doc", + id: "polis/sso-flow/index", + }, + items: [ + "polis/sso-flow/index", + "polis/sso-flow/example-flow", + "polis/security", + ], + }, + { + type: "category", + label: "Configuration", + items: [ + "polis/deploy/env-variables", + "polis/guides/configuring-saml-sso", + "polis/guides/login-with-saml-sso", + "polis/deploy/pre-loaded-connections", + ], + }, + { + type: "category", + label: "Guides", + link: { + type: "doc", + id: "polis/guides/service", + }, + items: [ + "polis/guides/service", + "polis/guides/npm-library", + "polis/upgrade", + "polis/guides/examples", + "polis/sbom", + "polis/container-signing", + "polis/events", + "polis/observability", + { + type: "category", + label: "Frameworks", + items: [ + { + type: "autogenerated", + dirName: "polis/guides/frameworks", + }, + ], + }, + { + type: "category", + label: "Deployment", + items: [ + { + type: "autogenerated", + dirName: "polis/guides/deployment", + }, + ], + }, + ], + }, + { + type: "category", + label: "SAML SSO Providers", + link: { + type: "doc", + id: "polis/sso-providers/index", + }, + items: [ + { + type: "autogenerated", + dirName: "polis/sso-providers", + }, + ], + }, + ], + }, + { + type: "category", + label: "Directory Sync", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/directory-sync/index", + }, + items: [ + "polis/directory-sync/quickstart", + "polis/directory-sync/api-reference", + { + type: "category", + label: "Guides", + collapsed: true, + link: { + type: "generated-index", + }, + items: [ + "polis/directory-sync/webhooks", + "polis/directory-sync/events", + "polis/directory-sync/observability", + "polis/directory-sync/examples", + "polis/directory-sync/faq", + { + type: "category", + label: "Directory providers", + items: [ + { + type: "autogenerated", + dirName: "polis/directory-sync/providers", + }, + ], + }, + { + type: "category", + label: "Frameworks", + items: [ + { + type: "autogenerated", + dirName: "polis/directory-sync/guides", + }, + ], + }, + ], + }, + ], + }, + { + type: "category", + label: "Admin Portal", + collapsed: false, + collapsible: false, + link: { + type: "doc", + id: "polis/admin-portal/index", + }, + items: [ + { + type: "category", + label: "Guides", + collapsed: true, + link: { + type: "generated-index", + }, + items: [ + "polis/admin-portal/enterprise-sso", + "polis/admin-portal/setup-links-enterprise-sso", + "polis/admin-portal/directory-sync", + "polis/admin-portal/setup-links-directory-sync", + ], + }, + ], + }, + "polis/reference/api", + ], + }, + { + type: "category", + label: "Ory Oathkeeper", + className: "sidebar-icon sidebar-icon-oathkeeper", + collapsed: true, + collapsible: true, + items: [ + "oel/oathkeeper/index", + "oathkeeper/install", + "self-hosted/oel/oathkeeper/upgrade-oathkeeper", + "self-hosted/oel/oathkeeper/changelog", + { + type: "category", + label: "Configure", + collapsed: false, + collapsible: false, + items: [ + "self-hosted/oel/oathkeeper/configuration", + "oathkeeper/reference/configuration-editor", + ], + }, + { + type: "category", + label: "Guides", + collapsed: false, + collapsible: false, + items: [ + "oathkeeper/guides/proxy-websockets", + "oathkeeper/guides/traefik-proxy-integration", + "oathkeeper/api-access-rules", + { + type: "category", + label: "Handlers", + items: [ + "oathkeeper/pipeline", + "oathkeeper/pipeline/authn", + "oathkeeper/pipeline/authz", + "oathkeeper/pipeline/mutator", + "oathkeeper/pipeline/error", + ], + }, + "oathkeeper/grpc-middleware", + "oel/oathkeeper/configure-deploy", + ], + }, + { + type: "category", + label: "Reference", + collapsed: false, + collapsible: false, + items: [ + "oathkeeper/reference/api", + { + "Command Line Interface (CLI)": [ + { + type: "autogenerated", + dirName: "oathkeeper/cli", + }, + ], + }, + "oathkeeper/sdk", + ], + }, + ], + }, + { + type: "category", + label: "Operations", + items: [ + "self-hosted/operations/tracing", + "self-hosted/operations/api-access-control", + "self-hosted/operations/scalability", + "self-hosted/operations/observability", + "self-hosted/operations/logging", + "oss/upgrading", + "oss/changelog", + "oss/telemetry", + ], + }, + ], + }, +] + +export default ossSidebar diff --git a/sidebars-quickstarts.ts b/sidebars-quickstarts.ts new file mode 100644 index 0000000000..6729cded5f --- /dev/null +++ b/sidebars-quickstarts.ts @@ -0,0 +1,359 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 + +/** + * Quickstarts sidebars per deployment. Each deployment-specific sidebar has a root category + * ("Ory Network", "Ory Enterprise License", "Ory Open Source") for consistency. + * Deployment switcher in sidebar shows only on these routes and links to network/oel/oss kratos/intro. + */ + +const overviewAndNetwork = [ + { + type: "doc", + id: "getting-started/overview", + label: "Quickstarts", + }, + { + type: "category", + label: "Ory Network", + collapsed: false, + collapsible: false, + className: "sidebar-quickstart-top-level", + items: [ + { + type: "category", + label: "Identity & AuthN", + className: "sidebar-icon sidebar-icon-kratos", + items: [ + "network/kratos/quickstarts/intro", + "network/kratos/quickstarts/identity-model", + "network/kratos/quickstarts/mfa-overview", + ], + }, + { + type: "category", + label: "Fine-grained Permissions", + className: "sidebar-icon sidebar-icon-keto", + items: [ + "network/keto/quickstarts/index", + "network/keto/quickstarts/overview", + ], + }, + { + type: "category", + label: "Delegated AuthZ & Federated AuthN", + className: "sidebar-icon sidebar-icon-hydra", + items: [ + "network/hydra/quickstarts/index", + "network/hydra/quickstarts/ory-network-oauth2", + ], + }, + { + type: "category", + label: "Enterprise SSO AuthZ", + className: "sidebar-icon sidebar-icon-polis", + items: [ + "network/polis/quickstarts/index", + "oel/polis/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Proxy-based Access Control", + className: "sidebar-icon sidebar-icon-oathkeeper", + items: ["network/oathkeeper/quickstarts/index"], + }, + ], + }, + { + type: "category", + label: "Ory Enterprise License", + collapsed: false, + collapsible: false, + className: "sidebar-quickstart-top-level", + items: [ + { + type: "category", + label: "Ory Kratos", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-kratos", + items: [ + "oel/kratos/quickstarts/intro", + "oel/kratos/quickstarts/quickstart", + "oel/kratos/quickstarts/identity-model", + "oel/kratos/quickstarts/mfa-overview", + ], + }, + { + type: "category", + label: "Ory Keto", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-keto", + items: [ + "oel/keto/quickstarts/index", + "oel/keto/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Hydra", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-hydra", + items: [ + "oel/hydra/quickstarts/index", + "oel/hydra/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Polis", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-polis", + items: [ + "oel/polis/quickstarts/index", + "oel/polis/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Oathkeeper", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-oathkeeper", + items: [ + "oel/oathkeeper/quickstarts/index", + "oel/oathkeeper/quickstarts/configure-deploy", + ], + }, + ], + }, + { + type: "category", + label: "Ory Open Source", + collapsed: false, + collapsible: false, + className: "sidebar-quickstart-top-level", + items: [ + { + type: "category", + label: "Ory Kratos", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-kratos", + items: [ + "oss/kratos/quickstarts/intro", + "oss/kratos/quickstarts/quickstart", + "oss/kratos/quickstarts/identity-model", + "oss/kratos/quickstarts/mfa-overview", + ], + }, + { + type: "category", + label: "Ory Keto", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-keto", + items: [ + "oss/keto/quickstarts/index", + "oss/keto/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Hydra", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-hydra", + items: [ + "oss/hydra/quickstarts/index", + "oss/hydra/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Polis", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-polis", + items: [ + "oss/polis/quickstarts/index", + "oss/polis/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Oathkeeper", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-oathkeeper", + items: [ + "oss/oathkeeper/quickstarts/index", + "oss/oathkeeper/quickstarts/configure-deploy", + ], + }, + ], + }, +] + +// Network-only: Quickstarts doc + Ory Network category (for overview when deployment = network) +const overviewAndNetworkOnly = [overviewAndNetwork[0], overviewAndNetwork[1]] + +const overviewAndOel = [ + { + type: "doc", + id: "getting-started/overview", + label: "Quickstarts", + }, + { + type: "category", + label: "Ory Enterprise License", + collapsed: false, + collapsible: false, + className: "sidebar-quickstart-top-level", + items: [ + { + type: "category", + label: "Ory Kratos", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-kratos", + items: [ + "oel/kratos/quickstarts/intro", + "oel/kratos/quickstarts/quickstart", + "oel/kratos/quickstarts/identity-model", + "oel/kratos/quickstarts/mfa-overview", + ], + }, + { + type: "category", + label: "Ory Keto", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-keto", + items: [ + "oel/keto/quickstarts/index", + "oel/keto/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Hydra", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-hydra", + items: [ + "oel/hydra/quickstarts/index", + "oel/hydra/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Polis", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-polis", + items: [ + "oel/polis/quickstarts/index", + "oel/polis/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Oathkeeper", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-oathkeeper", + items: [ + "oel/oathkeeper/quickstarts/index", + "oel/oathkeeper/quickstarts/configure-deploy", + ], + }, + ], + }, +] + +const overviewAndOss = [ + { + type: "doc", + id: "getting-started/overview", + label: "Quickstarts", + }, + { + type: "category", + label: "Ory Open Source", + collapsed: false, + collapsible: false, + className: "sidebar-quickstart-top-level", + items: [ + { + type: "category", + label: "Ory Kratos", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-kratos", + items: [ + "oss/kratos/quickstarts/intro", + "oss/kratos/quickstarts/quickstart", + "oss/kratos/quickstarts/identity-model", + "oss/kratos/quickstarts/mfa-overview", + ], + }, + { + type: "category", + label: "Ory Keto", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-keto", + items: [ + "oss/keto/quickstarts/index", + "oss/keto/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Hydra", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-hydra", + items: [ + "oss/hydra/quickstarts/index", + "oss/hydra/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Polis", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-polis", + items: [ + "oss/polis/quickstarts/index", + "oss/polis/quickstarts/quickstart", + ], + }, + { + type: "category", + label: "Ory Oathkeeper", + collapsed: true, + collapsible: true, + className: "sidebar-icon sidebar-icon-oathkeeper", + items: [ + "oss/oathkeeper/quickstarts/index", + "oss/oathkeeper/quickstarts/configure-deploy", + ], + }, + ], + }, +] + +export const quickstartsNetworkSidebar = overviewAndNetwork +export const quickstartsNetworkOnlySidebar = overviewAndNetworkOnly +export const quickstartsOelSidebar = overviewAndOel +export const quickstartsOssSidebar = overviewAndOss + +// Legacy single sidebar: default for overview (shows all three sections; DocRoot overrides to deployment-specific) +export default quickstartsNetworkSidebar diff --git a/sidebars-workforce.ts b/sidebars-workforce.ts new file mode 100644 index 0000000000..3bb42543f7 --- /dev/null +++ b/sidebars-workforce.ts @@ -0,0 +1,12 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 +// sidebars-workforce.ts +const workforceSidebar = [ + { + type: "category", + label: "Workforce", + items: ["solutions/solution_workforce"], + }, +] + +export default workforceSidebar diff --git a/sidebars.ts b/sidebars.ts new file mode 100644 index 0000000000..afcb3c39e7 --- /dev/null +++ b/sidebars.ts @@ -0,0 +1,193 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 + +// sidebars.ts +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs" + +import { SidebarItemConfig } from "@docusaurus/plugin-content-docs/src/sidebars/types" + +type SidebarItemsConfig = SidebarItemConfig[] + +// sidebars.ts +//import type { SidebarsConfig } from "@docusaurus/plugin-content-docs" + +// adjust imports depending on how those files export +import oelSidebar from "./sidebars-oel" +import networkSidebar from "./sidebars-network" +import ossSidebar from "./sidebars-oss" +import agenticSidebar from "./sidebars-agentic" +import ciamSidebar from "./sidebars-ciam" +import b2bSidebar from "./sidebars-b2b" +import workforceSidebar from "./sidebars-workforce" +import quickstartsSidebar, { + quickstartsNetworkSidebar, + quickstartsNetworkOnlySidebar, + quickstartsOelSidebar, + quickstartsOssSidebar, +} from "./sidebars-quickstarts" + +const cli: SidebarItemsConfig = [ + { + type: "category", + label: "Ory CLI reference", + collapsed: false, + collapsible: false, + link: { + type: "generated-index", + slug: "/category/ory-cli-reference", + }, + items: [ + "guides/cli/installation", + "guides/cli/cli-basics", + "guides/cli/identity-cli", + "guides/cli/oauth2-cli", + "guides/cli/configure-permission-service", + "guides/cli/proxy-and-tunnel", + "guides/cli/config-with-cli", + { + type: "category", + label: "CLI commands reference", + link: { + type: "generated-index", + }, + items: [ + { + type: "autogenerated", + dirName: "cli", + }, + ], + }, + ], + }, +] + +const api: SidebarItemsConfig = [ + "reference/api", + "ecosystem/api-design", + { + type: "category", + label: "Operations", + collapsed: false, + collapsible: false, + link: { + type: "generated-index", + slug: "/category/operations-reference", + }, + items: [ + "concepts/personal-access-token", + "guides/cors", + "guides/api-rest-pagination", + "guides/rate-limits", + "guides/ip-allowlist", + "api/eventual-consistency", + "kratos/reference/jsonnet", + "guides/user-impersonation", + ], + }, +] + +const troubleshooting: SidebarItemsConfig = [ + { + type: "category", + label: "Troubleshooting", + collapsible: false, + collapsed: false, + link: { + type: "generated-index", + slug: "/category/troubleshooting-reference", + }, + items: [ + { + type: "autogenerated", + dirName: "troubleshooting", + }, + "oauth2-oidc/identity-provider-integration-settings", + "guides/upgrade/sdk-v1", + "hydra/debug", + "hydra/debug/logout", + "hydra/debug/token-endpoint-auth-method", + ], + }, +] + +const security: SidebarItemsConfig = [ + { + type: "category", + label: "Security and compliance", + collapsible: false, + collapsed: false, + link: { + type: "generated-index", + slug: "/category/security-compliance", + }, + items: [ + { + type: "autogenerated", + dirName: "security-compliance", + }, + "kratos/concepts/security", + "concepts/password-policy", + "hydra/security-architecture", + ], + }, +] + +const elements: SidebarItemsConfig = [ + "elements/index", + { + type: "category", + label: "Guides", + collapsible: false, + link: { + type: "generated-index", + title: "Quickstarts", + description: "Learn how to use Ory Elements in your application!", + slug: "/elements/guides", + keywords: ["guides"], + }, + items: [ + { + type: "autogenerated", + dirName: "elements/guides", + }, + ], + }, + { + type: "category", + label: "Reference", + collapsible: false, + link: { + type: "generated-index", + title: "Ory Elements Reference", + description: "Learn about the most important Ory Elements concepts!", + slug: "/elements/reference", + keywords: ["guides"], + }, + items: [ + ...require("./docs/elements/reference/typedoc-sidebar.ts").items, + "elements/css-reference", + ], + }, +] + +const sidebars: SidebarsConfig = { + networkSidebar, + oelSidebar, + ossSidebar, + agenticSidebar, + ciamSidebar, + b2bSidebar, + workforceSidebar, + quickstartsSidebar, + quickstartsNetworkSidebar, + quickstartsNetworkOnlySidebar, + quickstartsOelSidebar, + quickstartsOssSidebar, + api, + cli, + troubleshooting, + security, + elements, +} + +export default sidebars diff --git a/src/components/ConfigMarkdown/index.tsx b/src/components/ConfigMarkdown/index.tsx index 0141758597..5f4f6a7992 100644 --- a/src/components/ConfigMarkdown/index.tsx +++ b/src/components/ConfigMarkdown/index.tsx @@ -273,7 +273,7 @@ export default function ConfigMarkdown(props: { src: string; binary: string }) {

To find out more about edge cases like setting string array values through environmental variables head to the{" "} - Configuration section. + Configuration section.

{content} diff --git a/src/components/Examples/example-list.module.css b/src/components/Examples/example-list.module.css index d65c638732..d10020adba 100644 --- a/src/components/Examples/example-list.module.css +++ b/src/components/Examples/example-list.module.css @@ -1,78 +1,7 @@ -.card { - background-color: var(--ifm-pre-background); - color: inherit; - padding: 1rem; - display: grid; - height: 100%; - grid-template-columns: 2rem 1.75fr; - grid-template-rows: 1fr; - gap: 1rem; - grid-template-areas: "logo-img content"; - border-radius: 8px; - border: 1px solid var(--ifm-color-emphasis-200); - transition: all 0.2s ease; -} - -.card:hover { - border-color: var(--ifm-color-emphasis-300); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); - transform: translateY(-2px); -} - -.cardcontent { - display: flex; - justify-content: space-between; - flex-direction: column; -} - -.cardimage { - grid-area: logo-img; - width: 2rem; -} - -.cardtitle { - margin-bottom: 0.25rem; - font-size: var(--ifm-h4-font-size); -} - -.cardbuttongroup { - grid-area: buttons; - display: flex; - flex-direction: row; -} - -.cardbutton { - display: flex; - align-items: center; - background-color: transparent; - border: 1px solid var(--ifm-color-emphasis-300); - color: inherit; - padding: 8px 12px; - cursor: pointer; - border-radius: 4px; - transition: all 0.2s ease; - font-size: 0.8rem; -} - -.cardbutton:hover { - background-color: var(--ifm-color-emphasis-200); - border-color: var(--ifm-color-emphasis-400); - transform: translateY(-1px); -} - -.cardbutton:first-child { - margin-right: 0.5rem; -} - -.cardbuttonimg { - fill: var(--ifm-font-color-base); - margin-right: 0.25rem; -} - .examplesection { max-width: var(--ifm-container-width-xl); margin: 0 auto; - padding: 0rem 0rem 3rem; + padding: 0 0 3rem; } .examplesectionheading { @@ -82,7 +11,7 @@ .cardgrid { margin: 0 auto; display: grid; - gap: 1rem; + gap: var(--spacing-ory-4, 1rem); } @media screen and (min-width: 600px) { diff --git a/src/components/Examples/example-list.tsx b/src/components/Examples/example-list.tsx index 043b262f0b..5402200093 100644 --- a/src/components/Examples/example-list.tsx +++ b/src/components/Examples/example-list.tsx @@ -1,6 +1,6 @@ import React from "react" -import styles from "./example-list.module.css" import Link from "@docusaurus/Link" +import styles from "./example-list.module.css" export interface PropTypes { id: string @@ -28,30 +28,43 @@ const ExampleCard = ({ repo, docs, }: ExampleCard) => ( -
-
- {languageLogoAlt} -
-
-
-

{title}

-

- by @{author} -

+
+
+
+ {languageLogoAlt} +
+

{title}

+

+ by{" "} + + @{author} + +

+
-
- +
+ Code + {docs && ( - + Docs + )}
-
+
) const ExampleList = ({ id, examples, title, description }: PropTypes) => (
- {title &&

{title}

} - {description &&

{description}

} + {title &&

{title}

} + {description && ( +

{description}

+ )}
{examples.map((examples, index) => ( -
+
))} diff --git a/src/components/OryArchitectureDiagram.tsx b/src/components/OryArchitectureDiagram.tsx new file mode 100644 index 0000000000..f8bbde92fb --- /dev/null +++ b/src/components/OryArchitectureDiagram.tsx @@ -0,0 +1,240 @@ +// Copyright © 2022 Ory Corp +// SPDX-License-Identifier: Apache-2.0 + +/** + * Ory IAM architecture diagram (React Flow). + */ + +import React, { useCallback, useMemo, useEffect, useRef, useState } from "react" +import { + ReactFlow, + useNodesState, + useEdgesState, + addEdge, + reconnectEdge, + Connection, + Edge, + Controls, + ControlButton, + useReactFlow, +} from "@xyflow/react" +import "@xyflow/react/dist/style.css" +import type { ProductKey } from "./welcomePage/solutionDesignStepper/types/solutionDesignTypes" +import { buildArchitectureGraph } from "./oryArchitectureDiagramModel" +import { architectureDiagramEdgeTypes } from "./solutionDesignDiagram/ui/edges" +import { architectureDiagramNodeTypes } from "./solutionDesignDiagram/ui/nodes" + +export interface OryArchitectureDiagramProps { + selectedProducts?: ProductKey[] + scimSelected?: boolean + currentStep?: number + /** First step: declining Ory Kratos enables "Your existing IdP" in the diagram. */ + identityAnswer?: "yes" | "no" + readonly?: boolean +} + +function FitViewOnChange({ + selectedProducts, +}: { + selectedProducts: ProductKey[] +}) { + const { fitView } = useReactFlow() + useEffect(() => { + const id = setTimeout(() => { + fitView({ padding: 40, duration: 200, minZoom: 1 }) + }, 50) + return () => clearTimeout(id) + }, [selectedProducts, fitView]) + return null +} + +const controlIconSvgProps = { + width: 16, + height: 16, + viewBox: "0 0 24 24" as const, + fill: "none" as const, + stroke: "currentColor", + strokeWidth: 2, + strokeLinecap: "round" as const, + strokeLinejoin: "round" as const, +} + +function DiagramControls({ + hideZoomFit, + toggleFullscreen, + isFullscreen, +}: { + hideZoomFit: boolean + toggleFullscreen: () => void + isFullscreen: boolean +}) { + const { zoomIn, zoomOut, fitView } = useReactFlow() + const handleFitView = useCallback( + () => fitView({ padding: 40, duration: 200, minZoom: 1 }), + [fitView], + ) + return ( + + {!hideZoomFit && ( + <> + zoomIn()} + title="Zoom in" + aria-label="Zoom in" + > + + + + + + + + zoomOut()} + title="Zoom out" + aria-label="Zoom out" + > + + + + + + + + + + + + + + )} + + {isFullscreen ? ( + + + + ) : ( + + + + )} + + + ) +} + +export default function OryArchitectureDiagram({ + selectedProducts = [], + scimSelected = false, + currentStep, + identityAnswer, + readonly = true, +}: OryArchitectureDiagramProps) { + const { nodes: graphNodes, edges: graphEdges } = useMemo( + () => + buildArchitectureGraph( + selectedProducts, + scimSelected, + currentStep, + identityAnswer, + ), + [selectedProducts, scimSelected, currentStep, identityAnswer], + ) + + const [nodes, setNodes, onNodesChange] = useNodesState(graphNodes) + const [edges, setEdges, onEdgesChange] = useEdgesState(graphEdges) + + useEffect(() => { + setNodes(graphNodes) + setEdges(graphEdges) + }, [graphNodes, graphEdges, setNodes, setEdges]) + + const onConnect = useCallback( + (params: Connection) => + setEdges((eds) => addEdge({ ...params, type: "smoothstep-solid" }, eds)), + [setEdges], + ) + + const onReconnect = useCallback( + (oldEdge: Edge, newConnection: Connection) => + setEdges((eds) => reconnectEdge(oldEdge, newConnection, eds)), + [setEdges], + ) + + const containerRef = useRef(null) + const [isFullscreen, setIsFullscreen] = useState(false) + + const [hideZoomFit, setHideZoomFit] = useState(false) + useEffect(() => { + const mql = window.matchMedia("(max-width: 996px)") + const handler = () => setHideZoomFit(mql.matches) + handler() + mql.addEventListener("change", handler) + return () => mql.removeEventListener("change", handler) + }, []) + + const toggleFullscreen = useCallback(() => { + const el = containerRef.current + if (!el) return + if (!document.fullscreenElement) { + el.requestFullscreen?.().then(() => setIsFullscreen(true)) + } else { + document.exitFullscreen?.().then(() => setIsFullscreen(false)) + } + }, []) + + useEffect(() => { + const handler = () => setIsFullscreen(!!document.fullscreenElement) + document.addEventListener("fullscreenchange", handler) + return () => document.removeEventListener("fullscreenchange", handler) + }, []) + + return ( +
+ + + + +
+ ) +} diff --git a/src/components/OryHeroDemo.jsx b/src/components/OryHeroDemo.jsx new file mode 100644 index 0000000000..cd37140e5f --- /dev/null +++ b/src/components/OryHeroDemo.jsx @@ -0,0 +1,233 @@ +import React, { useState, useEffect, useRef } from "react" + +const OryHeroDemo = () => { + const [lines, setLines] = useState([ + { + type: "line", + number: 1, + text: "From zero to registered user in minutes!", + }, + { type: "line", number: 2, text: "Click 'Run'." }, + ]) + const [isRunning, setIsRunning] = useState(false) + const [hasRun, setHasRun] = useState(false) + const terminalRef = useRef(null) + + const script = [ + // CLI setup + { type: "comment", text: "# One-time project setup via Ory CLI", delay: 0 }, + { type: "command", text: "brew install ory/tap/cli", delay: 300 }, + { type: "output", text: "Installing ory...", delay: 500 }, + { type: "success", text: "✓ Installed", delay: 600 }, + { type: "command", text: "ory auth", delay: 400 }, + { + type: "output", + text: "Opening browser to create your Ory developer account...", + delay: 500, + }, + { type: "success", text: "✓ Authenticated as ", delay: 700 }, + { type: "command", text: 'ory create project --name "MyApp"', delay: 400 }, + { type: "output", text: "Project slug: myapp-abc123", delay: 600 }, + { type: "success", text: "✓ Project created", delay: 200 }, + + // API registration + { type: "comment", text: "# Register a user via Ory API", delay: 600 }, + { + type: "note", + text: "Note: Traits depend on your identity schema. This sample uses Ory's 'username' preset schema.", + delay: 400, + }, + { type: "command", text: "curl -s -X GET \\", delay: 300 }, + { + type: "command-cont", + text: ' "https://.projects.oryapis.com/self-service/registration/api"', + delay: 100, + }, + { + type: "output", + text: '{ "id": "", "type": "api", "expires_at":"...","issued_at":"...","request_url":"/self-service/registration/api","ui":{"action":".projects.oryapis.com/self-service/registration?flow=","method":"POST", ... } }', + delay: 500, + }, + { type: "command", text: "curl -s -X POST \\", delay: 400 }, + { + type: "command-cont", + text: ' -H "Content-Type: application/json" \\', + delay: 100, + }, + { + type: "command-cont", + text: ' -d \'{"traits":{"username":""},"password":"","method":"password"}\' \\', + delay: 100, + }, + { + type: "command-cont", + text: ' "https://.projects.oryapis.com/self-service/registration?flow="', + delay: 100, + }, + { + type: "output", + text: '{"identity":{"id":"...","schema_id":"preset://username","schema_url":".projects.oryapis.com/schemas/cHJlc2V0Oi8vdXNlcm5hbWU","state":"active", ... } }', + delay: 600, + }, + { type: "success", text: "✓ User registered!", delay: 400 }, + { + type: "link", + text: "Create your free project via Ory Console →", + url: "https://console.ory.sh/", + delay: 400, + }, + ] + + const runDemo = async () => { + if (isRunning) return + setIsRunning(true) + setHasRun(true) + setLines([]) + + for (let i = 0; i < script.length; i++) { + const item = script[i] + await new Promise((resolve) => setTimeout(resolve, item.delay)) + setLines((prev) => [...prev, item]) + } + + setIsRunning(false) + } + + const reset = () => { + setLines([ + { + type: "line", + number: 1, + text: "From zero to registered user in minutes!", + }, + { type: "line", number: 2, text: "Click 'Run'." }, + ]) + setHasRun(false) + } + + useEffect(() => { + if (terminalRef.current) { + terminalRef.current.scrollTop = terminalRef.current.scrollHeight + } + }, [lines]) + + return ( +
+ + +
+
+
+
+
+
+
+ + Terminal + +
+ +
+ {lines.map((line, i) => ( +
+ {line.type === "line" && ( + <> + + {line.number} + + $ + + {line.text} + + + )} + + {line.type === "comment" && ( +
+ {line.text} +
+ )} + + {line.type === "note" && ( +
+ {line.text} +
+ )} + + {line.type === "command" && ( +
+ ${" "} + {line.text} +
+ )} + + {line.type === "command-cont" && ( +
{line.text}
+ )} + + {line.type === "output" && ( +
{line.text}
+ )} + + {line.type === "success" && ( +
+ {line.text} +
+ )} + + {line.type === "link" && ( + + )} +
+ ))} + + {isRunning && ( + + )} +
+ +
+ + From zero to registered user in minutes + + +
+
+
+ ) +} + +export default OryHeroDemo diff --git a/src/components/OryNetworkCta/ory-network-cta.css b/src/components/OryNetworkCta/ory-network-cta.css deleted file mode 100644 index 9001d5fe0c..0000000000 --- a/src/components/OryNetworkCta/ory-network-cta.css +++ /dev/null @@ -1,135 +0,0 @@ -.ory-network-cta { - --ory-cyan-50: #ecfeff; - --ory-cyan-100: #cffafe; - --ory-cyan-500: #06b6d4; - --ory-cyan-900: #164e63; - --ory-gray-900: #0f172a; - - position: relative; - margin-top: 1em; - flex-shrink: 0; - max-height: var(--ory-network-cta-height); - background-color: var(--ory-cyan-500); -} - -.ory-network-cta:hover { - text-decoration: none; -} - -.ory-network-cta__background { - position: absolute; - inset: 0; -} - -.ory-network-cta__grid { - background: url("/img/bg-grid-cell-medium.svg") center; - position: absolute; - inset: 0; - z-index: 0; -} - -.ory-network-cta__gradient { - background: linear-gradient( - 164deg, - var(--ory-cyan-500) 64.41%, - transparent 100% - ); - position: absolute; - inset: 0; - z-index: 1; -} - -.ory-network-cta__content { - position: relative; - padding: 16px; - display: flex; - flex-direction: column; - gap: 16px; - justify-content: space-between; - height: 100%; - z-index: 10; -} - -.ory-network-cta__title-and-paragraph { - display: flex; - flex-direction: column; - gap: 16px; -} - -.ory-network-cta__title { - font-style: normal; - color: var(--ory-cyan-50); - font-size: 24px; - line-height: 100%; - font-weight: 600; -} - -.ory-network-cta__paragraph { - font-size: 16px; - line-height: 125%; - color: var(--ory-cyan-100); -} - -.ory-network-cta__button { - /* Will be overridden in sufficiently wide container queries */ - display: none; - - padding: 9px 15px; - background: var(--ory-cyan-50); - color: var(--ory-cyan-900); - font-weight: 500; - word-wrap: normal; -} - -.ory-network-cta__button:hover { - text-decoration: none; -} - -.ory-network-cta__inline-get-started { - display: block; -} - -@media (min-width: 1070px) { - .ory-network-cta__button { - display: block; - text-align: center; - } - - .ory-network-cta__inline-get-started { - display: none; - } -} - -@media (min-width: 1230px) { - .ory-network-cta__content { - padding: 24px; - gap: 48px; - } - - .ory-network-cta__title { - font-size: 26px; - line-height: 100%; - font-weight: 600; - } -} - -@media (min-width: 1370px) { - .ory-network-cta__paragraph { - font-size: 18px; - line-height: 150%; - } -} - -@media (min-width: 1450px) { - .ory-network-cta__content { - gap: 32px; - } - - .ory-network-cta__title { - font-size: 36px; - } - - .ory-network-cta__button { - padding: 12px 20px; - } -} diff --git a/src/components/OryNetworkCta/ory-network-cta.tsx b/src/components/OryNetworkCta/ory-network-cta.tsx index c4cc9a7be5..fe99f9e493 100644 --- a/src/components/OryNetworkCta/ory-network-cta.tsx +++ b/src/components/OryNetworkCta/ory-network-cta.tsx @@ -1,194 +1,44 @@ import React from "react" -import "./ory-network-cta.css" +import useBaseUrl from "@docusaurus/useBaseUrl" -const ctaVariants = [ - { - title: "Ory Network", - content: ( - <> - The best way to manage identities, authentication, authorization, and - access control—designed for speed, security, and compliance. - - ), - cta: "Sign up for a free account", - href: "https://console.ory.sh/?mtm_campaign=Docs-SideCta&mtm_kwd=variant-0", - }, -] +// Resolve image via bundler so path works in dev and build (baseUrl: /docs/) +import networkImg from "@site/src/static/img/network-cta/network.png" -export const OryNetworkCta = () => { - const { cta, content, title, href } = ctaVariants[0] - - return ( -
-
- -
-
-

{title}

-

{content}

- - {cta} - -
-
- ) +const CTA_CONFIG = { + title: "Ory Network", + description: + "The largest Identity and Access Management network in the world. So you can get back to building your business.", + ctaLabel: "Sign up for free", + href: "https://console.ory.sh/?mtm_campaign=Docs-SideCta&mtm_kwd=variant-0", } -function Logo({ className }: { className?: string }) { +export const OryNetworkCta = () => { + const { title, description, ctaLabel, href } = CTA_CONFIG + const imageSrc = + typeof networkImg === "string" + ? networkImg + : (networkImg as { default?: string }).default ?? + useBaseUrl("/img/network-cta/network.png") + return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
+

+ {title} +

+

+ {description} +

+
+ + {ctaLabel} + + ) } diff --git a/src/components/QuickStarts/CategoryFilter.tsx b/src/components/QuickStarts/CategoryFilter.tsx new file mode 100644 index 0000000000..7f58ef52a1 --- /dev/null +++ b/src/components/QuickStarts/CategoryFilter.tsx @@ -0,0 +1,44 @@ +import React from "react" +import clsx from "clsx" +import type { QuickstartCategory } from "./types" + +interface CategoryFilterProps { + categories: QuickstartCategory[] + activeCategory: QuickstartCategory + onCategoryChange: (categoryId: string) => void +} + +export const CategoryFilter: React.FC = ({ + categories, + activeCategory, + onCategoryChange, +}) => { + return ( +
+ + Categories + + {categories.map((cat) => ( + + ))} +
+ ) +} diff --git a/src/components/QuickStarts/DeploymentModeSelector.tsx b/src/components/QuickStarts/DeploymentModeSelector.tsx new file mode 100644 index 0000000000..064f84601d --- /dev/null +++ b/src/components/QuickStarts/DeploymentModeSelector.tsx @@ -0,0 +1,59 @@ +import React, { useRef, useState } from "react" +import clsx from "clsx" +import { DEPLOYMENT_OPTIONS } from "./constants" +import { useClickOutside } from "./hooks/useClickOutside" +import type { DeploymentMode } from "./types" + +interface DeploymentModeSelectorProps { + value: DeploymentMode + onChange: (mode: DeploymentMode) => void +} + +export const DeploymentModeSelector: React.FC = ({ + value, + onChange, +}) => { + const [menuOpen, setMenuOpen] = useState(false) + const menuRef = useRef(null) + + useClickOutside(menuRef, menuOpen, () => setMenuOpen(false)) + + return ( +
+ + + {menuOpen && ( +
+ {DEPLOYMENT_OPTIONS.map((opt) => ( + + ))} +
+ )} +
+ ) +} diff --git a/src/components/QuickStarts/LanguageFilter.tsx b/src/components/QuickStarts/LanguageFilter.tsx new file mode 100644 index 0000000000..4287c5a9a8 --- /dev/null +++ b/src/components/QuickStarts/LanguageFilter.tsx @@ -0,0 +1,118 @@ +import React, { useRef, useState, useImperativeHandle, forwardRef } from "react" +import clsx from "clsx" +import { LANGUAGE_META } from "./constants" +import { useClickOutside } from "./hooks/useClickOutside" +import { useLanguageGrouping } from "./hooks/useLanguageGrouping" + +interface LanguageFilterProps { + availableLanguages: string[] + activeLanguage: string + onLanguageChange: (language: string) => void +} + +export interface LanguageFilterRef { + close: () => void +} + +export const LanguageFilter = forwardRef< + LanguageFilterRef, + LanguageFilterProps +>(({ availableLanguages, activeLanguage, onLanguageChange }, ref) => { + const [menuOpen, setMenuOpen] = useState(false) + const menuRef = useRef(null) + const groupedLanguages = useLanguageGrouping(availableLanguages) + + useClickOutside(menuRef, menuOpen, () => setMenuOpen(false)) + + useImperativeHandle(ref, () => ({ + close: () => setMenuOpen(false), + })) + + if (availableLanguages.length <= 1) { + return null + } + + return ( +
+ + + {menuOpen && ( +
+ {["Web", "Mobile", "Backend", "Other"].map((group) => { + const langs = groupedLanguages[group] + if (!langs || langs.length === 0) { + return null + } + + return ( +
+
+ {group} +
+ {langs.map((meta) => ( + + ))} +
+ ) + })} +
+ +
+
+ )} +
+ ) +}) + +LanguageFilter.displayName = "LanguageFilter" diff --git a/src/components/QuickStarts/QuickstartGrid.tsx b/src/components/QuickStarts/QuickstartGrid.tsx new file mode 100644 index 0000000000..9c40fec56c --- /dev/null +++ b/src/components/QuickStarts/QuickstartGrid.tsx @@ -0,0 +1,49 @@ +import React from "react" +import { OverviewCard } from "@site/src/components/welcomePage/OverviewCard" +import type { QuickstartItem, DeploymentMode } from "./types" + +interface QuickstartGridProps { + items: QuickstartItem[] + deploymentMode: DeploymentMode +} + +/** Prefix doc path with deployment so links go to network/oel/oss variant. */ +function toDeploymentPath(path: string, deployment: DeploymentMode): string { + const normalized = path.startsWith("/") ? path : `/${path}` + // Some routes intentionally do not have per-deployment variants. + if ( + normalized.startsWith("/guides/") || + normalized.startsWith("/elements") || + normalized.startsWith("/getting-started/") + ) { + return normalized + } + return `/${deployment}${normalized}` +} + +export const QuickstartGrid: React.FC = ({ + items, + deploymentMode, +}) => { + const filteredItems = items.filter((item) => { + if (!item.deploymentModes) { + return true + } + return item.deploymentModes.includes(deploymentMode) + }) + + return ( +
+ {filteredItems.map((item) => ( +
+ +
+ ))} +
+ ) +} diff --git a/src/components/QuickStarts/QuickstartsOverviewHeading.tsx b/src/components/QuickStarts/QuickstartsOverviewHeading.tsx new file mode 100644 index 0000000000..f03af60430 --- /dev/null +++ b/src/components/QuickStarts/QuickstartsOverviewHeading.tsx @@ -0,0 +1,19 @@ +import React from "react" +import Heading from "@theme/Heading" +import { useQuickstartsDeployment } from "@site/src/contexts/QuickstartsDeploymentContext" +import type { QuickstartsDeploymentId } from "@site/src/contexts/QuickstartsDeploymentContext" + +const DEPLOYMENT_LABEL: Record = { + network: "Ory Network", + oel: "Ory Enterprise License", + oss: "Ory Open Source", +} + +/** Page title for /getting-started/overview — reflects selected deployment model. */ +export function QuickstartsOverviewHeading() { + const ctx = useQuickstartsDeployment() + const id = ctx?.deployment ?? "network" + const label = DEPLOYMENT_LABEL[id] + + return Quickstarts ({label}) +} diff --git a/src/components/QuickStarts/constants.ts b/src/components/QuickStarts/constants.ts new file mode 100644 index 0000000000..47bb54a9a3 --- /dev/null +++ b/src/components/QuickStarts/constants.ts @@ -0,0 +1,244 @@ +import type { QuickstartCategory, DeploymentMode, LanguageMeta } from "./types" + +export const CATEGORIES: QuickstartCategory[] = [ + { + id: "ory-kratos", + label: "Ory Kratos", + color: "var(--color-ory-product-kratos)", + items: [ + { + label: "Introduction to Ory Kratos", + to: "/kratos/quickstarts/intro", + description: "Identity management and authentication.", + deploymentModes: ["network", "oel", "oss"], + }, + { + label: "Get started with Ory Kratos", + to: "/kratos/quickstarts/quickstart", + description: + "Run Ory Kratos locally with Docker and explore the main flows.", + deploymentModes: ["oel", "oss"], + }, + { + label: "Get started with identity management", + to: "/kratos/quickstarts/identity_model", + description: "Identity management and authentication.", + deploymentModes: ["network", "oel", "oss"], + }, + { + label: "Get started with authentication", + to: "/guides/authentication", + description: + "Password, passwordless, passkey, and other authentication.", + deploymentModes: ["network", "oel", "oss"], + }, + { + label: "Get started with multi-factor authentication", + to: "/kratos/quickstarts/mfa-overview", + description: "Multi-factor authentication.", + deploymentModes: ["network", "oel", "oss"], + }, + ], + }, + { + id: "ory-keto", + label: "Ory Keto", + color: "var(--color-ory-product-keto)", + items: [ + { + label: "Introduction to Ory Keto", + to: "/keto/quickstarts", + description: "Relationship-based permissions system.", + deploymentModes: ["network", "oel", "oss"], + }, + { + label: "Get started with Ory Keto", + to: "/keto/quickstarts/overview", + description: + "Quickstart for understanding relationships and permission checks.", + deploymentModes: ["network"], + }, + { + label: "Get started with Ory Keto", + to: "/keto/quickstarts/quickstart", + description: + "Quickstart for understanding relationships and permission checks.", + deploymentModes: ["oel", "oss"], + }, + ], + }, + { + id: "ory-hydra", + label: "Ory Hydra", + color: "var(--color-ory-product-hydra)", + items: [ + { + label: "Introduction to Ory Hydra", + to: "/hydra/quickstarts", + description: "OAuth2 & OpenID Connect social sign-in concepts.", + deploymentModes: ["network", "oel", "oss"], + }, + { + label: "Get started with Ory Hydra", + to: "/hydra/quickstarts/ory-network-oauth2", + description: "Client credential and authorization code grant.", + deploymentModes: ["network"], + }, + { + label: "Get started with Ory Hydra", + to: "/hydra/quickstarts/quickstart", + description: + "Run Ory Hydra locally and try the most important OAuth2 flows.", + deploymentModes: ["oel"], + }, + { + label: "Get started with Ory Hydra", + to: "/hydra/quickstarts/quickstart", + description: + "Run Ory Hydra locally and try the most important OAuth2 flows.", + deploymentModes: ["oss"], + }, + ], + }, + { + id: "ory-polis", + label: "Ory Polis", + color: "var(--color-ory-product-polis)", + items: [ + { + label: "Introduction to Ory Polis", + to: "/polis/quickstarts", + description: + "Enterprise SSO for SAML and OIDC identity providers and SCIM provising.", + deploymentModes: ["network", "oel", "oss"], + }, + { + label: "Get started with Ory Polis", + to: "/polis/quickstarts/quickstart", + description: + "Quickstart for Enterprise SSO authentication and SCIM provisioning.", + deploymentModes: ["oel", "oss"], + }, + ], + }, + { + id: "ory-oathkeeper", + label: "Ory Oathkeeper", + color: "var(--color-ory-product-oathkeeper)", + items: [ + { + label: "Introduction to Ory Oathkeeper", + to: "/oathkeeper/quickstarts", + description: "Zero trust proxy concepts and architecture.", + deploymentModes: ["network", "oel", "oss"], + }, + { + label: "Configure and deploy Ory Oathkeeper", + to: "/oathkeeper/quickstarts/configure-deploy", + description: "Configure, build, and deploy Ory Oathkeeper.", + deploymentModes: ["oel", "oss"], + }, + ], + }, + { + id: "ory-elements", + label: "Ory Elements", + color: "var(--color-ory-product-elements)", + items: [ + { + label: "Ory Elements introduction", + to: "/elements", + description: + "Pre-built UI components for Ory self-service and OAuth2 flows.", + deploymentModes: ["network", "oel"], + }, + { + label: "Next.js App Router quickstart", + to: "/getting-started/integrate-auth/nextjs-app-router-quickstart", + description: "Use Ory Elements in a Next.js App Router application.", + deploymentModes: ["network", "oel"], + }, + { + label: "Next.js Pages Router quickstart", + to: "/getting-started/integrate-auth/nextjs-pages-router-quickstart", + description: "Use Ory Elements in a Next.js Pages Router application.", + deploymentModes: ["network", "oel"], + }, + ], + }, +] + +export const LANGUAGE_META: Partial> = { + nextjs: { + id: "nextjs", + label: "Next.js", + group: "Web", + icon: "/docs/img/examples/nextjs.svg", + }, + react: { + id: "react", + label: "React", + group: "Web", + icon: "/docs/img/examples/react.svg", + }, + vue: { + id: "vue", + label: "Vue", + group: "Web", + icon: "/docs/img/examples/vue.svg", + }, + flutter: { + id: "flutter", + label: "Flutter", + group: "Mobile", + icon: "/docs/img/examples/flutter.svg", + }, + "react-native": { + id: "react-native", + label: "React Native", + group: "Mobile", + icon: "/docs/img/examples/react.svg", + }, + go: { + id: "go", + label: "Go", + group: "Backend", + icon: "/docs/img/examples/go.svg", + }, + php: { + id: "php", + label: "PHP", + group: "Backend", + icon: "/docs/img/examples/php.svg", + }, + python: { + id: "python", + label: "Python", + group: "Backend", + icon: "/docs/img/examples/python.svg", + }, + django: { + id: "django", + label: "Django", + group: "Backend", + icon: "/docs/img/examples/django.svg", + }, + dotnet: { + id: "dotnet", + label: ".NET", + group: "Backend", + icon: "/docs/img/examples/dotnet.svg", + }, + nodejs: { + id: "nodejs", + label: "Node.js", + group: "Backend", + icon: "/docs/img/examples/nodejs.svg", + }, +} + +export const DEPLOYMENT_OPTIONS: { id: DeploymentMode; label: string }[] = [ + { id: "network", label: "Ory Network" }, + { id: "oel", label: "Ory Enterprise License" }, + { id: "oss", label: "Ory Open Source" }, +] diff --git a/src/components/QuickStarts/hooks/useClickOutside.ts b/src/components/QuickStarts/hooks/useClickOutside.ts new file mode 100644 index 0000000000..f21730e5ac --- /dev/null +++ b/src/components/QuickStarts/hooks/useClickOutside.ts @@ -0,0 +1,25 @@ +import { useEffect, RefObject } from "react" + +export function useClickOutside( + ref: RefObject, + isOpen: boolean, + onClose: () => void, +) { + useEffect(() => { + if (!isOpen) { + return + } + + const handleClickOutside = (event: MouseEvent) => { + if (ref.current && !ref.current.contains(event.target as Node)) { + onClose() + } + } + + document.addEventListener("mousedown", handleClickOutside) + + return () => { + document.removeEventListener("mousedown", handleClickOutside) + } + }, [isOpen, ref, onClose]) +} diff --git a/src/components/QuickStarts/hooks/useExampleFilter.ts b/src/components/QuickStarts/hooks/useExampleFilter.ts new file mode 100644 index 0000000000..165f02b302 --- /dev/null +++ b/src/components/QuickStarts/hooks/useExampleFilter.ts @@ -0,0 +1,59 @@ +import { useMemo } from "react" +import * as exampleContent from "@site/src/pages/_assets/examples-content" +import type { QuickstartCategory } from "../types" + +export function useExampleFilter(activeCategory: QuickstartCategory) { + return useMemo(() => { + const { basic, customui, community } = exampleContent + + const allGroups = [basic, customui, community] + + // Per-product filters – fall back to showing all examples if no filter. + const filterByCategory: Record< + string, + ((title: string, docs?: string) => boolean) | undefined + > = { + // Ory Kratos: show all current examples. + "ory-kratos": undefined, + "ory-elements": (title, docs) => + title.toLowerCase().includes("customize self-service ui") || + (docs ?? "").toLowerCase().includes("nextjs"), + // Hydra: examples whose docs mention hydra. + "ory-hydra": (_title, docs) => + (docs ?? "").toLowerCase().includes("hydra"), + // Keto: examples whose docs mention keto. + "ory-keto": (_title, docs) => (docs ?? "").toLowerCase().includes("keto"), + // Others currently have no dedicated examples. + "ory-oathkeeper": () => false, + "ory-polis": () => false, + } + + const filterFn = filterByCategory[activeCategory.id] + + const byCategory = filterFn + ? allGroups + .map((group) => ({ + ...group, + examples: group.examples.filter((ex) => + filterFn(ex.title, ex.docs as string | undefined), + ), + })) + .filter((group) => group.examples.length > 0) + : allGroups + + // Collect languages used in these examples + const languageSet = new Set() + byCategory.forEach((group) => + group.examples.forEach((ex) => { + if (ex.language) { + languageSet.add(ex.language) + } + }), + ) + + return { + filteredExampleGroups: byCategory, + availableLanguages: Array.from(languageSet).sort(), + } + }, [activeCategory.id]) +} diff --git a/src/components/QuickStarts/hooks/useLanguageGrouping.ts b/src/components/QuickStarts/hooks/useLanguageGrouping.ts new file mode 100644 index 0000000000..26c1ebbadd --- /dev/null +++ b/src/components/QuickStarts/hooks/useLanguageGrouping.ts @@ -0,0 +1,31 @@ +import { useMemo } from "react" +import { LANGUAGE_META } from "../constants" +import type { LanguageMeta } from "../types" + +export function useLanguageGrouping(availableLanguages: string[]) { + return useMemo(() => { + const groups: Record = {} + + availableLanguages.forEach((lang) => { + const meta = + LANGUAGE_META[lang] ?? + ({ + id: lang, + label: lang, + group: "Other", + icon: `/docs/img/examples/${lang}.svg`, + } as LanguageMeta) + + if (!groups[meta.group]) { + groups[meta.group] = [] + } + + groups[meta.group].push(meta) + }) + ;(Object.keys(groups) as Array).forEach((group) => { + groups[group].sort((a, b) => a.label.localeCompare(b.label)) + }) + + return groups + }, [availableLanguages]) +} diff --git a/src/components/QuickStarts/quickstart-filter.tsx b/src/components/QuickStarts/quickstart-filter.tsx new file mode 100644 index 0000000000..d5af3e0e20 --- /dev/null +++ b/src/components/QuickStarts/quickstart-filter.tsx @@ -0,0 +1,180 @@ +import { useEffect, useMemo, useRef, useState } from "react" +import { useHistory, useLocation } from "@docusaurus/router" +import { useQuickstartsDeployment } from "@site/src/contexts/QuickstartsDeploymentContext" +import ExampleList from "../Examples/example-list" +import { CategoryFilter } from "./CategoryFilter" +import { CATEGORIES } from "./constants" +import { useExampleFilter } from "./hooks/useExampleFilter" +import { LanguageFilter, type LanguageFilterRef } from "./LanguageFilter" +import { QuickstartGrid } from "./QuickstartGrid" +import type { DeploymentMode } from "./types" + +function getSearchParams(search: string): URLSearchParams { + if (!search) return new URLSearchParams() + return new URLSearchParams(search.startsWith("?") ? search.slice(1) : search) +} + +export const QuickstartFilter = () => { + const history = useHistory() + const location = useLocation() + const quickstartsDeployment = useQuickstartsDeployment() + + const deploymentMode: DeploymentMode = + quickstartsDeployment?.deployment ?? "network" + + const visibleCategories = useMemo(() => { + return CATEGORIES.filter((cat) => + cat.items.some((item) => { + if (!item.deploymentModes) return true + return item.deploymentModes.includes(deploymentMode) + }), + ) + }, [deploymentMode]) + + const [activeCategoryId, setActiveCategoryId] = useState(() => { + if (typeof window === "undefined") + return visibleCategories[0]?.id ?? CATEGORIES[0]?.id ?? "" + const params = getSearchParams(window.location.search) + const fromUrl = params.get("category") + const isValid = visibleCategories.some((c) => c.id === fromUrl) + return ( + (isValid ? fromUrl : visibleCategories[0]?.id) ?? CATEGORIES[0]?.id ?? "" + ) + }) + + const [activeLanguage, setActiveLanguage] = useState(() => { + if (typeof window === "undefined") return "all" + const params = getSearchParams(window.location.search) + return params.get("language") ?? "all" + }) + const languageFilterRef = useRef(null) + + // If the active category is not available for the selected deployment, fall back. + useEffect(() => { + if (!visibleCategories.some((c) => c.id === activeCategoryId)) { + setActiveCategoryId(visibleCategories[0]?.id ?? "") + } + }, [activeCategoryId, visibleCategories]) + + const activeCategory = + visibleCategories.find((cat) => cat.id === activeCategoryId) ?? + visibleCategories[0] ?? + CATEGORIES[0] + + const { filteredExampleGroups, availableLanguages } = + useExampleFilter(activeCategory) + + const filteredByLanguage = useMemo(() => { + if (activeLanguage === "all") { + return filteredExampleGroups + } + + return filteredExampleGroups + .map((group) => ({ + ...group, + examples: group.examples.filter((ex) => ex.language === activeLanguage), + })) + .filter((group) => group.examples.length > 0) + }, [filteredExampleGroups, activeLanguage]) + + const updateUrlParams = (next: { + categoryId?: string + language?: string + }) => { + const params = getSearchParams(location.search) + const firstCategoryId = visibleCategories[0]?.id ?? "" + const nextCategoryId = next.categoryId ?? activeCategoryId + const nextLanguage = next.language ?? activeLanguage + + if (nextCategoryId && nextCategoryId !== firstCategoryId) { + params.set("category", nextCategoryId) + } else { + params.delete("category") + } + + if (nextLanguage && nextLanguage !== "all") { + params.set("language", nextLanguage) + } else { + params.delete("language") + } + + const qs = params.toString() + const nextUrl = qs ? `${location.pathname}?${qs}` : location.pathname + history.replace(nextUrl) + } + + // Keep state in sync with URL (supports refresh + back/forward). + useEffect(() => { + const params = getSearchParams(location.search) + const urlLanguage = params.get("language") ?? "all" + if (urlLanguage !== activeLanguage) { + setActiveLanguage(urlLanguage) + } + + const urlCategory = params.get("category") + const firstCategoryId = visibleCategories[0]?.id ?? "" + const nextCategoryId = visibleCategories.some((c) => c.id === urlCategory) + ? (urlCategory as string) + : firstCategoryId + + if (nextCategoryId && nextCategoryId !== activeCategoryId) { + setActiveCategoryId(nextCategoryId) + languageFilterRef.current?.close() + } + }, [activeCategoryId, activeLanguage, location.search, visibleCategories]) + + return ( + <> +
+
+

Quickstart guides

+
+ +
+ { + setActiveCategoryId(categoryId) + updateUrlParams({ categoryId }) + languageFilterRef.current?.close() + }} + /> +
+ + +
+ +
+ { + setActiveLanguage(lang) + updateUrlParams({ language: lang }) + }} + /> + + {filteredByLanguage.length > 0 ? ( + filteredByLanguage.map((group) => ( + + )) + ) : ( +

+ No code examples are available for this product yet. +

+ )} +
+ + ) +} diff --git a/src/components/QuickStarts/types.ts b/src/components/QuickStarts/types.ts new file mode 100644 index 0000000000..ecbd3fe085 --- /dev/null +++ b/src/components/QuickStarts/types.ts @@ -0,0 +1,23 @@ +export type QuickstartItem = { + label: string + to: string + description?: string + deploymentModes?: DeploymentMode[] +} + +export type QuickstartCategory = { + id: string + label: string + /** CSS color for the category chip indicator (e.g. #f97316 or var(--icon-kratos-tertiary)) */ + color?: string + items: QuickstartItem[] +} + +export type LanguageMeta = { + id: string + label: string + group: "Web" | "Mobile" | "Backend" | "Other" + icon: string +} + +export type DeploymentMode = "network" | "oel" | "oss" diff --git a/src/components/Shared/AuthOverview.tsx b/src/components/Shared/AuthOverview.tsx new file mode 100644 index 0000000000..d3b4c0cb58 --- /dev/null +++ b/src/components/Shared/AuthOverview.tsx @@ -0,0 +1,48 @@ +// src/components/shared/AuthOverview.tsx +import React from "react" + +type Product = "network" | "oel" | "oss" + +interface AuthOverviewProps { + product: Product +} + +export function AuthOverview({ product }: AuthOverviewProps) { + const productLabel = + product === "network" + ? "Ory Network" + : product === "oel" + ? "Ory Enterprise License" + : "Ory Open Source" + + return ( + <> +

Authentication overview

+

+ This section explains how authentication works in{" "} + {productLabel}. +

+ + {product === "network" && ( +

+ Because you're using Ory Network, authentication flows are fully + managed and hosted for you. +

+ )} + + {product === "oel" && ( +

+ In Ory Enterprise License, you run the control plane yourself but get + enterprise support and features. +

+ )} + + {product === "oss" && ( +

+ With Ory Open Source, you assemble and operate the components on your + own infrastructure. +

+ )} + + ) +} diff --git a/src/components/Shared/hydra/01_tracing.mdx b/src/components/Shared/hydra/01_tracing.mdx new file mode 100644 index 0000000000..9c1985b5b1 --- /dev/null +++ b/src/components/Shared/hydra/01_tracing.mdx @@ -0,0 +1,127 @@ +Configuring Distributed Tracing (DT) will enable you to obtain a visualization +of the call paths that take place in order to process a request made to Ory. +It's yet another tool that you can use to aid you in profiling, debugging and +ultimately understanding your deployment of Ory better. + +## Tracing options + +You have the option to use a tracing backend or follow existing traces. Ory +supports the following tracing backends: + +- [OpenTelemetry](https://github.com/open-telemetry) +- [Jaeger](https://github.com/jaegertracing/jaeger) +- [Elastic APM](https://github.com/elastic/apm) +- [Datadog](https://github.com/DataDog) +- [Zipkin](https://github.com/openzipkin/zipkin) +- [Instana](https://www.instana.com/) + +To follow existing traces: If you have deployed Ory behind a proxy that has +initiated a trace, Ory will attempt to join that trace by examining the request +headers for tracing context. + +### What an Ory trace includes + +In DT speak, a trace is comprised of one or more spans which are logical units +of work. Each Ory span is encapsulated with the following state: + +- A name +- A start time +- A finish time +- A set of zero or more tags + +Ory creates the following spans: + +- Top level span (_named after the request path_) for the requested endpoint. + Span tags: - http method - http status code - error IFF status code >= 400 +- Child span will be created if bcrypt (_e.g. when the token endpoint is + called_) is called. Span tags: - bcrypt work factor +- All SQL database interactions. Spans/tags will vary depending on the database + driver used. + +This is still evolving and subject to change as tracing support continues to +expand in Ory. If you see something that's missing/wrong, please +[create an issue](https://github.com/ory/docs/issues). + +### Local setup + +The +[provided docker-compose file](https://github.com/ory/hydra/blob/master/quickstart-tracing.yml) +in the Hydra repository (other ory services have the same docker-compose file) +has tracing configuration which you can use to play around with - just uncomment +the desired tracing provider. We will use Jaeger as an example. + +Simply run + +```sh +docker-compose -f quickstart.yml \ + -f quickstart-tracing.yml \ + up --build +``` + +Grab a coffee or stretch while you wait for everything to come up. You will then +be able to navigate to the Jaeger UI which you have exposed on port `16686` at +http://localhost:16686/search. You can now start making requests and inspect +traces! + +As an example, here is a trace created by making a bad request to the +`POST /clients` endpoint: + +![OpenTracing and OpenCensus exemplary trace in Jaeger UI](./_static/sample_trace.png) + +At a glance, you are able to see that: + +- The request failed +- The request took ~80ms +- It resulted in a 409 +- The hash comparison to validate the client's credentials took a whopping 70ms. + Bcrypt is expensive! +- The various database operations performed + +:::note + +To see spans around database interactions, you must be using a SQL backend, such +as MySQL or Postgres. + +::: + +There is a more complex example to show you the interactions between Kratos, +Oathkeeper and Kratos to check if the user is allowed the access the requested +resource : + +![Kratos Oathkeeper and Kratos exemplary trace in Jaeger UI](./_static/complex_trace.png) + +As previously said, you can see the interactions between the different services +and SQL database interactions. + +### Tracing configurations + +You can configure tracing inside the configuration file (follow the same schema +for all services) or via environment variables. + +There is an example of a configuration file with tracing enabled: + +```yaml +tracing: + provider: jaeger # use any of the supported tracing providers + service_name: ory:kratos # if not set, the service name will be the service's name + providers: + jaeger: # per provider configuration + local_agent_address: jaeger:6831 + sampling: + server_url: http://jaeger:5778/sampling +``` + +:::note + +Please refer to the configuration reference for the full list of options. + +::: + +The CLI will also provide you with the list of tracing configurations and their +supported values. Simply run: + +``` +docker exec -it hydra_hydra_1 hydra serve --help +``` + +And read the section on `DEBUG CONTROLS`. diff --git a/src/components/Shared/hydra/_static/complex_trace.png b/src/components/Shared/hydra/_static/complex_trace.png new file mode 100644 index 0000000000..635d716810 Binary files /dev/null and b/src/components/Shared/hydra/_static/complex_trace.png differ diff --git a/src/components/Shared/hydra/_static/oauth2-flow.gif b/src/components/Shared/hydra/_static/oauth2-flow.gif new file mode 100644 index 0000000000..7054ddea93 Binary files /dev/null and b/src/components/Shared/hydra/_static/oauth2-flow.gif differ diff --git a/src/components/Shared/hydra/_static/ory-network-oauth2/oauth2-ory.mp4 b/src/components/Shared/hydra/_static/ory-network-oauth2/oauth2-ory.mp4 new file mode 100644 index 0000000000..8c558b293d Binary files /dev/null and b/src/components/Shared/hydra/_static/ory-network-oauth2/oauth2-ory.mp4 differ diff --git a/src/components/Shared/hydra/_static/ory-network-oauth2/oauth2-ory.webm b/src/components/Shared/hydra/_static/ory-network-oauth2/oauth2-ory.webm new file mode 100644 index 0000000000..e762e0ae9e Binary files /dev/null and b/src/components/Shared/hydra/_static/ory-network-oauth2/oauth2-ory.webm differ diff --git a/src/components/Shared/hydra/_static/sample_trace.png b/src/components/Shared/hydra/_static/sample_trace.png new file mode 100644 index 0000000000..51987091d0 Binary files /dev/null and b/src/components/Shared/hydra/_static/sample_trace.png differ diff --git a/src/components/Shared/hydra/index.mdx b/src/components/Shared/hydra/index.mdx new file mode 100644 index 0000000000..2228ab47e4 --- /dev/null +++ b/src/components/Shared/hydra/index.mdx @@ -0,0 +1,111 @@ +OAuth2 is the industry-standard protocol that enables secure machine-to-machine +communication and grants limited access to data and services on behalf of users. +OpenID Connect, built on top of OAuth2, is required to become a social sign-in +provider. + +Ory OAuth2 and OpenID Connect, built on top of the widely deployed open-source +[Ory Hydra Federation Server](https://github.com/ory/hydra) is available out of +the box in the Ory Network and is the perfect solution for securely connecting +users, applications, and services. Whether you need single sign-on (SSO), mobile +and third-party application authorization, API access management, +server-to-server communication, or federated identity, you can find a solution +based on Ory OAuth2 and OpenID Connect. + +## Features + +Ory OAuth2 and OpenID Connect comes with a range of features that make it the +ideal solution for securely connecting users, applications, and services. + +### Certified OpenID Connect implementation + +Ory OAuth2 and OpenID Connect is a +[Certified OpenID Connect Implementation](https://openid.net/developers/certified/) +that meets all requirements set by the OpenID Foundation. You can trust Ory +OAuth2 and OpenID Connect to meet the highest standards of security and +reliability. + +### Flexible user management + +Ory OAuth2 and OpenID Connect is connected to Ory Identities by default, but +unlike many other OAuth2 service providers, Ory's service is a headless API that +doesn't force you to use a specific user management system. This means that Ory +OAuth2 and OpenID Connect is the perfect fit if you want to become an OAuth2 +provider and already have an existing user management system. + +### Low latency + +Ory OAuth2 and OpenID Connect is optimized for low latency, ensuring that your +applications can authenticate users and access resources as quickly as possible. +This is especially important for high-traffic applications or those that require +real-time data access. + +### Global deployment + +Ory OAuth2 and OpenID Connect is deployed in data centers around the world, +ensuring that your applications can access the service with minimal latency from +anywhere in the world. With global deployment, you can easily serve users in +multiple regions and meet data sovereignty requirements. + +### Security-first architecture + +Ory OAuth2 and OpenID Connect has a security-first architecture that neutralizes +common attack vectors, as well as numerous less exploited security risks. The +architecture and workflows are designed to meet the highest security standards +and comply with industry best practices. + +### Cryptographic key storage + +In addition to OAuth2 functionality, Ory OAuth2 and OpenID Connect offers safe +storage for cryptographic keys that can be used, for example, to sign JSON Web +Tokens. + +## Benefits + +Ory OAuth2 and OpenID Connect provides a number of key benefits that make it the +ideal choice for securely connecting users, applications, and services. With Ory +OAuth2 and OpenID Connect, you can: + +- **Reduce development time:** With Ory OAuth2 and OpenID Connect, you can get + up and running quickly with a fully featured OAuth2 and OpenID Connect + provider that meets all industry standards and covers a wide range of use + cases. +- **Ensure regulatory compliance:** Ory OAuth2 and OpenID Connect is designed to + comply with the latest security standards and regulatory requirements, making + it easy to meet your compliance needs. +- **Improve user experience:** With support for SSO and mobile authentication, + Ory OAuth2 and OpenID Connect makes it easy for users to access your + applications securely and quickly. +- **Scale with ease:** Ory OAuth2 and OpenID Connect is built on a cloud-native + architecture that makes it easy to deploy and scale the service to meet your + needs, whether you're serving thousands or millions of users. +- **Minimize security risks:** Ory OAuth2 and OpenID Connect's security-first + architecture and cryptographic key storage help minimize security risks, + ensuring that your users and data are protected from unauthorized access and + malicious attacks. + +## Use cases + +Ory OAuth2 and OpenID Connect can be used for a wide range of use cases, +including: + +- Single sign-on (SSO): Allow users to authenticate with a single set of + credentials across multiple applications, eliminating the need for multiple + logins. +- Mobile and third-party application authorization: Enable applications to + request authorization to access resources on behalf of users. This lets users + give apps limited access to their resources without sharing their credentials. +- API access management: Use OAuth2 to verify the identity of clients that try + to access APIs and enforce appropriate access control policies based on this + identification. +- Server-to-server communication: Authorize communication between servers + without a user present. +- Federated identity: Become an identity provider, authenticate users, and + provide access to applications just like Google, Facebook, or GitHub. + +## Next steps + +See +[Ory Network OAuth2 quickstart guide](/docs/network/hydra/quickstarts/ory-network-oauth2) +to learn how to set up your own OAuth2 and OpenID Connect provider in just a few +minutes. The guide walks you through the process of setting up Ory OAuth2 and +OpenID Connect and configuring a sample application to use the service. diff --git a/src/components/Shared/hydra/ory-network-oauth2.mdx b/src/components/Shared/hydra/ory-network-oauth2.mdx new file mode 100644 index 0000000000..e37c7a28f2 --- /dev/null +++ b/src/components/Shared/hydra/ory-network-oauth2.mdx @@ -0,0 +1,150 @@ +[Ory OAuth2 & OpenID Connect](https://www.ory.com/hydra) (based on +[Ory Hydra](https://github.com/ory/hydra)) is available in the Ory Network out +of the box. This means that you can use OIDC, Authorization Code Grant, Client +Credentials Grant, and more, without additional configuration. + +Following this guide allows you to experience the most commonly used OAuth2 +flows and see how they work in Ory Network. The examples will take you through +the following steps: + +- Creating OAuth2 clients in the Ory Network with the Ory CLI +- Using the Authorization Code Grant with federation to Ory Identities for user + authentication and UI views (login page, consent page) supplied by the Ory + Account Experience +- Using the Client Credentials Grant +- Performing token introspection using the Ory CLI + +## Prerequisites + +Before you start, [install the Ory CLI](/docs/guides/cli/installation). + +## Client Credentials Grant + +The +[Client Credentials Grant](https://www.rfc-editor.org/rfc/rfc6749#section-4.4) +is commonly used in machine-to-machine communications. This allows web services, +applications, or devices to call each other without the context of human users. +Activity that uses this grant often runs in the background and doesn't require +any user interaction. + +Follow these steps to try this grant in Ory Network. Create an Ory Network +project using the Ory CLI and export the project ID: + +```shell +ory create project --name "Ory OAuth2 Example" +project_id="{set to the project ID from output}" +``` + +1. Create an OAuth2 client: + + ```shell + ory create oauth2-client --project "$PROJECT_ID" \ + --name "Client Credentials Demo" \ + --grant-type client_credentials + ``` + +2. Export the ID and secret of the created client: + + ```shell + client_id="{set to CLIENT ID from output}" + client_secret="{set to CLIENT SECRET from output}" + ``` + +3. Start the Client Credentials Grant: + + ```shell + ory perform client-credentials \ + --client-id="$client_id" \ + --client-secret="$client_secret" \ + --project "$PROJECT_ID" + ``` + +4. Perform token introspection to get the `access_token` details: + + ```shell + # Export 'access_token' + access_token="{set to ACCESS TOKEN from output}" + + # Perform token introspection + ory introspect token $access_token --project "$PROJECT_ID" + ``` + +## Authorization Code Grant + +The +[Authorization Code Grant](https://www.rfc-editor.org/rfc/rfc6749#section-1.3) +is most commonly used in scenarios where applications need to perform actions on +behalf of users. For example, when an online marketplace allows users to add +photos from their Google Photos album to listings. + +To achieve that, the online marketplace must access the user's Google Photos +library on their behalf. If the user accepts the access scope requested by the +app (online marketplace), the app's client gets an `id_token` and `access_token` +pair which is then used to interact with Google Photos. + +This is what using the grant with UI views supplied by the Ory Account +Experience looks like: + +```mdx-code-block +import mp4 from './_static/ory-network-oauth2/oauth2-ory.mp4' +import webm from './_static/ory-network-oauth2/oauth2-ory.webm' +import VideoEmbed from '@site/src/components/VideoEmbed' + + +``` + +To try the Authorization Code Grant, follow these steps. + +1. Create an Ory Network project using the Ory CLI and export the project ID: + + ```shell + ory create project --name "Ory OAuth2 Example" + project_id="{set to the project ID from output}" + ``` + +2. Create an OAuth2 client + + ```shell + ory create oauth2-client --project "$PROJECT_ID" \ + --name "Authorization Code Grant with OpenID Connect Demo" \ + --grant-type authorization_code,refresh_token \ + --response-type code \ + --redirect-uri http://127.0.0.1:4446/callback + ``` + +3. Export the ID and secret of the created client: + + ```shell + code_client_id="{set to CLIENT ID from output}" + code_client_secret="{set to CLIENT SECRET from output}" + ``` + +4. Start the Authorization Code Grant flow: + + :::note + + This opens a sample OAuth2 consumer app in your default browser. + + ::: + + ```shell + ory perform authorization-code \ + --project "$PROJECT_ID" \ + --client-id "$code_client_id" \ + --client-secret "$code_client_secret" + ``` + + In the browser, use the UI to register a new user and allow the client to get + the requested scopes to get an `access_token`, a `refresh_token`, and an + `id_token`. This information is also printed in the terminal used to run the + commands. + +5. Perform token introspection to get the `access_token` details: + + ```shell + # Export 'access_token' + code_access_token="{set to ACCESS TOKEN from output}" + + # Perform token introspection + ory introspect token $code_access_token --project "$PROJECT_ID" + ``` diff --git a/src/components/Shared/hydra/quickstart.mdx b/src/components/Shared/hydra/quickstart.mdx new file mode 100644 index 0000000000..360e6fad81 --- /dev/null +++ b/src/components/Shared/hydra/quickstart.mdx @@ -0,0 +1,284 @@ +```mdx-code-block +import Help from '@site/docs/_common/need-selfhosted-support.mdx' + + +``` + +In this quickstart, you will set up Ory Hydra OAuth2 & OpenID Connect Server and +an exemplary User Login & Consent App using Docker Compose. You need to have the +latest [Docker](https://www.docker.com) and +[Docker Compose](https://docs.docker.com/compose) version and Git installed, as +well as [`jq`](https://stedolan.github.io/jq/download/). + +You do not want to self-host? Try +[out common OAuth2 grants on the fully managed version of Ory Hydra](/docs/getting-started/ory-network-oauth2). + +```mdx-code-block +import CodeFromRemote from "@theme/CodeFromRemote" +import { useLatestRelease } from '@site/src/hooks' +``` + +![OAuth2 Flow with Open Source OAuth2 Server Ory Hydra](_static/oauth2-flow.gif) + +```mdx-code-block +

+