Skip to main content

Authentication and Service Exposure

This page explains how to configure authentication and which services should be exposed outside the cluster.

Authentication modes

The Marketplace deployment supports two authentication modes:

  • disabled
  • oidc

Disabled authentication

This is the default and simplest deployment mode.

Use:

runtime:
commonEnv:
AUTH_MODE: "disabled"
AUTH_DISABLED: "true"

Choose this mode when:

  • access is already restricted by your network perimeter
  • the environment is intended for internal platform users only
  • you want the fastest deployment path

OIDC authentication

Use OIDC when the environment must authenticate users through your identity provider.

Set:

runtime:
commonEnv:
AUTH_MODE: "oidc"
AUTH_DISABLED: "false"
OIDC_ISSUER_URL: "https://id.example.com/realms/engineering"
OIDC_AUDIENCE: "smart-engineering"
OIDC_CLIENT_ID: "smart-engineering-ui"
OIDC_SCOPE: "openid profile email"
OIDC_EMAIL_CLAIM: "email"
OIDC_NAME_CLAIM: "name"
OIDC_USERNAME_CLAIM: "preferred_username"
OIDC_POST_LOGOUT_REDIRECT_URI: "https://smart-eng.example.com/login"

The backend validates JWTs against the issuer and resolves the JWKS document automatically unless you provide a dedicated OIDC_JWKS_URL.

The frontend uses the same runtime configuration and expects the login callback path:

/auth/callback

For the Marketplace deployment profile, OIDC_GROUPS_CLAIM and OIDC_CURRENT_ORG_CLAIM are not required and can be omitted unless your organization has a specific custom identity mapping requirement.

OIDC Audience

If your identity provider does not require audience validation, you can leave OIDC_AUDIENCE empty. If you set it, the backend validates it strictly.

Which services should be exposed

You do not need to expose every service outside the cluster.

Services that are usually exposed

  • Frontend
  • API
  • Gateway, if the bundled gateway is enabled and you want direct access to the OpenAI-compatible endpoint

Services that should remain internal

  • PostgreSQL
  • Valkey
  • Migration job
  • internal Kubernetes service-to-service traffic

Ingress configuration

If you use ingress, the chart expects:

  • ingress.frontendHost
  • ingress.apiHost
  • ingress.gatewayHost when gateway.enabled=true

Example:

ingress:
enabled: true
className: nginx
frontendHost: smart-eng.example.com
apiHost: api.smart-eng.example.com
gatewayHost: gateway.smart-eng.example.com
tls:
- hosts:
- smart-eng.example.com
- api.smart-eng.example.com
- gateway.smart-eng.example.com
secretName: smart-eng-tls

CORS and browser access

If your frontend and API use different origins, set ALLOWED_ORIGINS to the full list of allowed browser origins:

runtime:
commonEnv:
ALLOWED_ORIGINS: "https://smart-eng.example.com,https://api.smart-eng.example.com"

If the bundled gateway is exposed directly to browsers, also set its CORS configuration:

gateway:
env:
CORS_ALLOW_ORIGINS: "https://smart-eng.example.com"