famous-jackal-2829
05/31/2025, 10:45 AMbrief-egg-61061
05/31/2025, 10:45 AMbrief-egg-61061
05/31/2025, 10:45 AM/self-service/login/browser
) typically indicates that your reverse proxy (such as Nginx) or load balancer cannot reach the Kratos public endpoint at the configured address. Based on your configuration, here are the most common causes and steps to resolve: 1. Check Kratos Public Service Availability - Ensure that the Kratos public service is running and accessible at the address you specified in base_url: <https://kratos.qaap.io>
. - If you are running Kratos behind a reverse proxy (like Nginx), make sure the proxy is correctly forwarding requests to the Kratos public port. 2. Verify Nginx/Proxy Configuration - If you use Nginx, your configuration should proxy requests to the correct internal Kratos service and port. For example, if Kratos is running on localhost:4433
, your Nginx config should have something like: location / { proxy_pass <http://127.0.0.1:4433;> ... }
- Make sure SSL/TLS is set up correctly if you use HTTPS. 3. Check Docker Networking - If you run Kratos in Docker, ensure that the container is reachable from your proxy. The service name (e.g., kratos
) should resolve within the Docker network, and the port should be exposed. 4. Correct base_url
and UI URLs - The base_url
in your config must match the public URL that users and your proxy use to access Kratos. All UI URLs (e.g., ui_url: <https://kratos.qaap.io/auth/login>
) should also be reachable and correctly routed through your proxy. 5. Check for Typos and Placeholders - Replace all angle-bracketed placeholders (<...>
) with actual values. For example: dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> base_url: <https://kratos.qaap.io>
- Do not include the angle brackets in your actual configuration. 6. Review CORS and Allowed Return URLs - Make sure your CORS settings and allowed_return_urls
include all relevant domains and paths that your UI and API will use. 7. Restart Services - After making changes, restart both your reverse proxy and Kratos services to apply the new configuration. If you follow the deployment and UI configuration guide, you can see an example of how to set up the proxy and URLs correctly, including Nginx configuration and Kratos settings. This ensures that the UI and Kratos communicate properly and that the proxy forwards requests as expected [Configure User Interface](https://www.ory.sh/docs/kratos/guides/deploy-kratos-example#configure-user-interface). Summary: A 502 error is almost always a networking or proxy misconfiguration. Double-check your proxy settings, ensure Kratos is running and reachable, and that all URLs in your config are correct and use real values, not placeholders. If you need a sample Nginx config, refer to the deployment guide linked above for a working example. If you continue to see issues, please provide your proxy configuration and details about your deployment environment for more targeted help.brief-egg-61061
05/31/2025, 10:46 AMbrief-egg-61061
05/31/2025, 10:46 AM/self-service/login/browser
) almost always indicates a networking or proxy misconfiguration between your reverse proxy (such as Nginx) and the Kratos public service. Key points to check and fix: 1. Remove Angle Brackets from Config Values Your configuration uses angle brackets (<...>
) around values. These are placeholders and should not be present in your actual config. For example, use: yaml dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> base_url: <https://kratos.qaap.io>
instead of: yaml dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> base_url: <https://kratos.qaap.io>
2. Check Reverse Proxy (Nginx) Configuration If you are using a reverse proxy, ensure it is correctly forwarding requests to the Kratos public port. The proxy should point to the internal Kratos service (e.g., <http://localhost:4433>
or the correct Docker service name and port). See the [Ory deployment guide for a sample Nginx config](https://www.ory.sh/docs/kratos/guides/deploy-kratos-example#configure-user-interface). 3. Verify Kratos Service is Running and Reachable Make sure the Kratos public service is running and accessible at the address and port your proxy expects. 4. Check for Port Conflicts and DNS Resolution If running in Docker, ensure the service name (kratos-postgres
for the database, and whatever you use for Kratos itself) is resolvable and the ports are exposed as expected. 5. Restart All Services After Changes After updating your configuration, restart Kratos and your reverse proxy to apply the changes. Summary: - Remove all angle brackets from your config values. - Double-check your proxy and networking setup. - Make sure Kratos is running and reachable at the configured base_url
. If you follow these steps and use the deployment guide as a reference, you should be able to resolve the 502 error and have Kratos working as expected [Configure User Interface](https://www.ory.sh/docs/kratos/guides/deploy-kratos-example#configure-user-interface). If you still encounter issues, please provide your reverse proxy configuration and more details about your deployment environment.brief-egg-61061
05/31/2025, 10:46 AMbrief-egg-61061
05/31/2025, 10:46 AMfamous-jackal-2829
05/31/2025, 10:47 AMbrief-egg-61061
05/31/2025, 10:47 AMbrief-egg-61061
05/31/2025, 10:47 AM<...>
) in your configuration file. In Ory Kratos configuration, angle brackets are not valid and should be removed. They are typically used in documentation to indicate placeholders, but in your actual config, you must use the real values without brackets. How to fix: 1. Remove all angle brackets from your config values. For example, change: yaml dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> base_url: <https://kratos.qaap.io> ui_url: <https://kratos.qaap.io/auth/login>
to: yaml dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> base_url: <https://kratos.qaap.io> ui_url: <https://kratos.qaap.io/auth/login>
2. Ensure your reverse proxy (if any) is correctly forwarding requests to the Kratos public endpoint. The 502 error means the proxy cannot reach the backend service. Double-check your Nginx or other proxy configuration to make sure it points to the correct internal address and port for Kratos. See the deployment guide for a working example of proxy and UI configuration [Configure User Interface](https://www.ory.sh/docs/kratos/guides/deploy-kratos-example#configure-user-interface). 3. Restart your services after making these changes. Summary: Remove all angle brackets from your configuration and ensure your proxy is correctly set up. This should resolve the 502 Bad Gateway error. If you continue to have issues after making these changes, please provide your proxy configuration and more details about your deployment environment for further assistance.famous-jackal-2829
05/31/2025, 11:48 AMbrief-egg-61061
05/31/2025, 11:49 AMbrief-egg-61061
05/31/2025, 11:49 AMtotp
method in your configuration file. Once enabled, users can pair their account with a TOTP app (like Google Authenticator) via the Account Settings page in the Ory Account Experience UI. Users are not automatically prompted to enable TOTP; they must do so themselves in the settings page [TOTP documentation](https://www.ory.sh/docs/kratos/mfa/totp). - When TOTP is enabled, the pairing QR code and related information are returned as part of the settings flow API response. If you are building a custom UI, you need to handle this response and display the QR code to the user for pairing [TOTP - Generate QR code and verify users provided code .NET Core](https://github.com/ory/kratos/discussions/4311). - If you are not seeing TOTP options in your UI, it may be because your frontend does not implement the TOTP flow, or you are not using the Ory Account Experience UI, which natively supports TOTP [TOTP documentation](https://www.ory.sh/docs/kratos/mfa/totp). Summary: Ory Kratos supports TOTP, but the UI you use must implement the TOTP flow. The official Ory Account Experience UI supports this out of the box. If you use a custom UI, ensure it handles the TOTP settings flow and displays the QR code for pairing. If you are using the official UI and still do not see TOTP, double-check your configuration and that TOTP is enabled. If you need to build your own UI, refer to the API responses from the settings flow to implement TOTP pairing and verification.famous-jackal-2829
05/31/2025, 11:51 AMbrief-egg-61061
05/31/2025, 11:51 AMbrief-egg-61061
05/31/2025, 11:52 AM<...>
). These are placeholders and should not be present in your actual config. - Set the TOTP issuer to a string name (not a URL). The issuer is what appears in the authenticator app. - The oauth2_provider.url
should not have angle brackets. Corrected YAML: yaml version: v1.3.1 dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> serve: public: base_url: <https://kratos.qaap.io> cors: enabled: true admin: base_url: <https://kratos.qaap.io/admin> selfservice: default_browser_return_url: <https://kratos.qaap.io/auth> allowed_return_urls: - <https://kratos.qaap.io/auth> methods: password: enabled: true config: min_password_length: 6 identifier_similarity_check_enabled: false haveibeenpwned_enabled: false totp: enabled: true config: issuer: "YourApp" # Use your application's name, not a URL period_seconds: 30 skew_seconds: 60 flows: error: ui_url: <https://kratos.qaap.io/auth/error> settings: ui_url: <https://kratos.qaap.io/auth/settings> privileged_session_max_age: 15m required_aal: highest_available logout: after: default_browser_return_url: <https://kratos.qaap.io/auth/login> login: ui_url: <https://kratos.qaap.io/auth/login> registration: ui_url: <https://kratos.qaap.io/auth/registration> after: password: hooks: - hook: session log: format: text leak_sensitive_values: true level: info secrets: cookie: - CHANGE_ME_TO_REAL_SECRET cipher: - 32-LONG-SECRET-NOT-SECURE-AT-ALL identity: default_schema_id: default schemas: - id: default url: file:///etc/config/kratos/identity.schema.json oauth2_provider: url: <http://hydra:4445>
References: - [Configure Ory Kratos](https://www.ory.sh/docs/kratos/configuring) - [TOTP configuration](https://www.ory.sh/docs/kratos/self-hosted/mfa) --- ### 2. Identity Schema Fixes - Remove angle brackets from $id
and $schema
. - The property key for Ory Kratos should be <http://ory.sh/kratos|ory.sh/kratos>
(not with angle brackets or a pipe). Corrected JSON: json { "$id": "<https://schemas.ory.sh/presets/kratos/identity.email.schema.json>", "$schema": "<http://json-schema.org/draft-07/schema#>", "title": "Person", "type": "object", "properties": { "traits": { "type": "object", "properties": { "email": { "type": "string", "format": "email", "title": "E-Mail", "<http://ory.sh/kratos|ory.sh/kratos>": { "credentials": { "password": { "identifier": true }, "webauthn": { "identifier": true }, "totp": { "account_name": true }, "code": { "identifier": true, "via": "email" }, "passkey": { "display_name": true } }, "recovery": { "via": "email" }, "verification": { "via": "email" }, "organizations": { "matcher": "email_domain" } }, "maxLength": 320 } }, "required": [ "email" ], "additionalProperties": false } } }
References: - [Customize identity schemas](https://www.ory.sh/docs/kratos/manage-identities/customize-identity-schema#examples) --- Summary: - Remove all angle brackets from your config and schema. - Use a string name for the TOTP issuer. - Use the correct property key for Ory Kratos in your identity schema. If you follow these corrections, your configuration and schema should be valid for Ory Kratos.famous-jackal-2829
05/31/2025, 11:53 AMbrief-egg-61061
05/31/2025, 11:53 AMbrief-egg-61061
05/31/2025, 11:54 AM<...>
) around all values. In Ory Kratos configuration files, angle brackets are only used in documentation to indicate placeholders and must be removed in your actual config. You should replace them with the real values, without brackets. Example of what to fix: - Change dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable>
to dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable>
- Change base_url: <https://kratos.qaap.io>
to base_url: <https://kratos.qaap.io>
- For the TOTP issuer, use a string name (like "YourApp"
) instead of a URL, as this is what will be shown in the authenticator app. Corrected example: yaml version: v1.3.1 dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> serve: public: base_url: <https://kratos.qaap.io> cors: enabled: true admin: base_url: <https://kratos.qaap.io/admin> selfservice: default_browser_return_url: <https://kratos.qaap.io/auth> allowed_return_urls: - <https://kratos.qaap.io/auth> methods: password: enabled: true config: min_password_length: 6 identifier_similarity_check_enabled: false haveibeenpwned_enabled: false totp: enabled: true config: issuer: "YourApp" period_seconds: 30 skew_seconds: 60 flows: error: ui_url: <https://kratos.qaap.io/auth/error> settings: ui_url: <https://kratos.qaap.io/auth/settings> privileged_session_max_age: 15m required_aal: highest_available logout: after: default_browser_return_url: <https://kratos.qaap.io/auth/login> login: ui_url: <https://kratos.qaap.io/auth/login> registration: ui_url: <https://kratos.qaap.io/auth/registration> after: password: hooks: - hook: session log: format: text leak_sensitive_values: true level: info secrets: cookie: - CHANGE_ME_TO_REAL_SECRET cipher: - 32-LONG-SECRET-NOT-SECURE-AT-ALL identity: default_schema_id: default schemas: - id: default url: file:///etc/config/kratos/identity.schema.json oauth2_provider: url: <http://hydra:4445>
Summary: - Remove all angle brackets from your configuration. - Use a string name for the TOTP issuer. - Make sure all URLs and DSNs are real and reachable. This is required for Ory Kratos to start and function correctly [Configure Ory Kratos](https://www.ory.sh/docs/kratos/configuring).famous-jackal-2829
05/31/2025, 12:10 PMbrief-egg-61061
05/31/2025, 12:10 PMbrief-egg-61061
05/31/2025, 12:11 PM<...>
) around values. These are placeholders and should be removed in your actual configuration. For example, use: yaml dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> base_url: <https://kratos.qaap.io>
instead of: yaml dsn: <postgres://kratos:secret@kratos-postgres:5432/kratos?sslmode=disable> base_url: <https://kratos.qaap.io>
If these placeholders are not replaced, Kratos may not function as expected, and flows like TOTP setup may not be triggered or displayed. 2. TOTP Flow in the UI: The Ory Account Experience UI (the official UI) supports TOTP out of the box, but users are not automatically prompted to enable TOTP. Instead, after TOTP is enabled in your project, each user must go to the Authenticator App section of the Account Settings page to pair their account with a TOTP app and see the QR code. If you are not navigating to the settings page and looking for the TOTP section, you will not see the QR code [TOTP documentation](https://www.ory.sh/docs/kratos/mfa/totp). 3. Identity Schema: The identity schema must support TOTP. If your schema does not include the necessary fields for TOTP, the option may not appear. Make sure your identity schema is compatible with TOTP as shown in the documentation [TOTP documentation](https://www.ory.sh/docs/kratos/mfa/totp#identity-credentials). 4. UI Implementation: If you are using a custom UI or an outdated version of the Ory Kratos UI, it may not implement the TOTP flow. The official Ory Account Experience UI is required for a seamless TOTP setup experience [TOTP documentation](https://www.ory.sh/docs/kratos/mfa/totp). Summary: - Remove all angle brackets from your configuration. - Make sure you are using the official Ory Account Experience UI. - Go to the Account Settings page and look for the Authenticator App section to set up TOTP and see the QR code. - Ensure your identity schema supports TOTP. If you have done all of the above and still do not see the TOTP/QR code page, there may be a misconfiguration or an issue with your UI implementation. The knowledge sources do not provide further troubleshooting steps for this specific scenario.