Authentication
Log10x uses a pluggable authentication architecture supporting both SaaS and enterprise on-premise deployments.
Deployment Modes
The default SaaS deployment uses Auth0 for all components - no additional database required.
| Component | Backend | Notes |
|---|---|---|
| Identity | Auth0 | Managed authentication |
| Key Store | Auth0 app_metadata | Zero additional infra |
| Env Store | Auth0 app_metadata | Multi-tenant ready |
Enterprise deployments bring their own identity provider and storage backends.
| Component | Options | Notes |
|---|---|---|
| Identity | Okta, Azure AD, Keycloak, any OIDC | Integrate with existing SSO |
| Key Store | DynamoDB, PostgreSQL, K8s Secrets | Choose based on infrastructure |
| Env Store | DynamoDB, PostgreSQL, K8s ConfigMaps | Match key store or separate |
Supported Backends
-
Auth0
Default SaaS backend. Identity + key storage in one.
- OAuth 2.0 / OIDC compliant
- Social login support
- app_metadata for keys/envs
-
Okta
Enterprise SSO integration via OIDC.
- SAML & OIDC support
- MFA built-in
- Requires separate key store
-
Azure AD
Microsoft enterprise identity.
- Azure integration
- Entra ID support
- Requires separate key store
-
DynamoDB
Serverless key/environment storage.
- Zero maintenance
- Auto-scaling
- AWS native
-
PostgreSQL
Relational storage for keys/environments.
- Full SQL support
- Transactions
- Self-hosted or RDS
-
Kubernetes
Cloud-native secret management.
- K8s Secrets for API keys
- ConfigMaps for environments
- No external database
Enterprise Configuration
Configure enterprise deployments with your preferred identity provider, key storage backend, and environment management. Select a tab below to see setup instructions for each component.
Configure any OIDC-compliant identity provider:
# config.yaml for Enterprise deployment
provider: oidc
key_store: dynamodb
oidc:
issuer: https://your-company.okta.com
client_id: your-client-id
client_secret: your-client-secret # Store in secrets manager
scopes:
- openid
- profile
- email
user_id_claim: sub # JWT claim for user ID
email_claim: email # JWT claim for email
dynamodb:
keys_table: log10x-api-keys
environments_table: log10x-environments
region: us-east-1
Create tables for API key and environment storage:
# API Keys Table
aws dynamodb create-table \
--table-name log10x-api-keys \
--attribute-definitions \
AttributeName=key,AttributeType=S \
AttributeName=user_id,AttributeType=S \
--key-schema AttributeName=key,KeyType=HASH \
--global-secondary-indexes \
'IndexName=user-keys-index,KeySchema=[{AttributeName=user_id,KeyType=HASH}],Projection={ProjectionType=ALL}' \
--billing-mode PAY_PER_REQUEST
# Environments Table
aws dynamodb create-table \
--table-name log10x-environments \
--attribute-definitions \
AttributeName=env_id,AttributeType=S \
AttributeName=owner_id,AttributeType=S \
--key-schema AttributeName=env_id,KeyType=HASH \
--global-secondary-indexes \
'IndexName=owner-envs-index,KeySchema=[{AttributeName=owner_id,KeyType=HASH}],Projection={ProjectionType=ALL}' \
--billing-mode PAY_PER_REQUEST
For PostgreSQL deployments:
-- API Keys table
CREATE TABLE api_keys (
key VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(255) NOT NULL,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP,
last_used_at TIMESTAMP
);
CREATE INDEX idx_api_keys_user_id ON api_keys(user_id);
-- Environments table
CREATE TABLE environments (
env_id VARCHAR(36) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
owner_id VARCHAR(255) NOT NULL,
owner_email VARCHAR(255),
is_default BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_environments_owner ON environments(owner_id);
-- Environment access for sharing
CREATE TABLE environment_access (
env_id VARCHAR(36) REFERENCES environments(env_id),
user_id VARCHAR(255) NOT NULL,
permissions VARCHAR(20) NOT NULL, -- OWNER, WRITE, READ
PRIMARY KEY (env_id, user_id)
);
For air-gapped or K8s-native environments:
# API Key stored as K8s Secret
apiVersion: v1
kind: Secret
metadata:
name: log10x-key-abc123
namespace: log10x
labels:
log10x/user-id: "user-123"
type: Opaque
stringData:
key: "your-api-key-uuid"
user_id: "user-123"
name: "production-key"
---
# Environments stored in ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: log10x-environments
namespace: log10x
data:
environments.json: |
{
"env-abc123": {
"name": "Production",
"owner_id": "user-123",
"owner_email": "admin@company.com",
"is_default": true
}
}
Backend implementation: user-service-go/internal/auth