Skip to content

Central Auth configuration

The service follows shared Dynaconf configuration. RPT_CONFIG_DIR selects the directory containing plain settings.toml and optional .secrets.toml; environment overrides come last. Nested environment keys use two underscores. No credentials ship in the image.

Transport and identities

auth.mode is token, mtls, or both. TLS is required in production. Mutual TLS also requires tls.client_ca; each verified client SAN must map unambiguously to one configured identity. In combined mode both credentials must identify the same identity. CA trust alone grants no lookup access. Unknown/malformed credentials never cause fallback to another authentication mode.

auth.identities is a list of records with name, role, token_digests, and sans. Roles are registrar and probe. Token digests are lowercase SHA-256 hexadecimal values of high-entropy bearer tokens. Distinct identities cannot share a token digest or SAN. Multiple values per identity support rotation overlap.

Store the probe's actual token and/or client key/certificate under probe, along with the server CA and probe target. The packaged probe reads configuration directly; it never prints secrets. Identity configuration and certificates reload on restart.

Backend options

backend.module selects an installed API-version-1 module. Only backend.options is passed to it. Top-level option names are normalized to lowercase to match nested environment overrides; values are unchanged. There is one backend and no fallback or result cache.

Module Options
rpt_central_auth.backends.csv Required file; optional max_entries (100000)
rpt_central_auth.backends.sqlalchemy Required url; optional ca, tls (true), verify_tls (true), development (false), pool_size (16)
Custom installed module Its documented backend-specific options

PostgreSQL defaults to verified TLS. Explicit verify_tls=false retains encryption while disabling server certificate/hostname verification, overriding libpq default, URL, and environment CA selection. This connection mode does not establish server identity. Unencrypted TCP requires both the service development environment and backend development=true, with tls=false. Unix sockets do not use TLS.

Use absolute secret paths and URL-encoded database passwords. Connection errors, credentials, URLs, and raw exception messages are not sent to callers or included in application logs. SQLite opens an existing file without creating a missing database.

Runtime and monitoring defaults

The following table lists Python defaults. Port/capacity values must be integers; all numeric values must be finite and positive. max_rpcs must be at least lookup worker count plus 16 to reserve frontend capacity; stale_after must exceed the check interval. Rates are requests per minute; timeouts and intervals are seconds.

Environment variable Default
RPT_ENVIRONMENT 'production'
RPT_HOST '0.0.0.0'
RPT_PORT 50051
RPT_TLS__INSECURE false
RPT_TLS__CERT ''
RPT_TLS__KEY ''
RPT_TLS__CLIENT_CA ''
RPT_AUTH__MODE 'token'
RPT_AUTH__IDENTITIES []
RPT_BACKEND__MODULE 'rpt_central_auth.backends.csv'
RPT_RUNTIME__WORKERS 32
RPT_RUNTIME__MAX_RPCS 128
RPT_RUNTIME__LOOKUP_TIMEOUT 1
RPT_RUNTIME__STARTUP_TIMEOUT 10
RPT_RUNTIME__CHECK_INTERVAL 10
RPT_RUNTIME__CHECK_TIMEOUT 1
RPT_RUNTIME__STALE_AFTER 30
RPT_RUNTIME__SHUTDOWN_TIMEOUT 15
RPT_LIMITS__STATE_SIZE 16384
RPT_LIMITS__GLOBAL_RATE 60000
RPT_LIMITS__GLOBAL_BURST 2000
RPT_LIMITS__REGISTRAR_RATE 6000
RPT_LIMITS__REGISTRAR_BURST 120
RPT_LIMITS__FAIL_IP_RATE 30
RPT_LIMITS__FAIL_IP_BURST 30
RPT_LIMITS__HEALTH_RATE 600
RPT_LIMITS__HEALTH_BURST 60
RPT_METRICS__ENABLED false
RPT_METRICS__HOST '127.0.0.1'
RPT_METRICS__PORT 9100
RPT_PROBE__TARGET 'localhost:50051'
RPT_PROBE__CA ''
RPT_PROBE__CERT ''
RPT_PROBE__KEY ''
RPT_PROBE__TOKEN ''
RPT_PROBE__TIMEOUT 1