GoDoxy
Advanced TopicsMiddlewaresAuthentication and Security

OIDC

OpenID Connect authentication

Configuration

Omitted fields inherit from the matching GODOXY_OIDC_* environment variable. The middleware can run with a fully standalone issuer and credentials; global OIDC does not need to be enabled for the WebUI.

OptionDescriptionDefault
issuer_urlOIDC issuer URLGODOXY_OIDC_ISSUER_URL
allowed_usersAllowed usersGODOXY_OIDC_ALLOWED_USERS
allowed_groupsAllowed groupsGODOXY_OIDC_ALLOWED_GROUPS
client_idClient IDGODOXY_OIDC_CLIENT_ID
client_secretClient secretGODOXY_OIDC_CLIENT_SECRET
scopesOAuth scopesGODOXY_OIDC_SCOPES (openid, profile, email, groups)

After inheritance, issuer_url, client_id, client_secret, and scopes are required, and at least one of allowed_users or allowed_groups must be set. scopes accepts a YAML list or a comma-separated string.

The option is scopes (a list). scope is an unknown field and is rejected.

The OIDC middleware only processes GET requests. Non-GET requests and WebSocket connections are blocked with a 403 Forbidden response.

See OIDC Configuration for environment variables, callback URLs, and identity-provider setup.

Standalone issuer

Use issuer_url when the identity provider issues a different issuer per application, for example Authentik (https://auth.example.com/application/o/<slug>/). Discovery and token verification then use that issuer instead of the global one.

Providers that share the same issuer and client ID reuse discovery and verifier state. Route-specific secrets, scopes, and allow lists stay per middleware.

Examples

WebUI

Enabled by default if the global OIDC environment variables are set.

Entrypoint

entrypoint:
  middlewares:
    - use: oidc
      bypass:
        - route pocket-id
        - route immich & path glob(/api/*)
        - remote 127.0.0.1
        - remote 192.168.0.0/16

Docker Labels

proxy.#1.middlewares.oidc: |
  issuer_url: https://auth.example.com/application/o/app-b/
  allowed_users: user1, user2
  allowed_groups: group1, group2
  client_id: client1
  client_secret: secret1
  scopes:
    - openid
    - profile
    - email
    - groups

A comma-separated string is also accepted: scopes: openid, profile, email, groups.

Route Files

myapp:
  middlewares:
    oidc:
      issuer_url: https://auth.example.com/application/o/app-b/
      allowed_users:
        - user1
        - user2
      allowed_groups:
        - group1
        - group2
      client_id: client1
      client_secret: secret1
      scopes:
        - openid
        - profile
        - email
        - groups

On this page