[GH-ISSUE #4979] Keycloak IDP backend broken due to unnormalised URL #10483

Open
opened 2026-08-05 01:26:05 -04:00 by saavagebueno · 2 comments
Owner

Originally created by @st4rburn on GitHub (Dec 20, 2025).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/4979

Describe the problem

Keycloak as of 26.4.3 now requires admin API request paths to be normalised, which the NetBird management server doesn't do in at least the request to https://<host>/admin/realms/<realm>//users/count?. Removing the double slash in this and similar requests should resolve this issue. This prevents authentication to the dashboard and VPN

To Reproduce

Steps to reproduce the behavior:

  1. Set up NetBird with Keycloak as the auth backend (Keycloak version 26.4.3 or higher)
  2. Attempt to log in to the dashboard as an administrator
  3. This will fail, check the management server logs
  4. See 400 error from Keycloak caused by unnormalised URL in request from NetBird management server

Similar also happens when attempting to connect to the VPN from the client.

Expected behavior

Authentication succeeds and the dashboard is useable

Are you using NetBird Cloud? No

NetBird version: 0.60.8

Is any other VPN software installed? No (and irrelevant for this issue)

Screenshots

Image Image Image Image

Additional context

Add any other context about the problem here.

Have you tried these troubleshooting steps?

  • Reviewed client troubleshooting (if applicable) (irrelevant)
  • Checked for newer NetBird versions
  • Searched for similar issues on GitHub (including closed ones)
  • Restarted the NetBird client
  • Disabled other VPN software (irrelevant)
  • Checked firewall settings (irrelevant)
Originally created by @st4rburn on GitHub (Dec 20, 2025). Original GitHub issue: https://github.com/netbirdio/netbird/issues/4979 **Describe the problem** Keycloak as of [26.4.3](https://www.keycloak.org/docs/latest/upgrading/index.html) now requires admin API request paths to be normalised, which the NetBird management server doesn't do in at least the request to `https://<host>/admin/realms/<realm>//users/count?`. Removing the double slash in this and similar requests should resolve this issue. This prevents authentication to the dashboard and VPN **To Reproduce** Steps to reproduce the behavior: 1. Set up NetBird with Keycloak as the auth backend (Keycloak version 26.4.3 or higher) 2. Attempt to log in to the dashboard as an administrator 3. This will fail, check the management server logs 4. See 400 error from Keycloak caused by unnormalised URL in request from NetBird management server Similar also happens when attempting to connect to the VPN from the client. **Expected behavior** Authentication succeeds and the dashboard is useable **Are you using NetBird Cloud?** No **NetBird version:** 0.60.8 **Is any other VPN software installed?** No (and irrelevant for this issue) **Screenshots** <img width="1781" height="129" alt="Image" src="https://github.com/user-attachments/assets/14a6d4ec-7bc6-4141-8e5a-aa765aa298f2" /> <img width="764" height="71" alt="Image" src="https://github.com/user-attachments/assets/cc1c18cd-1490-480a-8cfd-b57616103272" /> <img width="583" height="60" alt="Image" src="https://github.com/user-attachments/assets/b648c0ee-d725-40e3-8407-63a8949fcd79" /> <img width="938" height="93" alt="Image" src="https://github.com/user-attachments/assets/d765844c-f28d-4925-839c-87ae23dbf217" /> **Additional context** Add any other context about the problem here. **Have you tried these troubleshooting steps?** - [ ] ~~Reviewed [client troubleshooting](https://docs.netbird.io/how-to/troubleshooting-client) (if applicable)~~ (irrelevant) - [x] Checked for newer NetBird versions - [x] Searched for similar issues on GitHub (including closed ones) - [x] Restarted the NetBird client - [ ] ~~Disabled other VPN software~~ (irrelevant) - [ ] ~~Checked firewall settings~~ (irrelevant)
saavagebueno added the triage-needed label 2026-08-05 01:26:05 -04:00
Author
Owner

@coderabbitai[bot] commented on GitHub (Dec 20, 2025):

📝 CodeRabbit Plan Mode

Generate an implementation plan and prompts that you can use with your favorite coding agent.

  • Create Plan
Examples

🔗 Similar Issues

Related Issues

🔗 Related PRs

netbirdio/netbird#4844 - Fix SSH JWT issuer derivation for IDPs with path components [merged]

👤 Suggested Assignees

🧪 Issue enrichment is currently in open beta.

You can configure auto-planning by selecting labels in the issue_enrichment configuration.

To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

issue_enrichment:
  auto_enrich:
    enabled: false

💬 Have feedback or questions? Drop into our discord or schedule a call!

<!-- gh-comment-id:3678409796 --> @coderabbitai[bot] commented on GitHub (Dec 20, 2025): <!-- This is an auto-generated issue plan by CodeRabbit --> ### 📝 CodeRabbit Plan Mode Generate an implementation plan and prompts that you can use with your favorite coding agent. - [ ] <!-- {"checkboxId": "8d4f2b9c-3e1a-4f7c-a9b2-d5e8f1c4a7b9"} --> Create Plan <details> <summary>Examples</summary> - [Example 1](https://github.com/coderabbitai/git-worktree-runner/issues/29#issuecomment-3589134556) - [Example 2](https://github.com/coderabbitai/git-worktree-runner/issues/12#issuecomment-3606665167) </details> --- <details> <summary><b>🔗 Similar Issues</b></summary> **Related Issues** - https://github.com/netbirdio/netbird/issues/4861 - https://github.com/netbirdio/netbird/issues/3834 - https://github.com/netbirdio/netbird/issues/4915 - https://github.com/netbirdio/netbird/issues/4978 </details> <details> <summary><b>🔗 Related PRs</b></summary> netbirdio/netbird#4844 - Fix SSH JWT issuer derivation for IDPs with path components [merged] </details> <details> <summary><b>👤 Suggested Assignees</b></summary> - [its-wizza](https://github.com/its-wizza) - [mrll](https://github.com/mrll) - [sdg9670f](https://github.com/sdg9670f) - [ujaandas](https://github.com/ujaandas) - [sgtaziz](https://github.com/sgtaziz) </details> --- <details> <summary> 🧪 Issue enrichment is currently in open beta.</summary> You can configure auto-planning by selecting labels in the issue_enrichment configuration. To disable automatic issue enrichment, add the following to your `.coderabbit.yaml`: ```yaml issue_enrichment: auto_enrich: enabled: false ``` </details> 💬 Have feedback or questions? Drop into our [discord](https://discord.gg/coderabbit) or [schedule a call](https://calendly.com/parth-coderabbit/issues-feedback)!
Author
Owner

@st4rburn commented on GitHub (Dec 20, 2025):

For anyone experiencing this issue, Keycloak's fix for apps that haven't adjusted how they make requests is essentially start with the argument --http-accept-non-normalized-paths=true and enabling debug logs for org.keycloak.quarkus.runtime.services.RejectNonNormalizedPathFilter to see what apps are causing the issue.

More info here: https://www.keycloak.org/docs/latest/upgrading/index.html#migrating-to-26-4-3

This is deprecated though and will be removed, it's just for while apps adjust their code to do normalisation themselves.

<!-- gh-comment-id:3678426404 --> @st4rburn commented on GitHub (Dec 20, 2025): For anyone experiencing this issue, Keycloak's fix for apps that haven't adjusted how they make requests is essentially start with the argument `--http-accept-non-normalized-paths=true` and enabling debug logs for `org.keycloak.quarkus.runtime.services.RejectNonNormalizedPathFilter` to see what apps are causing the issue. More info here: https://www.keycloak.org/docs/latest/upgrading/index.html#migrating-to-26-4-3 This is deprecated though and will be removed, it's just for while apps adjust their code to do normalisation themselves.
Sign in to join this conversation.
No Label triage-needed
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#10483