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 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.
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
Registration Example
Browser flow:
GET /self-service/registration/browser?identity_schema=schema-a
API flow:
GET /self-service/registration/api?identity_schema=schema-a
Login Example
Browser flow:
GET /self-service/login/browser?identity_schema=schema-a
API flow:
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
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
- This feature is non-breaking. Existing flows using the default schema are unaffected.
- 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.