-
Notifications
You must be signed in to change notification settings - Fork 421
feat: added first draft for identity schema selection #2270
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,97 @@ | ||||||||||
--- | ||||||||||
id: identity-schema-selection | ||||||||||
title: Identity Schema Selection | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
--- | ||||||||||
|
||||||||||
```mdx-code-block | ||||||||||
import Tabs from "@theme/Tabs" | ||||||||||
import TabItem from "@theme/TabItem" | ||||||||||
``` | ||||||||||
|
||||||||||
# Identity schema selection for self-service registration and login flows | ||||||||||
|
||||||||||
Ory Kratos now supports selecting an identity schema during **registration** and **login** self-service flows by specifying a | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
please use bold formatting only when talking about specific UI elements. you can also give an LLM the README as context (or parts of it) to follow our style: https://github.com/ory/docs?tab=readme-ov-file#bolding-code-formatting |
||||||||||
query parameter. This gives administrators more control over which schemas are used and allows multi-tenant or multi-profile | ||||||||||
setups with distinct identity models. | ||||||||||
|
||||||||||
This feature is available in **Ory Kratos OEL** for now and will be available in Ory Network soon. | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
I am not sure if we should have this here, because we will 100% forget to update it later on. Instead can we use a reusable text snippet like this one, that says something like "this feature is in preview, please reach out if you are interested" or something like that - for features that are not released in all versions of Ory yet. |
||||||||||
|
||||||||||
## Overview | ||||||||||
|
||||||||||
- Users or integrators can choose which schema to use by appending the `identity_schema` query parameter when initiating | ||||||||||
registration or login flows. | ||||||||||
- Only schemas explicitly marked as selectable via `selfservice_selectable: true` in the configuration will be accepted. | ||||||||||
- If no schema is selected, the default schema is used (this is the existing behavior). | ||||||||||
|
||||||||||
## How to Use | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
||||||||||
### Registration Example | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
||||||||||
**Browser flow:** | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if you want a "small" headline you can use h5, no bolding please |
||||||||||
|
||||||||||
``` | ||||||||||
GET /self-service/registration/browser?identity_schema=schema-a | ||||||||||
``` | ||||||||||
|
||||||||||
**API flow:** | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see above |
||||||||||
|
||||||||||
``` | ||||||||||
GET /self-service/registration/api?identity_schema=schema-a | ||||||||||
``` | ||||||||||
|
||||||||||
### Login Example | ||||||||||
|
||||||||||
**Browser flow:** | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see above |
||||||||||
|
||||||||||
``` | ||||||||||
GET /self-service/login/browser?identity_schema=schema-a | ||||||||||
``` | ||||||||||
|
||||||||||
**API flow:** | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see above |
||||||||||
|
||||||||||
``` | ||||||||||
GET /self-service/login/api?identity_schema=schema-a | ||||||||||
``` | ||||||||||
|
||||||||||
## Configuration | ||||||||||
|
||||||||||
You must define which schemas are available for self-service selection by using the `selfservice_selectable` flag in your identity | ||||||||||
schema configuration. | ||||||||||
|
||||||||||
### Example Configuration | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
||||||||||
```yaml | ||||||||||
identity: | ||||||||||
default_schema_id: default | ||||||||||
schemas: | ||||||||||
- id: default | ||||||||||
url: file://./schemas/default.schema.json | ||||||||||
selfservice_selectable: true | ||||||||||
|
||||||||||
- id: schema-a | ||||||||||
url: file://./schemas/schema-a.schema.json | ||||||||||
selfservice_selectable: true | ||||||||||
|
||||||||||
- id: schema-internal | ||||||||||
url: file://./schemas/internal.schema.json | ||||||||||
selfservice_selectable: false # This one cannot be selected by end users | ||||||||||
``` | ||||||||||
|
||||||||||
Only schemas where `selfservice_selectable: true` will be selectable via the `identity_schema` parameter. | ||||||||||
|
||||||||||
## Behavior Summary | ||||||||||
|
||||||||||
- If a schema is listed and marked as selectable, it can be used in registration/login. | ||||||||||
- If a schema is not listed or not marked as selectable, it cannot be used via query param. | ||||||||||
- If no `identity_schema` is passed, the default schema (`default_schema_id`) is used. | ||||||||||
|
||||||||||
## Migration Notes | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
is this something we should include in all "feature" documents? @unatasha8 maybe we should come up with some template for new feature documents that engineering can use. Then these guides all look uniform. |
||||||||||
|
||||||||||
- This feature is **non-breaking**. Existing flows using the default schema are unaffected. | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
- You only need to update configuration if you want to expose multiple schemas for selection. | ||||||||||
- Schemas used internally (e.g., for admins or machine users) can remain non-selectable. | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
||||||||||
## Related Docs | ||||||||||
|
||||||||||
- [Manage Identity Schema](./manage-identity-schema) | ||||||||||
- [Customizing Identity Schemas](../../kratos/manage-identities/customize-identity-schema) | ||||||||||
Comment on lines
+94
to
+97
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
I think this is good but I would like to solve it at once for all documents and not manually for every doc - we would also have to change hundreds of old docs with this. we can try this out soon, wdyt @unatasha8 ? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sentence casing always when in doubt