[GH-ISSUE #4679] netbird with authelia #10011

Closed
opened 2026-08-05 01:24:19 -04:00 by saavagebueno · 5 comments
Owner

Originally created by @rtgiskard on GitHub (Oct 21, 2025).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/4679

Struggled few days and finally get it work with authelia!

The available documentation misses quite a few important details, so here’s my final setup for anyone else trying to make it work:

authelia:

  identity_providers:
    oidc:
      # required by netbird
      cors:
        allowed_origins_from_client_redirect_uris: true
        endpoints:
          - userinfo
          - authorization
          - token
          - revocation
          - introspection

      claims_policies:
        netbird:
          id_token: [email,groups]

      clients:
        - client_name: netbird
          client_id: <client_id>
          client_secret:
            path: /path/to/secret/hash
          authorization_policy: one_factor
          public: false
          require_pkce: true
          pkce_challenge_method: S256
          token_endpoint_auth_method: client_secret_post
          claims_policy: netbird
          audience:
            - <client_id>
          redirect_uris:
            - https://netbird.dev.oo/auth
            - https://netbird.dev.oo/silent-auth
            - http://localhost
          scopes:
            - openid
            - email
            - profile
            - groups
            - offline_access
          grant_types:
            - authorization_code
            - refresh_token

netbird values.yaml:

management:
  enabled: true

  # cache geolocation data across restart
  persistentVolume:
    enabled: true
    size: 400Mi

  image:
    tag: 0.59.8

  env:
    STUN_SERVER_URI: stun:netbird.dev.oo:3478
    TURN_SERVER_URI: turn:netbird.dev.oo:3478
    NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay
    NB_PEER_UPDATE_INTERVAL_MS: "200"
    NB_PEER_UPDATE_STARTUP_PERIOD_S: "4"
    NB_ACTIVITY_EVENT_STORE_ENGINE: postgres
    OIDC_ENDPOINT: "https://auth.dev.oo/.well-known/openid-configuration"
  envFromSecret:
    NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET
    AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID
    AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET
    AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES
    DATASTORE_ENCRYPTION_KEY: netbird-sec/DATASTORE_ENCRYPTION_KEY
    NETBIRD_STORE_ENGINE_POSTGRES_DSN: netbird-sec/POSTGRESQL_DSN
    NB_ACTIVITY_EVENT_POSTGRES_DSN: netbird-sec/POSTGRESQL_EVENTS_DSN

  configmap: |-
    {
      "StoreConfig": {
        "Engine": "postgres"
      },
      "Stuns": [
        {
          "Proto": "udp",
          "URI": "{{ .STUN_SERVER_URI }}"
        }
      ],
      "Relay": {
        "Addresses": ["{{ .NB_EXPOSED_ADDRESS }}"],
        "Secret": "{{ .NB_AUTH_SECRET }}",
        "CredentialsTTL": "12h"
      },
      "Signal": {
        "Proto": "https",
        "URI": "netbird.dev.oo:443"
      },
      "HttpConfig": {
        "AuthUserIDClaim": "email",
        "AuthAudience": "{{ .AUTH_CLIENT_ID }}",
        "OIDCConfigEndpoint":"{{ .OIDC_ENDPOINT }}",
        "IdpSignKeyRefreshEnabled": true,
        "LetsEncryptDomain": "",
        "CertFile": "",
        "CertKey": ""
      },
      "DataStoreEncryptionKey": "{{ .DATASTORE_ENCRYPTION_KEY }}",
      "IdpManagerConfig": {},
      "DeviceAuthorizationFlow": {
        "Provider": "hosted",
        "ProviderConfig": {
          "ClientID": "{{ .AUTH_CLIENT_ID }}",
          "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}",
          "Scope": "openid",
          "RedirectURLs": null,
          "UseIDToken": true
        }
      },
      "PKCEAuthorizationFlow": {
        "ProviderConfig": {
          "ClientID": "{{ .AUTH_CLIENT_ID }}",
          "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}",
          "Scope": "{{ .AUTH_SUPPORTED_SCOPES }}",
          "RedirectURLs": ["http://localhost:53000/"],
          "UseIDToken": true
        }
      }
    }

dashboard:
  enabled: true
  image:
    repository: netbirdio/dashboard
    tag: "v2.20.1"
  env:
    NETBIRD_MGMT_API_ENDPOINT: https://netbird.dev.oo
    NETBIRD_MGMT_GRPC_API_ENDPOINT: https://netbird.dev.oo
    NETBIRD_TOKEN_SOURCE: idToken
    USE_AUTH0: 'false'
    AUTH_AUTHORITY: https://auth.dev.oo
    AUTH_REDIRECT_URI: /auth
    AUTH_SILENT_REDIRECT_URI: /silent-auth
  envFromSecret:
    AUTH_AUDIENCE: netbird-sec/AUTH_CLIENT_ID
    AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID
    AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET
    AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES

# NOTE: relay with quic
# 1. add tls cert for relay via env: NB_TLS_KEY_FILE,NB_TLS_CERT_FILE
# 2. expose port with LoadBalancer
# 3. tweak sysctl udp max r/w buffer for quic

relay:
  enabled: true
  image:
    tag: 0.59.8
  service:
    type: LoadBalancer
    annotations:
      lbipam.cilium.io/ips: <LB VIP>
      lbipam.cilium.io/sharing-key: <LB_SHARE_KEY>
      lbipam.cilium.io/sharing-cross-namespace: "*"
  env:
    NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay
    NB_LISTEN_ADDRESS: :33080
    NB_TLS_KEY_FILE: /sec/tls/tls.key
    NB_TLS_CERT_FILE: /sec/tls/tls.crt
  envFromSecret:
    NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET

  volumeMounts:
    - name: tls-cert
      mountPath: /sec/tls
      readOnly: true
  volumes:
    - name: tls-cert
      secret:
        secretName: netbird-cert-tls

signal:
  enabled: true
  image:
    tag: 0.59.8

extraManifests:
- apiVersion: cert-manager.io/v1
  kind: Certificate
  metadata:
    name: netbird-cert
  spec:
    secretName: netbird-cert-tls
    isCA: false
    duration: 2400h
    renewBefore: 480h
    dnsNames:
      - netbird.dev.oo
    privateKey:
      algorithm: ECDSA
      encoding: PKCS8
      rotationPolicy: Always
    issuerRef:
      name: m0s-cert-issuer
      kind: ClusterIssuer
      group: cert-manager.io

- apiVersion: gateway.networking.k8s.io/v1
  kind: HTTPRoute
  metadata:
    name: netbird-aio
  spec:
    parentRefs:
      - name: traefik-gw
        namespace: infra
        sectionName: websecure-sub
    hostnames:
      - netbird.dev.oo
    rules:
      # dashboard: http
      - backendRefs:
          - name: netbird-dashboard
            port: 80

      # signal: gRPC + WebSocket
      - backendRefs:
          - name: netbird-signal
            port: 80
        matches:
          - path:
              type: PathPrefix
              value: /signalexchange.SignalExchange/
          - path:
              type: PathPrefix
              value: /ws-proxy/signal

      # management: HTTP + gRPC + WebSocket
      - backendRefs:
          - name: netbird-management
            port: 80
        matches:
          - path:
              type: PathPrefix
              value: /api
          - path:
              type: PathPrefix
              value: /management.ManagementService/
          - path:
              type: PathPrefix
              value: /ws-proxy/management

      # relay: WebSocket
      - backendRefs:
          - name: netbird-relay
            port: 33080
        matches:
          - path:
              type: PathPrefix
              value: /relay

for those do not need quic:

management:
  enabled: true

  # cache geolocation data across restart
  persistentVolume:
    enabled: true
    size: 400Mi

  image:
    tag: 0.59.8

  env:
    STUN_SERVER_URI: stun:netbird.dev.oo:3478
    TURN_SERVER_URI: turn:netbird.dev.oo:3478
    NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay
    NB_PEER_UPDATE_INTERVAL_MS: "200"
    NB_PEER_UPDATE_STARTUP_PERIOD_S: "4"
    NB_ACTIVITY_EVENT_STORE_ENGINE: postgres
    OIDC_ENDPOINT: "https://auth.dev.oo/.well-known/openid-configuration"
  envFromSecret:
    NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET
    AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID
    AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET
    AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES
    DATASTORE_ENCRYPTION_KEY: netbird-sec/DATASTORE_ENCRYPTION_KEY
    NETBIRD_STORE_ENGINE_POSTGRES_DSN: netbird-sec/POSTGRESQL_DSN
    NB_ACTIVITY_EVENT_POSTGRES_DSN: netbird-sec/POSTGRESQL_EVENTS_DSN

  configmap: |-
    {
      "StoreConfig": {
        "Engine": "postgres"
      },
      "Stuns": [
        {
          "Proto": "udp",
          "URI": "{{ .STUN_SERVER_URI }}"
        }
      ],
      "Relay": {
        "Addresses": ["{{ .NB_EXPOSED_ADDRESS }}"],
        "Secret": "{{ .NB_AUTH_SECRET }}",
        "CredentialsTTL": "12h"
      },
      "Signal": {
        "Proto": "https",
        "URI": "netbird.dev.oo:443"
      },
      "HttpConfig": {
        "AuthUserIDClaim": "email",
        "AuthAudience": "{{ .AUTH_CLIENT_ID }}",
        "OIDCConfigEndpoint":"{{ .OIDC_ENDPOINT }}",
        "IdpSignKeyRefreshEnabled": true,
        "LetsEncryptDomain": "",
        "CertFile": "",
        "CertKey": ""
      },
      "DataStoreEncryptionKey": "{{ .DATASTORE_ENCRYPTION_KEY }}",
      "IdpManagerConfig": {},
      "DeviceAuthorizationFlow": {
        "Provider": "hosted",
        "ProviderConfig": {
          "ClientID": "{{ .AUTH_CLIENT_ID }}",
          "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}",
          "Scope": "openid",
          "RedirectURLs": null,
          "UseIDToken": true
        }
      },
      "PKCEAuthorizationFlow": {
        "ProviderConfig": {
          "ClientID": "{{ .AUTH_CLIENT_ID }}",
          "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}",
          "Scope": "{{ .AUTH_SUPPORTED_SCOPES }}",
          "RedirectURLs": ["http://localhost:53000/"],
          "UseIDToken": true
        }
      }
    }

dashboard:
  enabled: true
  image:
    repository: netbirdio/dashboard
    tag: "v2.20.1"
  env:
    NETBIRD_MGMT_API_ENDPOINT: https://netbird.dev.oo
    NETBIRD_MGMT_GRPC_API_ENDPOINT: https://netbird.dev.oo
    NETBIRD_TOKEN_SOURCE: idToken
    USE_AUTH0: 'false'
    AUTH_AUTHORITY: https://auth.dev.oo
    AUTH_REDIRECT_URI: /auth
    AUTH_SILENT_REDIRECT_URI: /silent-auth
  envFromSecret:
    AUTH_AUDIENCE: netbird-sec/AUTH_CLIENT_ID
    AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID
    AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET
    AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES

relay:
  enabled: true
  image:
    tag: 0.59.8
  env:
    NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay
    NB_LISTEN_ADDRESS: :33080
  envFromSecret:
    NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET

signal:
  enabled: true
  image:
    tag: 0.59.8

extraManifests:
- apiVersion: gateway.networking.k8s.io/v1
  kind: HTTPRoute
  metadata:
    name: netbird-aio
  spec:
    parentRefs:
      - name: traefik-gw
        namespace: infra
        sectionName: websecure-sub
    hostnames:
      - netbird.dev.oo
    rules:
      # dashboard: http
      - backendRefs:
          - name: netbird-dashboard
            port: 80

      # signal: gRPC + WebSocket
      - backendRefs:
          - name: netbird-signal
            port: 80
        matches:
          - path:
              type: PathPrefix
              value: /signalexchange.SignalExchange/
          - path:
              type: PathPrefix
              value: /ws-proxy/signal

      # management: HTTP + gRPC + WebSocket
      - backendRefs:
          - name: netbird-management
            port: 80
        matches:
          - path:
              type: PathPrefix
              value: /api
          - path:
              type: PathPrefix
              value: /management.ManagementService/
          - path:
              type: PathPrefix
              value: /ws-proxy/management

      # relay: WebSocket
      - backendRefs:
          - name: netbird-relay
            port: 33080
        matches:
          - path:
              type: PathPrefix
              value: /relay
Originally created by @rtgiskard on GitHub (Oct 21, 2025). Original GitHub issue: https://github.com/netbirdio/netbird/issues/4679 Struggled few days and finally get it work with `authelia`! The available documentation misses quite a few important details, so here’s my final setup for anyone else trying to make it work: authelia: ``` identity_providers: oidc: # required by netbird cors: allowed_origins_from_client_redirect_uris: true endpoints: - userinfo - authorization - token - revocation - introspection claims_policies: netbird: id_token: [email,groups] clients: - client_name: netbird client_id: <client_id> client_secret: path: /path/to/secret/hash authorization_policy: one_factor public: false require_pkce: true pkce_challenge_method: S256 token_endpoint_auth_method: client_secret_post claims_policy: netbird audience: - <client_id> redirect_uris: - https://netbird.dev.oo/auth - https://netbird.dev.oo/silent-auth - http://localhost scopes: - openid - email - profile - groups - offline_access grant_types: - authorization_code - refresh_token ``` netbird values.yaml: ``` management: enabled: true # cache geolocation data across restart persistentVolume: enabled: true size: 400Mi image: tag: 0.59.8 env: STUN_SERVER_URI: stun:netbird.dev.oo:3478 TURN_SERVER_URI: turn:netbird.dev.oo:3478 NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay NB_PEER_UPDATE_INTERVAL_MS: "200" NB_PEER_UPDATE_STARTUP_PERIOD_S: "4" NB_ACTIVITY_EVENT_STORE_ENGINE: postgres OIDC_ENDPOINT: "https://auth.dev.oo/.well-known/openid-configuration" envFromSecret: NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES DATASTORE_ENCRYPTION_KEY: netbird-sec/DATASTORE_ENCRYPTION_KEY NETBIRD_STORE_ENGINE_POSTGRES_DSN: netbird-sec/POSTGRESQL_DSN NB_ACTIVITY_EVENT_POSTGRES_DSN: netbird-sec/POSTGRESQL_EVENTS_DSN configmap: |- { "StoreConfig": { "Engine": "postgres" }, "Stuns": [ { "Proto": "udp", "URI": "{{ .STUN_SERVER_URI }}" } ], "Relay": { "Addresses": ["{{ .NB_EXPOSED_ADDRESS }}"], "Secret": "{{ .NB_AUTH_SECRET }}", "CredentialsTTL": "12h" }, "Signal": { "Proto": "https", "URI": "netbird.dev.oo:443" }, "HttpConfig": { "AuthUserIDClaim": "email", "AuthAudience": "{{ .AUTH_CLIENT_ID }}", "OIDCConfigEndpoint":"{{ .OIDC_ENDPOINT }}", "IdpSignKeyRefreshEnabled": true, "LetsEncryptDomain": "", "CertFile": "", "CertKey": "" }, "DataStoreEncryptionKey": "{{ .DATASTORE_ENCRYPTION_KEY }}", "IdpManagerConfig": {}, "DeviceAuthorizationFlow": { "Provider": "hosted", "ProviderConfig": { "ClientID": "{{ .AUTH_CLIENT_ID }}", "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}", "Scope": "openid", "RedirectURLs": null, "UseIDToken": true } }, "PKCEAuthorizationFlow": { "ProviderConfig": { "ClientID": "{{ .AUTH_CLIENT_ID }}", "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}", "Scope": "{{ .AUTH_SUPPORTED_SCOPES }}", "RedirectURLs": ["http://localhost:53000/"], "UseIDToken": true } } } dashboard: enabled: true image: repository: netbirdio/dashboard tag: "v2.20.1" env: NETBIRD_MGMT_API_ENDPOINT: https://netbird.dev.oo NETBIRD_MGMT_GRPC_API_ENDPOINT: https://netbird.dev.oo NETBIRD_TOKEN_SOURCE: idToken USE_AUTH0: 'false' AUTH_AUTHORITY: https://auth.dev.oo AUTH_REDIRECT_URI: /auth AUTH_SILENT_REDIRECT_URI: /silent-auth envFromSecret: AUTH_AUDIENCE: netbird-sec/AUTH_CLIENT_ID AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES # NOTE: relay with quic # 1. add tls cert for relay via env: NB_TLS_KEY_FILE,NB_TLS_CERT_FILE # 2. expose port with LoadBalancer # 3. tweak sysctl udp max r/w buffer for quic relay: enabled: true image: tag: 0.59.8 service: type: LoadBalancer annotations: lbipam.cilium.io/ips: <LB VIP> lbipam.cilium.io/sharing-key: <LB_SHARE_KEY> lbipam.cilium.io/sharing-cross-namespace: "*" env: NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay NB_LISTEN_ADDRESS: :33080 NB_TLS_KEY_FILE: /sec/tls/tls.key NB_TLS_CERT_FILE: /sec/tls/tls.crt envFromSecret: NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET volumeMounts: - name: tls-cert mountPath: /sec/tls readOnly: true volumes: - name: tls-cert secret: secretName: netbird-cert-tls signal: enabled: true image: tag: 0.59.8 extraManifests: - apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: netbird-cert spec: secretName: netbird-cert-tls isCA: false duration: 2400h renewBefore: 480h dnsNames: - netbird.dev.oo privateKey: algorithm: ECDSA encoding: PKCS8 rotationPolicy: Always issuerRef: name: m0s-cert-issuer kind: ClusterIssuer group: cert-manager.io - apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: netbird-aio spec: parentRefs: - name: traefik-gw namespace: infra sectionName: websecure-sub hostnames: - netbird.dev.oo rules: # dashboard: http - backendRefs: - name: netbird-dashboard port: 80 # signal: gRPC + WebSocket - backendRefs: - name: netbird-signal port: 80 matches: - path: type: PathPrefix value: /signalexchange.SignalExchange/ - path: type: PathPrefix value: /ws-proxy/signal # management: HTTP + gRPC + WebSocket - backendRefs: - name: netbird-management port: 80 matches: - path: type: PathPrefix value: /api - path: type: PathPrefix value: /management.ManagementService/ - path: type: PathPrefix value: /ws-proxy/management # relay: WebSocket - backendRefs: - name: netbird-relay port: 33080 matches: - path: type: PathPrefix value: /relay ``` for those do not need quic: ``` management: enabled: true # cache geolocation data across restart persistentVolume: enabled: true size: 400Mi image: tag: 0.59.8 env: STUN_SERVER_URI: stun:netbird.dev.oo:3478 TURN_SERVER_URI: turn:netbird.dev.oo:3478 NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay NB_PEER_UPDATE_INTERVAL_MS: "200" NB_PEER_UPDATE_STARTUP_PERIOD_S: "4" NB_ACTIVITY_EVENT_STORE_ENGINE: postgres OIDC_ENDPOINT: "https://auth.dev.oo/.well-known/openid-configuration" envFromSecret: NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES DATASTORE_ENCRYPTION_KEY: netbird-sec/DATASTORE_ENCRYPTION_KEY NETBIRD_STORE_ENGINE_POSTGRES_DSN: netbird-sec/POSTGRESQL_DSN NB_ACTIVITY_EVENT_POSTGRES_DSN: netbird-sec/POSTGRESQL_EVENTS_DSN configmap: |- { "StoreConfig": { "Engine": "postgres" }, "Stuns": [ { "Proto": "udp", "URI": "{{ .STUN_SERVER_URI }}" } ], "Relay": { "Addresses": ["{{ .NB_EXPOSED_ADDRESS }}"], "Secret": "{{ .NB_AUTH_SECRET }}", "CredentialsTTL": "12h" }, "Signal": { "Proto": "https", "URI": "netbird.dev.oo:443" }, "HttpConfig": { "AuthUserIDClaim": "email", "AuthAudience": "{{ .AUTH_CLIENT_ID }}", "OIDCConfigEndpoint":"{{ .OIDC_ENDPOINT }}", "IdpSignKeyRefreshEnabled": true, "LetsEncryptDomain": "", "CertFile": "", "CertKey": "" }, "DataStoreEncryptionKey": "{{ .DATASTORE_ENCRYPTION_KEY }}", "IdpManagerConfig": {}, "DeviceAuthorizationFlow": { "Provider": "hosted", "ProviderConfig": { "ClientID": "{{ .AUTH_CLIENT_ID }}", "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}", "Scope": "openid", "RedirectURLs": null, "UseIDToken": true } }, "PKCEAuthorizationFlow": { "ProviderConfig": { "ClientID": "{{ .AUTH_CLIENT_ID }}", "ClientSecret": "{{ .AUTH_CLIENT_SECRET }}", "Scope": "{{ .AUTH_SUPPORTED_SCOPES }}", "RedirectURLs": ["http://localhost:53000/"], "UseIDToken": true } } } dashboard: enabled: true image: repository: netbirdio/dashboard tag: "v2.20.1" env: NETBIRD_MGMT_API_ENDPOINT: https://netbird.dev.oo NETBIRD_MGMT_GRPC_API_ENDPOINT: https://netbird.dev.oo NETBIRD_TOKEN_SOURCE: idToken USE_AUTH0: 'false' AUTH_AUTHORITY: https://auth.dev.oo AUTH_REDIRECT_URI: /auth AUTH_SILENT_REDIRECT_URI: /silent-auth envFromSecret: AUTH_AUDIENCE: netbird-sec/AUTH_CLIENT_ID AUTH_CLIENT_ID: netbird-sec/AUTH_CLIENT_ID AUTH_CLIENT_SECRET: netbird-sec/AUTH_CLIENT_SECRET AUTH_SUPPORTED_SCOPES: netbird-sec/AUTH_SUPPORTED_SCOPES relay: enabled: true image: tag: 0.59.8 env: NB_EXPOSED_ADDRESS: rels://netbird.dev.oo:443/relay NB_LISTEN_ADDRESS: :33080 envFromSecret: NB_AUTH_SECRET: netbird-sec/NB_AUTH_SECRET signal: enabled: true image: tag: 0.59.8 extraManifests: - apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: netbird-aio spec: parentRefs: - name: traefik-gw namespace: infra sectionName: websecure-sub hostnames: - netbird.dev.oo rules: # dashboard: http - backendRefs: - name: netbird-dashboard port: 80 # signal: gRPC + WebSocket - backendRefs: - name: netbird-signal port: 80 matches: - path: type: PathPrefix value: /signalexchange.SignalExchange/ - path: type: PathPrefix value: /ws-proxy/signal # management: HTTP + gRPC + WebSocket - backendRefs: - name: netbird-management port: 80 matches: - path: type: PathPrefix value: /api - path: type: PathPrefix value: /management.ManagementService/ - path: type: PathPrefix value: /ws-proxy/management # relay: WebSocket - backendRefs: - name: netbird-relay port: 33080 matches: - path: type: PathPrefix value: /relay ```
saavagebueno added the feature-request label 2026-08-05 01:24:19 -04:00
Author
Owner

@rtgiskard commented on GitHub (Oct 21, 2025):

just setup, debugging issues on use

<!-- gh-comment-id:3430174876 --> @rtgiskard commented on GitHub (Oct 21, 2025): just setup, debugging issues on use
Author
Owner

@EtaoinWu commented on GitHub (Oct 22, 2025):

Following your comment at https://github.com/authelia/authelia/discussions/7185#discussioncomment-14746308, it looks very weird that the audience must be the same as client_id, as the latter is recommended as a best practice to contain a randomized substring to make it not guessable. Is this exactly the case? Are you suggesting that changing either one by one letter is going to break the configuration?

<!-- gh-comment-id:3430563022 --> @EtaoinWu commented on GitHub (Oct 22, 2025): Following your comment at https://github.com/authelia/authelia/discussions/7185#discussioncomment-14746308, it looks very weird that the `audience` must be the same as `client_id`, as the latter is recommended as a best practice to contain a randomized substring to make it not guessable. Is this exactly the case? Are you suggesting that changing either one by one letter is going to break the configuration?
Author
Owner

@rtgiskard commented on GitHub (Oct 22, 2025):

Following your comment at authelia/authelia#7185 (reply in thread), it looks very weird that the audience must be the same as client_id, as the latter is recommended as a best practice to contain a randomized substring to make it not guessable. Is this exactly the case? Are you suggesting that changing either one by one letter is going to break the configuration?

Well, according to authelia's doc, client_id is recommended to be a generated random string. The audience could be different from the client_id, but I'm not sure how to modify it with authelia, and by default authelia use the client_id as the aud claim in the id_token, you may decode the idtoken and check the included claims

<!-- gh-comment-id:3430773966 --> @rtgiskard commented on GitHub (Oct 22, 2025): > Following your comment at [authelia/authelia#7185 (reply in thread)](https://github.com/authelia/authelia/discussions/7185#discussioncomment-14746308), it looks very weird that the `audience` must be the same as `client_id`, as the latter is recommended as a best practice to contain a randomized substring to make it not guessable. Is this exactly the case? Are you suggesting that changing either one by one letter is going to break the configuration? Well, according to [authelia's doc](https://www.authelia.com/configuration/identity-providers/openid-connect/clients/#client_name), `client_id` is recommended to be a generated random string. The `audience` could be different from the `client_id`, but I'm not sure how to modify it with authelia, and by default authelia use the `client_id` as the `aud` claim in the `id_token`, you may decode the idtoken and check the included claims
Author
Owner

@rtgiskard commented on GitHub (Dec 25, 2025):

Looks like I have to remove the Stuns section in the configmap for management.json, if not, new client will not see the peers without manual network map update

<!-- gh-comment-id:3692038632 --> @rtgiskard commented on GitHub (Dec 25, 2025): Looks like I have to remove the `Stuns` section in the configmap for management.json, if not, new client will not see the peers without manual network map update
Author
Owner

@rtgiskard commented on GitHub (Jan 1, 2026):

latest authedia support DeviceAuthorizationFlow which is generally required by the container or cli only clients, but to support it, you may need to have another oidc client with token_endpoint_auth_method: none for netbird in authelia config:

+        - client_name: netbird-pub
+          client_id: {client_id}-pub
+          client_secret:
+            path: /secrets/oidc-sec/oidc.client.netbird.hash
+          authorization_policy: one_factor
+          public: true
+          require_pkce: true
+          pkce_challenge_method: S256
+          token_endpoint_auth_method: none
+          claims_policy: netbird
+          audience:
+            - {client_id}-pub
+          scopes:
+            - openid
+            - email
+            - profile
+            - groups
+            - offline_access
+          grant_types:
+            - refresh_token
+            - urn:ietf:params:oauth:grant-type:device_code

not sure whether it is possible to have netbird configured with a single oidc client in authelia

<!-- gh-comment-id:3703464216 --> @rtgiskard commented on GitHub (Jan 1, 2026): latest authedia support DeviceAuthorizationFlow which is generally required by the container or cli only clients, but to support it, you may need to have another oidc client with `token_endpoint_auth_method: none` for netbird in authelia config: ``` + - client_name: netbird-pub + client_id: {client_id}-pub + client_secret: + path: /secrets/oidc-sec/oidc.client.netbird.hash + authorization_policy: one_factor + public: true + require_pkce: true + pkce_challenge_method: S256 + token_endpoint_auth_method: none + claims_policy: netbird + audience: + - {client_id}-pub + scopes: + - openid + - email + - profile + - groups + - offline_access + grant_types: + - refresh_token + - urn:ietf:params:oauth:grant-type:device_code ``` not sure whether it is possible to have netbird configured with a single oidc client in authelia
Sign in to join this conversation.
No Label feature-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#10011