[GH-ISSUE #4846] PocketID SSO fails for native clients (Android/Windows) in Kubernetes Helm deployment #9422

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

Originally created by @Dual-0 on GitHub (Nov 23, 2025).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/4846

I strugge with the Pocket ID docs and my kubernetes deployment:

deployment

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: netbird
  namespace: netbird
spec:
  interval: 1h
  chart:
    spec:
      chart: netbird
      version: ">=1.0.0 <2.0.0"
      sourceRef:
        kind: HelmRepository
        name: netbirdio
        namespace: flux-system
  values:
    global:
      namespace: netbird
    management:
      enabled: true
      image:
        tag: 0.60.2-arm64v8 # {"$imagepolicy": "flux-system:netbird-management:tag"}
      persistentVolume:
        enabled: false
      metrics:
        enabled: true
      configmap: |-
        {
          "Relay": {
            "Addresses": ["rels://netbird.domain.tld:443/relay"],
            "CredentialsTTL": "24h",
            "Secret": "{{ .RELAY_PASSWORD }}"
          },
          "Signal": {
            "Proto": "https",
            "URI": "netbird.domain.tld:443",
            "Username": "",
            "Password": null
          },
          "ReverseProxy": {
            "TrustedHTTPProxies": ["0.0.0.0/0"],
            "TrustedHTTPProxiesCount": 1,
            "TrustedPeers": ["0.0.0.0/0"]
          },
          "Datadir": "/var/lib/netbird/",
          "DataStoreEncryptionKey": "{{ .DATASTORE_ENCRYPTION_KEY }}",
          "StoreConfig": {
              "Engine": "postgres"
          },
          "HttpConfig": {
            "AuthIssuer": "https://id.domain.tld",
            "AuthAudience": "{{ .AUTH_CLIENT_ID }}",
            "AuthKeysLocation": "https://id.domain.tld/.well-known/jwks.json",
            "AuthUserIDClaim": "sub",
            "CertFile": "",
            "CertKey": "",
            "IdpSignKeyRefreshEnabled": false,
            "OIDCConfigEndpoint": "https://id.domain.tld/.well-known/openid-configuration"
          },
          "IdpManagerConfig": {
            "ManagerType": "pocketid",
            "ClientConfig": {
              "Issuer": "https://id.domain.tld",
              "TokenEndpoint": "https://id.domain.tld/api/oidc/token",
              "ClientID": "{{ .AUTH_CLIENT_ID }}",
              "ClientSecret": "",
              "GrantType": "client_credentials"
            },
            "ExtraConfig": {
              "ManagementEndpoint": "https://id.domain.tld",
              "ApiToken": "{{ .NETBIRD_IDP_MGMT_EXTRA_API_TOKEN }}"
            }
          },
          "DeviceAuthorizationFlow": {
              "Provider": "none",
              "ProviderConfig": {
                  "ClientID": "{{ .AUTH_CLIENT_ID }}",
                  "ClientSecret": "",
                  "Domain": "id.domain.tld",
                  "Audience": "{{ .AUTH_CLIENT_ID }}",
                  "TokenEndpoint": "https://id.domain.tld/api/oidc/token",
                  "DeviceAuthEndpoint": "https://id.domain.tld/api/oidc/device/authorize",
                  "AuthorizationEndpoint": "https://id.domain.tld/authorize",
                  "Scope": "openid email profile groups",
                  "UseIDToken": true,
                  "RedirectURLs": null,
                  "DisablePromptLogin": false,
                  "LoginFlag": 0
              }
          },
          "PKCEAuthorizationFlow": {
            "ProviderConfig": {
              "Audience": "{{ .AUTH_CLIENT_ID }}",
              "ClientID": "{{ .AUTH_CLIENT_ID }}",
              "ClientSecret": "",
              "Domain": "id.domain.tld",
              "AuthorizationEndpoint": "https://id.domain.tld/authorize",
              "TokenEndpoint": "https://id.domain.tld/api/oidc/token",
              "Scope": "openid email profile groups",
              "UseIDToken": true,
              "RedirectURLs": [
                  "https://netbird.domain.tld"
              ],
              "DisablePromptLogin": false,
              "LoginFlag": 1
            }
          }
        }
      # Management Service Configuration
      podCommand:
        args:
          - --port=80
          - --log-file=console
          - --disable-anonymous-metrics=false
          - --dns-domain=netbird.cloud
          - --single-account-mode-domain=domain.tld
      envRaw:
        - name: NETBIRD_MGMT_API_ENDPOINT
          value: "https://netbird.domain.tld"
        - name: NETBIRD_MGMT_GRPC_API_ENDPOINT
          value: "https://netbird.domain.tld"
        - name: NETBIRD_MGMT_IDP
          value: "pocketid"
        - name: NETBIRD_IDP_MGMT_CLIENT_ID
          value: "netbird"
        - name: NETBIRD_IDP_MGMT_EXTRA_MANAGEMENT_ENDPOINT
          value: "https://id.domain.tld"
        - name: NETBIRD_IDP_MGMT_EXTRA_API_TOKEN
          valueFrom: {secretKeyRef: {name: netbird-secret, key: POCKET_ID_TOKEN}}
        - name: NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT
          value: "https://id.domain.tld/.well-known/openid-configuration"
        # Secrets
        - name: RELAY_PASSWORD
          valueFrom: {secretKeyRef: {name: netbird-secret, key: RELAY_PASSWORD}}
        - name: DATASTORE_ENCRYPTION_KEY
          valueFrom: {secretKeyRef: {name: netbird-secret, key: DATASTORE_ENCRYPTION_KEY}}
        - name: NETBIRD_STORE_ENGINE_POSTGRES_DSN
          valueFrom: {secretKeyRef: {name: netbird-secret, key: POSTGRES_DSN}}
        # Auth Configuration
        - name: AUTH_AUDIENCE
          valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}}
        - name: AUTH_CLIENT_ID
          valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}}
        - name: AUTH_AUTHORITY
          value: "https://id.domain.tld"
        - name: USE_AUTH0
          value: "false"
        - name: AUTH_SUPPORTED_SCOPES
          value: "openid email profile groups"
        - name: AUTH_REDIRECT_URI
          value: "/auth"
        - name: AUTH_SILENT_REDIRECT_URI
          value: "/silent-auth"
        - name: NETBIRD_TOKEN_SOURCE
          value: "idToken"
        - name: NETBIRD_AUTH_USER_ID_CLAIM
          value: "sub"
        # Device Auth
        - name: NETBIRD_AUTH_DEVICE_AUTH_PROVIDER
          value: "none"
        - name: NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID
          valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}}
        - name: NETBIRD_AUTH_DEVICE_AUTH_AUDIENCE
          valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}}
        - name: NETBIRD_AUTH_DEVICE_AUTH_SCOPE
          value: "openid profile email groups"
        - name: NETBIRD_AUTH_DEVICE_AUTH_USE_ID_TOKEN
          value: "true"
        # Misc
        - name: NETBIRD_MGMT_DISABLE_DEFAULT_POLICY
          value: "false"
        - name: NETBIRD_STORE_CONFIG_ENGINE
          value: "postgres"
      ingress:
        enabled: true
        className: "nginx"
        annotations:
          # TLS and HTTPS Configuration
          cert-manager.io/cluster-issuer: "letsencrypt-hetzner"
          cert-manager.io/private-key-algorithm: "ECDSA"
          cert-manager.io/private-key-size: "256"
          nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
          nginx.ingress.kubernetes.io/enable-http3: "true"
          # Real IP Configuration
          nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
        hosts:
          - host: netbird.domain.tld
            paths:
              - path: /api
                pathType: ImplementationSpecific
        tls:
          - secretName: netbird-tls-secret
            hosts:
              - netbird.domain.tld
      ingressGrpc:
        enabled: true
        className: "nginx"
        annotations:
          nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
          # TLS and HTTPS Configuration
          cert-manager.io/cluster-issuer: "letsencrypt-hetzner"
          cert-manager.io/private-key-algorithm: "ECDSA"
          cert-manager.io/private-key-size: "256"
          nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
          nginx.ingress.kubernetes.io/enable-http3: "true"
          # Real IP Configuration
          nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
        hosts:
          - host: netbird.domain.tld
            paths:
              - path: /management.ManagementService
                pathType: ImplementationSpecific
        tls:
          - secretName: netbird-tls-secret
            hosts:
              - netbird.domain.tld
    signal:
      enabled: true
      image:
        tag: 0.60.2-arm64v8 # {"$imagepolicy": "flux-system:netbird-signal:tag"}
      metrics:
        enabled: true
      ingress:
        enabled: true
        className: "nginx"
        annotations:
          nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
          # TLS and HTTPS Configuration
          cert-manager.io/cluster-issuer: "letsencrypt-hetzner"
          cert-manager.io/private-key-algorithm: "ECDSA"
          cert-manager.io/private-key-size: "256"
          nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
          nginx.ingress.kubernetes.io/enable-http3: "true"
          # Real IP Configuration
          nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
        hosts:
          - host: netbird.domain.tld
            paths:
              - path: /signalexchange.SignalExchange
                pathType: ImplementationSpecific
        tls:
          - secretName: netbird-tls-secret
            hosts:
              - netbird.domain.tld
    relay:
      enabled: true
      image:
        tag: 0.60.2-arm64v8 # {"$imagepolicy": "flux-system:netbird-relay:tag"}
      metrics:
        enabled: true
      ingress:
        enabled: true
        className: "nginx"
        annotations:
          # TLS and HTTPS Configuration
          cert-manager.io/cluster-issuer: "letsencrypt-hetzner"
          cert-manager.io/private-key-algorithm: "ECDSA"
          cert-manager.io/private-key-size: "256"
          nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
          nginx.ingress.kubernetes.io/enable-http3: "true"
          # Real IP Configuration
          nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
          # Proxy Settings
          nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
          nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
        hosts:
          - host: netbird.domain.tld
            paths:
              - path: /relay
                pathType: ImplementationSpecific
        tls:
          - secretName: netbird-relay-tls
            hosts:
              - netbird.domain.tld
      envRaw:
        - name: NB_AUTH_SECRET
          valueFrom: {secretKeyRef: {name: netbird-secret, key: RELAY_PASSWORD}}
        - name: NB_LOG_LEVEL
          value: info
        - name: NB_LISTEN_ADDRESS
          value: ":33080"
        - name: NB_EXPOSED_ADDRESS
          value: rels://netbird.domain.tld:443/relay
      resources:
        requests:
          cpu: 200m
          memory: 128Mi
        limits:
          cpu: 500m
          memory: 256Mi
    dashboard:
      enabled: true
      image:
        tag: main
      envRaw:
        - name: NETBIRD_MGMT_API_ENDPOINT
          value: "https://netbird.domain.tld"
        - name: NETBIRD_MGMT_GRPC_API_ENDPOINT
          value: "https://netbird.domain.tld"
        - name: AUTH_AUDIENCE
          valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}}
        - name: AUTH_CLIENT_ID
          valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}}
        - name: AUTH_AUTHORITY
          value: "https://id.domain.tld"
        - name: USE_AUTH0
          value: "false"
        - name: AUTH_SUPPORTED_SCOPES
          value: "openid email profile groups"
        - name: AUTH_REDIRECT_URI
          value: "/auth"
        - name: AUTH_SILENT_REDIRECT_URI
          value: "/silent-auth"
        - name: NETBIRD_TOKEN_SOURCE
          value: "idToken"
      ingress:
        enabled: true
        className: "nginx"
        annotations:
          # TLS and HTTPS Configuration
          cert-manager.io/cluster-issuer: "letsencrypt-hetzner"
          cert-manager.io/private-key-algorithm: "ECDSA"
          cert-manager.io/private-key-size: "256"
          nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
          nginx.ingress.kubernetes.io/enable-http3: "true"
          # Real IP Configuration
          nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
        hosts:
          - host: netbird.domain.tld
            paths:
              - path: /
                pathType: ImplementationSpecific
        tls:
          - secretName: netbird-tls-secret
            hosts:
              - netbird.domain.tld
    metrics:
      serviceMonitor:
        enabled: true
        selector:
          release: kube-prometheus-stack
        interval: 15s
        labels:
          instance: netbird

on the Pocket ID side I configure as described in the docs:

Image

The Issue

I can successfully log in to the NetBird dashboard via a web browser. However, when trying to connect via the native Android or Windows Client, the SSO flow route me to the peers page.

Steps to Reproduce

  1. Deploy NetBird using the HelmRelease above.
  2. Configure PocketID as shown in the screenshot.
  3. On a Windows or Android client, click "Connect with SSO".
  4. The browser opens and I successfully authenticate with PocketID.
  5. The browser then redirects to the NetBird dashboard's peers page (https://netbird.domain.tld/peers), which is empty.
  6. The native client never receives the authentication token, and remains disconnected.

Expected Behavior

After authenticating in the browser, the browser should close and hand the authentication token back to the native client (Desktop or Android), which should then connect successfully.

Analysis

This creates a dilemma: following the documentation as written makes native clients unusable. Is there a mistake in the documentation, or is there a different way to structure the configuration to support both the web dashboard and native clients?

Originally created by @Dual-0 on GitHub (Nov 23, 2025). Original GitHub issue: https://github.com/netbirdio/netbird/issues/4846 I strugge with the [Pocket ID docs](https://docs.netbird.io/selfhosted/identity-providers#pocket-id) and my kubernetes deployment: <details><summary>deployment</summary> <p> ``` apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: netbird namespace: netbird spec: interval: 1h chart: spec: chart: netbird version: ">=1.0.0 <2.0.0" sourceRef: kind: HelmRepository name: netbirdio namespace: flux-system values: global: namespace: netbird management: enabled: true image: tag: 0.60.2-arm64v8 # {"$imagepolicy": "flux-system:netbird-management:tag"} persistentVolume: enabled: false metrics: enabled: true configmap: |- { "Relay": { "Addresses": ["rels://netbird.domain.tld:443/relay"], "CredentialsTTL": "24h", "Secret": "{{ .RELAY_PASSWORD }}" }, "Signal": { "Proto": "https", "URI": "netbird.domain.tld:443", "Username": "", "Password": null }, "ReverseProxy": { "TrustedHTTPProxies": ["0.0.0.0/0"], "TrustedHTTPProxiesCount": 1, "TrustedPeers": ["0.0.0.0/0"] }, "Datadir": "/var/lib/netbird/", "DataStoreEncryptionKey": "{{ .DATASTORE_ENCRYPTION_KEY }}", "StoreConfig": { "Engine": "postgres" }, "HttpConfig": { "AuthIssuer": "https://id.domain.tld", "AuthAudience": "{{ .AUTH_CLIENT_ID }}", "AuthKeysLocation": "https://id.domain.tld/.well-known/jwks.json", "AuthUserIDClaim": "sub", "CertFile": "", "CertKey": "", "IdpSignKeyRefreshEnabled": false, "OIDCConfigEndpoint": "https://id.domain.tld/.well-known/openid-configuration" }, "IdpManagerConfig": { "ManagerType": "pocketid", "ClientConfig": { "Issuer": "https://id.domain.tld", "TokenEndpoint": "https://id.domain.tld/api/oidc/token", "ClientID": "{{ .AUTH_CLIENT_ID }}", "ClientSecret": "", "GrantType": "client_credentials" }, "ExtraConfig": { "ManagementEndpoint": "https://id.domain.tld", "ApiToken": "{{ .NETBIRD_IDP_MGMT_EXTRA_API_TOKEN }}" } }, "DeviceAuthorizationFlow": { "Provider": "none", "ProviderConfig": { "ClientID": "{{ .AUTH_CLIENT_ID }}", "ClientSecret": "", "Domain": "id.domain.tld", "Audience": "{{ .AUTH_CLIENT_ID }}", "TokenEndpoint": "https://id.domain.tld/api/oidc/token", "DeviceAuthEndpoint": "https://id.domain.tld/api/oidc/device/authorize", "AuthorizationEndpoint": "https://id.domain.tld/authorize", "Scope": "openid email profile groups", "UseIDToken": true, "RedirectURLs": null, "DisablePromptLogin": false, "LoginFlag": 0 } }, "PKCEAuthorizationFlow": { "ProviderConfig": { "Audience": "{{ .AUTH_CLIENT_ID }}", "ClientID": "{{ .AUTH_CLIENT_ID }}", "ClientSecret": "", "Domain": "id.domain.tld", "AuthorizationEndpoint": "https://id.domain.tld/authorize", "TokenEndpoint": "https://id.domain.tld/api/oidc/token", "Scope": "openid email profile groups", "UseIDToken": true, "RedirectURLs": [ "https://netbird.domain.tld" ], "DisablePromptLogin": false, "LoginFlag": 1 } } } # Management Service Configuration podCommand: args: - --port=80 - --log-file=console - --disable-anonymous-metrics=false - --dns-domain=netbird.cloud - --single-account-mode-domain=domain.tld envRaw: - name: NETBIRD_MGMT_API_ENDPOINT value: "https://netbird.domain.tld" - name: NETBIRD_MGMT_GRPC_API_ENDPOINT value: "https://netbird.domain.tld" - name: NETBIRD_MGMT_IDP value: "pocketid" - name: NETBIRD_IDP_MGMT_CLIENT_ID value: "netbird" - name: NETBIRD_IDP_MGMT_EXTRA_MANAGEMENT_ENDPOINT value: "https://id.domain.tld" - name: NETBIRD_IDP_MGMT_EXTRA_API_TOKEN valueFrom: {secretKeyRef: {name: netbird-secret, key: POCKET_ID_TOKEN}} - name: NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT value: "https://id.domain.tld/.well-known/openid-configuration" # Secrets - name: RELAY_PASSWORD valueFrom: {secretKeyRef: {name: netbird-secret, key: RELAY_PASSWORD}} - name: DATASTORE_ENCRYPTION_KEY valueFrom: {secretKeyRef: {name: netbird-secret, key: DATASTORE_ENCRYPTION_KEY}} - name: NETBIRD_STORE_ENGINE_POSTGRES_DSN valueFrom: {secretKeyRef: {name: netbird-secret, key: POSTGRES_DSN}} # Auth Configuration - name: AUTH_AUDIENCE valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}} - name: AUTH_CLIENT_ID valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}} - name: AUTH_AUTHORITY value: "https://id.domain.tld" - name: USE_AUTH0 value: "false" - name: AUTH_SUPPORTED_SCOPES value: "openid email profile groups" - name: AUTH_REDIRECT_URI value: "/auth" - name: AUTH_SILENT_REDIRECT_URI value: "/silent-auth" - name: NETBIRD_TOKEN_SOURCE value: "idToken" - name: NETBIRD_AUTH_USER_ID_CLAIM value: "sub" # Device Auth - name: NETBIRD_AUTH_DEVICE_AUTH_PROVIDER value: "none" - name: NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}} - name: NETBIRD_AUTH_DEVICE_AUTH_AUDIENCE valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}} - name: NETBIRD_AUTH_DEVICE_AUTH_SCOPE value: "openid profile email groups" - name: NETBIRD_AUTH_DEVICE_AUTH_USE_ID_TOKEN value: "true" # Misc - name: NETBIRD_MGMT_DISABLE_DEFAULT_POLICY value: "false" - name: NETBIRD_STORE_CONFIG_ENGINE value: "postgres" ingress: enabled: true className: "nginx" annotations: # TLS and HTTPS Configuration cert-manager.io/cluster-issuer: "letsencrypt-hetzner" cert-manager.io/private-key-algorithm: "ECDSA" cert-manager.io/private-key-size: "256" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/enable-http3: "true" # Real IP Configuration nginx.ingress.kubernetes.io/use-forwarded-headers: "true" hosts: - host: netbird.domain.tld paths: - path: /api pathType: ImplementationSpecific tls: - secretName: netbird-tls-secret hosts: - netbird.domain.tld ingressGrpc: enabled: true className: "nginx" annotations: nginx.ingress.kubernetes.io/backend-protocol: "GRPC" # TLS and HTTPS Configuration cert-manager.io/cluster-issuer: "letsencrypt-hetzner" cert-manager.io/private-key-algorithm: "ECDSA" cert-manager.io/private-key-size: "256" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/enable-http3: "true" # Real IP Configuration nginx.ingress.kubernetes.io/use-forwarded-headers: "true" hosts: - host: netbird.domain.tld paths: - path: /management.ManagementService pathType: ImplementationSpecific tls: - secretName: netbird-tls-secret hosts: - netbird.domain.tld signal: enabled: true image: tag: 0.60.2-arm64v8 # {"$imagepolicy": "flux-system:netbird-signal:tag"} metrics: enabled: true ingress: enabled: true className: "nginx" annotations: nginx.ingress.kubernetes.io/backend-protocol: "GRPC" # TLS and HTTPS Configuration cert-manager.io/cluster-issuer: "letsencrypt-hetzner" cert-manager.io/private-key-algorithm: "ECDSA" cert-manager.io/private-key-size: "256" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/enable-http3: "true" # Real IP Configuration nginx.ingress.kubernetes.io/use-forwarded-headers: "true" hosts: - host: netbird.domain.tld paths: - path: /signalexchange.SignalExchange pathType: ImplementationSpecific tls: - secretName: netbird-tls-secret hosts: - netbird.domain.tld relay: enabled: true image: tag: 0.60.2-arm64v8 # {"$imagepolicy": "flux-system:netbird-relay:tag"} metrics: enabled: true ingress: enabled: true className: "nginx" annotations: # TLS and HTTPS Configuration cert-manager.io/cluster-issuer: "letsencrypt-hetzner" cert-manager.io/private-key-algorithm: "ECDSA" cert-manager.io/private-key-size: "256" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/enable-http3: "true" # Real IP Configuration nginx.ingress.kubernetes.io/use-forwarded-headers: "true" # Proxy Settings nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" hosts: - host: netbird.domain.tld paths: - path: /relay pathType: ImplementationSpecific tls: - secretName: netbird-relay-tls hosts: - netbird.domain.tld envRaw: - name: NB_AUTH_SECRET valueFrom: {secretKeyRef: {name: netbird-secret, key: RELAY_PASSWORD}} - name: NB_LOG_LEVEL value: info - name: NB_LISTEN_ADDRESS value: ":33080" - name: NB_EXPOSED_ADDRESS value: rels://netbird.domain.tld:443/relay resources: requests: cpu: 200m memory: 128Mi limits: cpu: 500m memory: 256Mi dashboard: enabled: true image: tag: main envRaw: - name: NETBIRD_MGMT_API_ENDPOINT value: "https://netbird.domain.tld" - name: NETBIRD_MGMT_GRPC_API_ENDPOINT value: "https://netbird.domain.tld" - name: AUTH_AUDIENCE valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}} - name: AUTH_CLIENT_ID valueFrom: {secretKeyRef: {name: netbird-secret, key: OIDC_CLIENT_ID}} - name: AUTH_AUTHORITY value: "https://id.domain.tld" - name: USE_AUTH0 value: "false" - name: AUTH_SUPPORTED_SCOPES value: "openid email profile groups" - name: AUTH_REDIRECT_URI value: "/auth" - name: AUTH_SILENT_REDIRECT_URI value: "/silent-auth" - name: NETBIRD_TOKEN_SOURCE value: "idToken" ingress: enabled: true className: "nginx" annotations: # TLS and HTTPS Configuration cert-manager.io/cluster-issuer: "letsencrypt-hetzner" cert-manager.io/private-key-algorithm: "ECDSA" cert-manager.io/private-key-size: "256" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/enable-http3: "true" # Real IP Configuration nginx.ingress.kubernetes.io/use-forwarded-headers: "true" hosts: - host: netbird.domain.tld paths: - path: / pathType: ImplementationSpecific tls: - secretName: netbird-tls-secret hosts: - netbird.domain.tld metrics: serviceMonitor: enabled: true selector: release: kube-prometheus-stack interval: 15s labels: instance: netbird ``` on the Pocket ID side I configure as described in the docs: <img width="1495" height="1025" alt="Image" src="https://github.com/user-attachments/assets/86baebf2-2916-4202-a01c-638eb4045f23" /> </p> </details> ### The Issue I can successfully log in to the NetBird dashboard via a web browser. However, when trying to connect via the native Android or Windows Client, the SSO flow route me to the peers page. ### Steps to Reproduce 1. Deploy NetBird using the `HelmRelease` above. 2. Configure PocketID as shown in the screenshot. 3. On a Windows or Android client, click "Connect with SSO". 4. The browser opens and I successfully authenticate with PocketID. 5. The browser then redirects to the NetBird dashboard's peers page (`https://netbird.domain.tld/peers`), which is empty. 6. The native client never receives the authentication token, and remains disconnected. ### Expected Behavior After authenticating in the browser, the browser should close and hand the authentication token back to the native client (Desktop or Android), which should then connect successfully. ### Analysis This creates a dilemma: following the documentation as written makes native clients unusable. Is there a mistake in the documentation, or is there a different way to structure the configuration to support both the web dashboard and native clients?
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#9422