[GH-ISSUE #5746] Embedded Dex approval.html template broken: .ReqID should be .AuthReqID #11707

Open
opened 2026-08-05 01:30:36 -04:00 by saavagebueno · 0 comments
Owner

Originally created by @max-koehler on GitHub (Mar 31, 2026).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/5746

Describe the problem

When using the combined server with the embedded Dex IdP, the OAuth approval/consent screen renders but the form is empty — no submit button. This makes it impossible for third-party OIDC clients (e.g., OAuth2 Proxy in ext_authz mode) to complete the authorization flow through the netbird-dashboard client.

Server log:

ERRO rendering template approval.html failed: template: approval.html:8:50:
executing "approval.html" at <.ReqID>: can't evaluate field ReqID in type
struct { User string; Client string; AuthReqID string; Scopes []string; ReqPath string }

The template references .ReqID but the data struct has .AuthReqID.

To Reproduce

  1. Deploy self-hosted NetBird combined server v0.67.1 with embedded Dex
  2. Configure an OIDC client (e.g., OAuth2 Proxy) using netbird-dashboard client ID with a custom redirect URI added to dashboardRedirectURIs
  3. Initiate the standard OAuth authorization code flow
  4. The approval page renders with "Grant Access" heading but the form body is empty (no approve/deny buttons)

Expected behavior

Either the template should use .AuthReqID (matching the struct), or the embedded Dex should support skipping the approval screen for trusted clients.

Are you using NetBird Cloud?

No, self-hosted control plane on GCE with Traefik reverse proxy.

NetBird version

Server: netbirdio/netbird-server:0.67.1

Is any other VPN software installed?

No.

Debug output

This is a server-side template rendering issue. The error appears in docker logs netbird-server.

Screenshots

The rendered page shows "Grant Access / NetBird Dashboard wants to access your account" with an empty <form method="post"></form> — no buttons.

Additional context

Workaround: setting --approval-prompt= (empty) in OAuth2 Proxy avoids triggering the approval screen entirely.

Have you tried these troubleshooting steps?

  • Reviewed client troubleshooting (not applicable — server-side issue)
  • Checked for newer NetBird versions (v0.67.1 is latest)
  • Searched for similar issues on GitHub (including closed ones)
  • Restarted the NetBird client
  • Disabled other VPN software
  • Checked firewall settings
Originally created by @max-koehler on GitHub (Mar 31, 2026). Original GitHub issue: https://github.com/netbirdio/netbird/issues/5746 **Describe the problem** When using the combined server with the embedded Dex IdP, the OAuth approval/consent screen renders but the form is empty — no submit button. This makes it impossible for third-party OIDC clients (e.g., OAuth2 Proxy in ext_authz mode) to complete the authorization flow through the `netbird-dashboard` client. Server log: ``` ERRO rendering template approval.html failed: template: approval.html:8:50: executing "approval.html" at <.ReqID>: can't evaluate field ReqID in type struct { User string; Client string; AuthReqID string; Scopes []string; ReqPath string } ``` The template references `.ReqID` but the data struct has `.AuthReqID`. **To Reproduce** 1. Deploy self-hosted NetBird combined server v0.67.1 with embedded Dex 2. Configure an OIDC client (e.g., OAuth2 Proxy) using `netbird-dashboard` client ID with a custom redirect URI added to `dashboardRedirectURIs` 3. Initiate the standard OAuth authorization code flow 4. The approval page renders with "Grant Access" heading but the form body is empty (no approve/deny buttons) **Expected behavior** Either the template should use `.AuthReqID` (matching the struct), or the embedded Dex should support skipping the approval screen for trusted clients. **Are you using NetBird Cloud?** No, self-hosted control plane on GCE with Traefik reverse proxy. **NetBird version** Server: `netbirdio/netbird-server:0.67.1` **Is any other VPN software installed?** No. **Debug output** This is a server-side template rendering issue. The error appears in `docker logs netbird-server`. **Screenshots** The rendered page shows "Grant Access / NetBird Dashboard wants to access your account" with an empty `<form method="post"></form>` — no buttons. **Additional context** Workaround: setting `--approval-prompt=` (empty) in OAuth2 Proxy avoids triggering the approval screen entirely. **Have you tried these troubleshooting steps?** - [x] Reviewed client troubleshooting (not applicable — server-side issue) - [x] Checked for newer NetBird versions (v0.67.1 is latest) - [x] Searched for similar issues on GitHub (including closed ones) - [x] Restarted the NetBird client - [x] Disabled other VPN software - [x] Checked firewall settings
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#11707