Admin Password

By default, the Admin UI and Admin API are open — anyone who can reach port 8081 can view and modify your entire configuration. Setting an admin password adds authentication to all admin endpoints.

Enabling authentication

Add adminPassword to the server section of your config.yaml:

server:
  host: 0.0.0.0
  port: 8080
  adminPort: 8081
  adminPassword: ${MAGEC_ADMIN_PASSWORD}

Then set the environment variable before starting Magec:

export MAGEC_ADMIN_PASSWORD="your-strong-password"
magec --config config.yaml

When the password is set, every request to /api/ endpoints requires a Authorization: Bearer <password> header. The Admin UI handles this automatically — it shows a login screen on first load and sends the header on every subsequent request.

How it works

AspectDetail
HeaderAuthorization: Bearer <password> on all /api/ requests
ComparisonConstant-time (crypto/subtle) — immune to timing attacks
Rate limiting5 failed attempts per minute per IP address
Static filesThe Admin UI itself (HTML, CSS, JS) is always accessible — only API calls require auth
CORS preflightOPTIONS requests bypass authentication
Auth checkGET /api/v1/admin/auth/check — returns 200 if the password is correct, 401 otherwise

Login screen

When authentication is enabled, the Admin UI shows a password prompt before anything else:

  • The password is stored in memory only — closing the browser tab requires re-authentication
  • No cookies, no localStorage, no session tokens
  • The UI calls /api/v1/admin/auth/check on load to determine if authentication is needed

Docker and Kubernetes

Pass the password as an environment variable — never hardcode it in config.yaml:

Docker Compose

services:
  magec:
    image: ghcr.io/achetronic/magec:latest
    environment:
      MAGEC_ADMIN_PASSWORD: "${MAGEC_ADMIN_PASSWORD}"

Kubernetes

env:
  - name: MAGEC_ADMIN_PASSWORD
    valueFrom:
      secretKeyRef:
        name: magec-secrets
        key: admin-password

What happens without a password

If adminPassword is not set (or is empty), the server starts normally with a warning in the logs:

WARN  Admin API is unprotected — set adminPassword in config.yaml

All admin endpoints work without authentication. This is fine for local development but should never be used in production or anywhere the admin port is network-accessible.

Secrets encryption

The admin password also serves as the encryption key for Secrets. When a password is set, secret values are encrypted at rest using AES-256-GCM with a PBKDF2-derived key. Without a password, secrets are stored in plain text and a warning is logged.

The admin password is a single shared credential — there are no user accounts or roles. If you need network-level isolation, restrict access to the admin port using firewall rules or a reverse proxy.