A 401 Unauthorized error in Kong Gateway means that the client request is missing valid authentication credentials required by Kong or the upstream service. Here’s how to troubleshoot and resolve it depending on your setup:
🔍 Common Causes & Fixes
1. No Auth Plugin Configured, but Upstream Requires Auth
- Cause: The upstream API needs an
Authorizationheader, but it’s not provided. - Fix: Either:
- Add the required header at the client level.
- Use Kong plugins (like JWT, Key Auth, OIDC) to inject it.
2. Auth Plugin Enabled, But Credentials Missing or Invalid
- Check for these plugins:
key-auth,jwt,openid-connect,basic-auth, etc. - Fix:
- Ensure the request includes the proper header (
apikey,Authorization: Bearer, etc.). - Example:
- For JWT:
Authorization: Bearer <token> - For Key-Auth:
apikey: <your-api-key>
- For JWT:
- Confirm the credentials exist in Kong (
consumer,credentialobjects).
- Ensure the request includes the proper header (
3. Token Expired or Malformed
- Fix:
- Verify the token is active and not expired.
- Use tools like Postman or
jwt.ioto inspect token validity.
4. Consumer Not Mapped Correctly
- Fix:
- Run
curl http://<admin-host>:8001/consumersto verify the consumer is created. - Confirm credentials are linked to that consumer.
- Run
5. RBAC Token Error (For Admin API)
If you’re accessing the Admin API and get 401:
- Fix:
- Use a valid RBAC token:
curl -H "Authorization: Bearer <admin-token>" http://localhost:8001/routes - Ensure the user has the required roles.
- Use a valid RBAC token:
🛠️ Diagnostic Tips
Run with -v or --include to see full request/response headers:
curl -v -H "Authorization: Bearer <token>" http://<kong-host>:8000/<route>
Enable debug logging in Kong:
log_level = debug # in kong.conf
Want to Go Deeper?
If you share:
- The plugin you’re using (JWT, Key-Auth, OIDC, etc.)
- A sample request
- Kong logs or error message body
… I can provide a more specific fix.
Let me know how you’re authenticating.
F5
Yes — a 401 Unauthorized error in Kong can be caused by F5 if it’s modifying or stripping headers that Kong needs for authentication.
🧱 How F5 Can Cause 401 Errors in Kong
🔴 1. Missing Auth Header
F5 may be removing or rewriting headers like:
AuthorizationapikeyX-Consumer-*
Kong relies on these headers when using:
key-authjwtbasic-authopenid-connect
✅ Check in F5:
- Are
Authorizationheaders allowed in HTTP requests? - Are any “security policies” or “HTTP profile” stripping headers?
🔴 2. SSL Termination at F5
If F5 is terminating TLS, Kong may receive plain HTTP but your plugin expects HTTPS (especially with OIDC or JWT).
✅ In Kong, try setting:
KONG_TRUSTED_IPS=0.0.0.0/0
KONG_REAL_IP_HEADER=X-Forwarded-For
Also set X-Forwarded-Proto and X-Forwarded-Host in F5 to preserve the request context.
🔴 3. Incorrect or Missing Host Header
Some Kong routes match based on Host. If F5 doesn’t forward it properly, Kong can reject the request.
✅ Ensure F5 passes:
Host: your-api.domain.com
🧪 How to Confirm
Run the same request directly to Kong (bypassing F5):
curl http://<Kong-IP>:8000/your-api-path \
-H "Authorization: Bearer <token>" \
-H "Host: your-api.domain.com"
If it works → F5 is the problem.
✅ Fixes on F5
- Disable header stripping in HTTP profile or iRules
- Whitelist
Authorization,apikey,X-*headers - Preserve
Host,X-Forwarded-For,X-Forwarded-Proto
✅ Fixes on Kong
- Add
KONG_TRUSTED_IPSandKONG_REAL_IP_HEADER - If using RBAC: make sure the token is passed in full
- Use Kong debug logs to verify header presence
If you’d like, I can help review your F5 virtual server config or Kong route/plugin setup. Just paste what you’re using.