Authentication & SSO Errors
OIDC, SAML, Auth0, Okta, Keycloak, passkeys and MFA failures.
Understanding Auth errors
Identity errors are almost always configuration mismatches between two systems rather than code bugs: a redirect URI registered with a trailing slash, a client secret that was rotated on one side only, a clock that has drifted past the token skew allowance. Because the identity provider deliberately returns vague errors to avoid leaking information to attackers, the provider's own log is usually far more informative than the message your application receives.
How to debug Auth errors
- Open the identity provider's log or event stream first. Auth0, Okta and Keycloak all record a detailed reason that they never send back to the client.
- Compare the redirect URI byte for byte, including scheme, port and trailing slash.
http://localhost:3000/callbackandhttp://localhost:3000/callback/are different URIs. - Decode the token rather than guessing. Paste it into a local JWT decoder and check
iss,aud,expandnbf, never a remote paste site, because tokens are credentials. - Check clock skew with
timedatectlorntpq -p. Kerberos, SAML and JWT all reject tokens outside a tight time window, and a drifting VM clock produces intermittent, unreproducible auth failures. - For passkeys and WebAuthn, verify the Relying Party ID matches the origin exactly and that the page is served over HTTPS or on
localhost. Nothing else is a secure context.
Tools worth reaching for
Provider audit logsjwt decoding (locally)openssl x509 -noout -textbrowser devtools network tab
All 20 Auth errors
- Auth.js: UntrustedHost: Host must be trusted. URL was: http://localhost:3000 NewAuth.js (NextAuth v5) will not build callback URLs from a Host header it has not been told to trust, which protects…
- Auth0: Callback URL mismatchAuth0 rejected the login because the redirect URL in the request is not in the application's Allowed Callback URLs…
- Google OAuth: Error 403: access_denied, app is in testing NewThe OAuth consent screen is in Testing mode, which only allows the accounts explicitly listed as test users. Refresh…
- JWT: token used before issued / not valid yet NewValidation compared the token's iat or nbf claim against the verifier's clock and decided the token is from the…
- Keycloak: Cookie not found. Please make sure cookies are enabled NewKeycloak sets a cookie when the login page loads and expects it back when the form is submitted, and it did not come…
- Keycloak: Invalid parameter: redirect_uriKeycloak rejected the redirect URI because it is not listed in the client's Valid Redirect URIs, or a wildcard pattern…
- Keycloak: Invalid token issuer. Expected 'http://keycloak:8080/realms/myrealm' NewThe token's iss claim comes from whichever hostname the client used to reach Keycloak, and something later checked it…
- MFA: challenge timeout / code expiredA TOTP or push challenge was rejected because it expired or the device clock drifted outside the verification window.
- Microsoft Entra ID: AADSTS50011 (redirect URI mismatch) NewThe redirect_uri sent in the authorisation request is not registered on the app registration. Entra requires an exact…
- Microsoft Entra ID: AADSTS50076: Due to a configuration change made by your NewA Conditional Access policy requires multi-factor authentication for this sign-in, and the client used a flow that…
- Microsoft Entra ID: AADSTS65001: The user or administrator has not consented NewThe app asked for permissions that nobody in this tenant has agreed to grant it. Consent is per tenant, so an app that…
- Microsoft Entra ID: AADSTS700016: Application with identifier was not found NewThe client_id in the request does not exist in the tenant the request was sent to. Usually the app is single tenant…
- Microsoft Entra ID: AADSTS7000215: Invalid client secret provided NewThe client secret sent to the token endpoint is not one Entra has for that app registration. By far the most common…
- Microsoft Entra ID: AADSTS9002326: Cross-origin token redemption is permitted NewThe browser swapped the authorisation code for tokens itself, with a fetch that carries an Origin header, but the…
- OAuth 2: {"error":"unsupported_grant_type"} NewThe token endpoint did not see a grant_type it accepts. Far more often than a genuinely unsupported grant, the…
- OAuth 2: invalid_grant (PKCE code_verifier does not match) NewThe code_verifier sent to the token endpoint does not hash to the code_challenge sent to the authorisation endpoint…
- OIDC: nonce mismatchThe nonce in the returned ID token does not match the nonce sent in the auth request, indicating a replay or a session…
- OIDC: unable to find a signing key that matches the kid NewThe token was signed with a key the verifier does not have. Identity providers rotate signing keys and publish both…
- Okta: invalid_clientThe Okta token endpoint returned invalid_client. The client_id/secret is wrong, the token endpoint auth method does…
- WebAuthn/Passkey: registration failed (NotAllowedError)navigator.credentials.create() rejected with NotAllowedError. Common causes: not a secure context, rpId not matching…
Other categories
- AI 35Rate limits, context windows, GPU memory and model-serving failures.
- Ansible 18Unreachable hosts, become passwords, undefined variables and Jinja2 failures.
- API 20Auth headers, payload limits, versioning, idempotency and webhook signatures.
- Apple 20Command line tools, dyld, Homebrew permissions, notarisation and Keychain.
- BigData 17Spark, Kafka, Airflow, Snowflake, Flink and Databricks failures.
- C# 18NuGet restore, null references, EF Core migrations, async deadlocks and Blazor…
- C++ 20Segfaults, linker errors, memory corruption and template deduction failures.
- Caching 20Cache stampedes, stale content, Varnish and CloudFront failures.
- CI/CD 18GitHub Actions, GitLab CI, Jenkins, CircleCI: permissions, runners and…
- Client 21CORS, mixed content, module resolution, memory limits and framework runtime…
- Cloud 25IAM permissions, quotas, service limits and credential failures.
- Dart 20Null safety, pub version solving and build toolchain problems.
- Database 41Connections, deadlocks, constraints, replication and memory limits.
- DNS 20NXDOMAIN, SERVFAIL, timeouts, propagation and delegation problems.
- Docker 27Daemon connectivity, disk space, image pulls, ports and architecture mismatches.
- Elixir 18GenServer timeouts, supervision failures and Mix compilation problems.
- Email 20Delivery failures, relay denial, authentication, SPF, DKIM and DMARC.
- Frontend 23Hydration mismatches, bundler resolution, layout shift and font loading.
- Git 20Merge conflicts, rejected pushes, detached HEAD, LFS and repository corruption.
- Go 19Nil map assignment, concurrent map access, context cancellation and deadlocks.
- GraphQL 19Validation, depth limits, N+1 queries and fragment problems.
- gRPC 17Status codes, deadlines, message limits, TLS and HTTP/2 transport failures.
- HTTP 494xx client errors, 5xx server errors, redirects, headers and protocol problems.
- ICMP 23Destination unreachable, time exceeded, fragmentation needed and redirects.
- Ingress 20404 default backend, missing TLS secrets, IngressClass and path matching.
- Java 19Class loading, dependency resolution, connection pools and JVM version…
- JavaScript 42npm resolution, async pitfalls, hydration, memory limits and runtime type…
- Kubernetes 34CrashLoopBackOff, ImagePullBackOff, OOMKilled, RBAC, scheduling and storage.
- Logging 18Log4j, Logback, Fluentd, Logstash and CloudWatch ingestion problems.
- MessageQueue 20Kafka, RabbitMQ, SQS, NATS and Celery: lag, rebalancing and poison messages.
- Mobile 20Gradle, CocoaPods, Xcode signing, Metro bundler and toolchain mismatches.
- Monitoring 18Prometheus scrapes, Grafana data sources, OpenTelemetry exporters and agent…
- Network 35Refused connections, timeouts, resets, MTU problems and port exhaustion.
- Performance 19GC pauses, thread pool starvation and event loop blocking.
- PHP 20Memory limits, execution timeouts, autoloading, Composer and PDO connections.
- Proxy 20nginx, Envoy, HAProxy, Traefik, Caddy and Cloudflare upstream failures.
- Python 35Imports, virtual environments, encoding, concurrency and dependency conflicts.
- Regex 17Catastrophic backtracking, back references, escaping and engine differences.
- Ruby 20Bundler, migrations, native extensions, encoding and asset compilation.
- Rust 19Borrow checker, ownership moves, trait bounds and lifetime mismatches.
- Scala 17Dependency resolution, binary compatibility and type inference failures.
- Security 25JWT validation, CSRF, OAuth grants, SELinux, SSH host keys and CSP.
- Serverless 20Lambda timeouts, package size limits, VPC networking and cold starts.
- Shell 19Command not found, permissions, quoting, expansion and Makefile syntax.
- Storage 19S3 permissions, NFS mounts, quotas, signed URLs and volume attachment.
- Svelte 20Store subscriptions, load functions and server/client boundaries.
- System 26Disk space, systemd units, file descriptors, OOM killer and scheduled jobs.
- Terraform 18State locks, provider auth, drift, dependency cycles and plan-time unknowns.
- Testing 18Jest, pytest, JUnit, Cypress and Playwright: fixtures, snapshots and timeouts.
- TLS 24Untrusted authorities, expiry, hostname mismatch, chains and cipher negotiation.
- TypeScript 19Assignability, missing declarations, strict null checks and generic constraints.
- Virtualization 20VirtualBox, VMware, Hyper-V, WSL, KVM and hypervisor conflicts.
- Web3 17Gas estimation, nonce management and reverted transactions.
- WebAssembly 17Compile errors, memory bounds and host binding mismatches.
- WebServer 20nginx, Apache, IIS and Caddy: binding, permissions, rewrites and TLS.
- Windows 20Installer failures, missing runtimes, update errors and permission problems.