-
Notifications
You must be signed in to change notification settings - Fork 1
Security API Auth
Version: 1.5.0
Status: Production Ready
Last Updated: April 2026
ThemisDB implements comprehensive authentication and authorization across all API endpoints using a fail-closed security model. This document describes the enforced RBAC (Role-Based Access Control) system and scope-based authorization for all API layers.
Critical: All production endpoints implement fail-closed security:
- Missing authentication tokens are denied
- Invalid authentication tokens are denied
- Insufficient scopes/permissions are denied
- Only explicitly authorized requests are allowed
When AuthMiddleware is not configured or explicitly disabled:
- Requests are allowed with a warning logged
- This is for development/testing environments only
- Production deployments must always enable authentication
- All Policy API handlers, RPC service, and Changefeed endpoints support this backward-compatible fail-open mode
- Warnings are logged to alert operators when unauthenticated access is granted
ThemisDB provides four built-in roles via RBAC::getBuiltinRoles():
| Role | Permissions | Inherits | Use Case |
|---|---|---|---|
| admin |
*:* (all resources, all actions) |
None | System administrators, full access |
| operator |
data:*, keys:read, keys:rotate, audit:read
|
analyst | Operations team, data management |
| analyst |
data:read, audit:read, metrics:read
|
readonly | Business analysts, read-only data access |
| readonly |
metrics:read, health:read
|
None | Monitoring systems, health checks |
Permissions follow the format: resource:action
Resources: data, keys, config, audit, metrics, health, policy, cdc (changefeed), rpc
Actions: read, write, delete, rotate, admin
Wildcards: *:* grants all permissions, data:* grants all actions on data resource
All policy-related endpoints enforce scope-based authorization:
| Endpoint | Required Scope | Description |
|---|---|---|
GET /policies/rules |
policy:read |
List all policy rules |
GET /policies/rules/:id |
policy:read |
Get specific policy rule |
POST /policies/rules |
policy:write |
Create new policy rule |
PUT /policies/rules/:id |
policy:write |
Update policy rule |
DELETE /policies/rules/:id |
policy:write |
Delete policy rule |
POST /policies/evaluate |
policy:read |
Evaluate policy |
GET /policies/stats |
policy:read |
Get policy statistics |
POST /policies/validate |
policy:read |
Validate policy ruleset |
POST /policies/validate/rule |
policy:read |
Validate single rule |
GET /policies/validation/report |
policy:read |
Get validation report |
GET /policies/metrics |
policy:read |
Get policy metrics |
GET /policies/rules/:id/versions |
policy:read |
List rule versions |
GET /policies/rules/:id/versions/:v |
policy:read |
Get specific version |
POST /policies/rules/:id/rollback/:v |
policy:write |
Rollback to version |
GET /policies/rules/:id/diff/:v1/:v2 |
policy:read |
Compare versions |
GET /policies/audit |
policy:read |
Query audit trail |
GET /policies/templates |
policy:read |
List policy templates |
POST /policies/templates |
policy:write |
Create policy template |
GET /policies/reviews/pending |
policy:read |
List pending reviews |
POST /policies/reviews/:id/schedule |
policy:write |
Schedule review |
RPC methods enforce operation-specific scopes:
| Scope | Operations | Description |
|---|---|---|
rpc:read |
GET, BatchGet, Search, Query, PaginatedQuery, VectorSearch, GraphTraverse, GeoQuery, TimeSeriesQuery, GetIndexOperations, ListCollections, GetCollectionMetadata, AggregationPipeline | Read-only data operations |
rpc:write |
PUT, BatchPut, Delete, UpdateEntity, BatchUpdate | Write and modify data |
rpc:admin |
CreateIndex, DropIndex, Stats | Administrative database operations |
transaction:write |
TransactionBegin, TransactionCommit, TransactionAbort | Transaction management |
Exceptions:
-
health_check- No authentication required (for monitoring) -
authenticate- No prior authentication required
Changefeed endpoints enforce CDC (Change Data Capture) scopes:
| Endpoint | Required Scope | Description |
|---|---|---|
GET /changefeed |
cdc:read |
Poll for events (with long-poll support) |
GET /changefeed/stream |
cdc:read |
Stream events via Server-Sent Events (SSE) |
GET /changefeed/stats |
cdc:admin |
Get changefeed statistics |
POST /changefeed/retention |
cdc:admin |
Configure retention policy |
Long-lived Connections: SSE streaming connections maintain the authenticated session for the duration of the stream. Clients should implement reconnection logic with fresh token validation on reconnect.
Compliance reporting endpoints enforce audit scopes:
| Endpoint | Required Scope | Description |
|---|---|---|
POST /compliance/coverage |
audit:read |
Analyze compliance coverage |
POST /compliance/report |
audit:read |
Generate compliance report |
GET /compliance/frameworks |
audit:read |
List supported frameworks |
All requests must include a Bearer token in the Authorization header:
Authorization: Bearer <token>For each request:
- Extract Bearer token from Authorization header
- Validate token using AuthMiddleware
- Check required scope for the endpoint
- Deny if token is invalid or lacks required scope
- Log authentication result for audit
// Example: Policy API endpoint
auto token = AuthMiddleware::extractBearerToken(auth_header);
auto auth_result = auth_->authorize(*token, "policy:write");
if (!auth_result.authorized) {
// Log failure with user_id and reason
return 403 Forbidden;
}// Server initialization
auto auth = std::make_shared<AuthMiddleware>();
// Option 1: JWT with Keycloak/OIDC
AuthMiddleware::JWTConfig jwt_config{
.jwks_url = "https://keycloak.example.com/realms/themis/protocol/openid-connect/certs",
.expected_issuer = "https://keycloak.example.com/realms/themis",
.expected_audience = "themis-app",
.scope_claim = "roles"
};
auth->enableJWT(jwt_config);
// Option 2: Static API Tokens
AuthMiddleware::TokenConfig token_config{
.token = "themis_api_key_...",
.user_id = "api-service",
.scopes = {"rpc:read", "rpc:write", "policy:read"}
};
auth->addToken(token_config);# rbac_config.yaml
roles:
- name: admin
description: System administrator
permissions:
- resource: "*"
action: "*"
- name: operator
description: Operations team
inherits: [analyst]
permissions:
- resource: data
action: "*"
- resource: keys
action: read
- resource: keys
action: rotate
- resource: audit
action: read
- name: analyst
description: Data analyst
inherits: [readonly]
permissions:
- resource: data
action: read
- resource: audit
action: read
- resource: metrics
action: readimport grpc
# Create channel with credentials
credentials = grpc.ssl_channel_credentials()
channel = grpc.secure_channel('themis.example.com:50051', credentials)
# Add authorization metadata
token = "your_jwt_token"
metadata = [('authorization', f'Bearer {token}')]
# Make authenticated request
stub = ThemisRPCStub(channel)
response = stub.Get(request, metadata=metadata)# Policy API - List rules
curl -X GET https://themis.example.com/policies/rules \
-H "Authorization: Bearer $JWT_TOKEN"
# Changefeed - Stream events
curl -X GET https://themis.example.com/changefeed/stream \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Accept: text/event-stream"AuthMiddleware provides metrics for Prometheus:
const auto& metrics = auth->getMetrics();
// authz_success_total
// authz_denied_total
// authz_invalid_token_total
// jwt_validation_success_total
// jwt_validation_failed_totalAll authentication failures are logged with:
- Timestamp
- Endpoint/operation attempted
- User ID (if token was valid but lacked scope)
- Required scope
- Failure reason
- Source IP (when available)
Example log:
[WARN] Authorization failed for policy endpoint - user: alice@example.com, required scope: policy:write, reason: insufficient_scope
Step 1: Enable authentication on server
auto auth = std::make_shared<AuthMiddleware>();
auth->enableJWT(jwt_config);
// Pass auth to all API handlersStep 2: Update clients to include tokens
# Before
response = stub.Get(request)
# After
metadata = [('authorization', f'Bearer {token}')]
response = stub.Get(request, metadata=metadata)Step 3: Configure user roles
# Assign roles to users
curl -X POST https://themis.example.com/admin/users/alice/roles \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-d '{"role": "operator"}'Cause: Client not sending Authorization header
Solution: Include Authorization: Bearer <token> in all requests
Cause: Malformed header (not "Bearer " format)
Solution: Ensure header follows Bearer token format
Cause: Token is valid but lacks required scope
Solution: Ensure user has appropriate role/scope assigned
Cause: Server not configured with authentication
Solution: Enable AuthMiddleware with JWT or static tokens
-
Always enable authentication in production
- Configure AuthMiddleware before starting server
- Use JWT with trusted identity provider
- Never deploy with auth disabled
-
Use HTTPS/TLS
- Encrypt all traffic (HTTP REST and gRPC)
- Enable mutual TLS for enhanced security
- Protect tokens in transit
-
Principle of Least Privilege
- Assign minimum required roles
- Use readonly role for monitoring
- Limit admin access
-
Token Management
- Use short-lived JWT tokens (15-60 minutes)
- Implement token refresh mechanism
- Rotate static API keys regularly
-
Monitoring
- Track authentication failures
- Alert on anomalous patterns
- Review audit logs regularly
-
Scope Mapping
- Understand scope requirements for each operation
- Map business roles to RBAC roles
- Document custom scope assignments
- RPC Authentication Guide
- Access Control Framework
- Production Hardening Checklist
- RBAC Implementation
- AuthMiddleware Implementation
Implementation Notes:
- All policy API handlers: Implemented v1.5.0
- RPC service: Scope-based enforcement v1.5.0
- Changefeed: Auth enforcement v1.4.0+
- Built-in RBAC roles: Available in all versions
Security Audits:
- CODE_QUALITY_AUDIT.md: FIND-001 RESOLVED
- ACL enforcement hardened: February 2026
ThemisDB 1.9.0-beta Β· Home Β· Module-Index Β· GitHub Β· Issues
ThemisDB 1.9.0-beta Β· Home Β· Wiki-Index Β· Module-Index Β· FAQ Β· Quick-Reference Β· GitHub Β· Issues Β· Discussions Β· License
- Batch Operations
- Best Practices
- CRUD Tutorial
- Custom Document Ingestion
- Getting Started Tutorial
- Interactive Examples
- Schema Design
- Video Tutorials
- AQL Reference
- AQL Examples
- AQL Overview
- AQL Feature Roadmap
- AQL Geospatial Guide
- AQL LLM Migration Guide
- AQL API
- AQL Grammar (EBNF)
- AQL Root Overview
- AQL Examples (root)
- API Reference
- API Module README
- OpenAPI Overview
- Client SDK Overview
- SDK Overview
- Operations
- Operations Overview
- Operations Runbook
- Operations Handbook
- ThemisCtl Admin Guide
- Pipeline E2E SOPs
- Deploy Overview
- Docker Overview
- Docker Hub README
- Helm Overview
- Packaging Overview
- Operator Overview
- Security Policy
- Production Hardening Checklist
- Security Hardening Guide
- Encryption Key Management
- Access Control Framework
- Zero Trust Policy
- API Authentication & Authorization
- HSM Production Setup
- PKCS11 Integration
- DSGVO / SOC2 Checklist
- Access Model Runbooks
- Access Model Dashboard
- Maturity Automation Runbook
- Access Review Automation
- Access Model Dashboard
- Access Model Runbooks
- Rights Revocation
- Dr Checklists
- Dr Testing
- Incident Response Playbook
- Incident Response Testing
- GPU Oom Recovery
- Grammar Debugging
- Metrics Scrape Troubleshooting
- Model Swap Procedure
- Quota Tuning
- Subagent Deployment
- Logging Configuration
- Content Model
- Crypto & Keys
- Feature Flags Reference
- Modular Architecture Roadmap
- Modularization Guide
- Module Architecture Index
- PostgreSQL Wire Protocol
- Query Scheduling
- Raft Consensus Design
- Resource Pooling
- Source Directory Guide
- Unified Access Model
- E1 001 Layered Retrieval Design
- E1 002 Ann Abstraction Strategy
- E1 003 Tensor Summary Types
- E1 004 Lora Package Distinction
- E1 005 Model Switch Compatibility
- E1 006 Federated Tensor Summaries
- E2 001 Evaluation Framework Design
- E2 002 Hardware Profile Strategy
- E2 003 Query Planner Routing Model
- E2 004 Approximation Governance Rules
- E2 005 Cross Layer Fallback Confidence Policy
- E3 001 Distributed Tensor Design
- E3 002 Manifest Coordination Strategy
- E3 003 Recovery And Erasure Choice
- E3 004 Tensor Fabric Infrastructure
- Contributing
- Contributing (root)
- Code of Conduct
- Support
- Maintainers
- CTest Guide
- Build Quick Reference
- Developer Wiki Index
- Build / Test / CI
- Module Index
- Branching Strategy
- Disabled Stub Policy
- Docs PR Policy
- GA Promotion Sign Off
- Github Milestones Setup
- Maturity Claim Verification Checklist
- Maturity Evidence Registry
- Merge Gate Bot Config
- Merge Gate Status Live
- Phase 1 Closure Report
- Phase Closure Policy
- Phase Dependency Graph
- Phase3 Enforcement Runbook
- Plugin Submodule Rollback
- PR Version Targeting
- PR Version Targeting Backfill
- Production Ready 2026 Delivery Plan
- Query Module Status
- Readme
- Release Promotion Gate Policy
- Release Validation Checklist
- Security Module 5671 Evidence Summary
- Sharding P6 Residual Risk Acceptance
- Sourcecode Compliance Governance
- Updates Development Status Sign Off
- Wave C Implementation Complete
- Blob Storage
- Cuda
- Ethics Ai
- Exporters
- Huggingface
- Image Analysis
- Importers
- RPC
- Scraper
- Themisdb Ai Watermark Detector
- User Storage Encrypted
- Chimera Architecture
- Chimera Future
- Chimera Readme
- Chimera Roadmap
- Covina Fastapi Ingestion Architecture
- Covina Fastapi Ingestion Future
- Covina Fastapi Ingestion Roadmap
- Vcc Base Architecture
- Vcc Base Future
- Vcc Base Roadmap
- Vcc Clara Ingestion Architecture
- Vcc Clara Ingestion Future
- Vcc Clara Ingestion Roadmap
- Vcc Veritas Architecture
- Vcc Veritas Future
- Vcc Veritas Roadmap
- 01 Hello World
- 02 Todo App
- 03 Contact Manager
- 04 Inventory System
- 05 Time Series Monitor
- 06 Graph Social Network
- 07 Vector Search Documents
- 08 Dms Erp System
- 09 Iot Sensor Network
- 10 Drone Image Analysis
- 11 Blog Wiki
- 12 Expense Tracker
- 13 Recipe Manager
- 14 Ecommerce Catalog
- 15 Event Management
- 16 Kanban Board
- 17 Crm
- 18 Realtime Chat
- 19 Recommendation Engine
- 20 Smart Home
- 21 Coding Platform
- 22 AQL Diagram Tool
- 23 Traveling Salesman
- 24 Moral Philosophy Debates
- API Versioning
- Distributed Sharding
- Feedback Plugins
- Geo
- Gnn
- Image Analysis
- Legal Lora Training
- LLM
- Lora Sync
- Migration
- Nlp
- Performance
- Railway
- Replication
- Rope Visualization
- Sample Product Config
- Security
- Client SDK Overview
- Quickstart
- Sdk Enhancements
- Sdk Implementation Summary
- Test Suite Readme
- Go
- Java
- Javascript
- Php
- Python
- Ruby
- Rust
- Typescript
- 01 Grundlegende Operationen
- 02 AQL Queries
- 03 Graph Daten
- 04 Multimodell Anwendung
- 01 Quickstart Guide
- 02 AQL Referenz Kurzuebersicht
- 03 Datenmodellierung Guide
- 04 Uebungsaufgaben
- 05 Best Practices Guide
- Training Documents
- Training Overview
- 01 Einfuehrung Und Uebersicht
- 02 Datenmodelle Und Architektur
- 03 AQL Abfragesprache
- 04 Installation Und Setup
- 05 Anwendungsbeispiele
- Training Presentations
- Dependencies Readme
- Processmonitor Readme
- Themis.admintools.shared Readme
- Themis.aqlquerybuilder Readme
- Themis.aqlquerybuilder Roadmap
- Themis.auditlogviewer Readme
- Themis.auditlogviewer Roadmap
- Themis.classificationdashboard Readme
- Themis.classificationdashboard Roadmap
- Themis.compliancereports Readme
- Themis.compliancereports Roadmap
- Themis.gisviewer.controlpanel Readme
- Themis.gisviewer.controlpanel Roadmap
- Themis.impactanalysisviewer Readme
- Themis.impactanalysisviewer Roadmap
- Themis.ingestiontool Readme
- Themis.ingestiontool Roadmap
- Themis.keyrotationdashboard Readme
- Themis.keyrotationdashboard Roadmap
- Themis.piimanager Readme
- Themis.piimanager Roadmap
- Themis.retentionmanager Readme
- Themis.retentionmanager Roadmap
- Themis.sagaverifier Readme
- Themis.sagaverifier Roadmap
- Themis.usbadmintool Readme
- Themis.usbadmintool Roadmap
- CI Readme
- CI Roadmap
- Compiler Diagnostics Readme
- Compiler Diagnostics Roadmap
- Completion Readme
- Copilot Ollama Router Readme
- Copilot Ollama Router Roadmap
- Gnn Readme
- Gnn Roadmap
- Rope Visualizer Readme
- Rope Visualizer Roadmap
- Tco Calculator Readme
- Tco Calculator Roadmap
- Tests Readme
- Tests Roadmap
- Themis Config Wx Readme
- Themis Docs Builder Readme
- Wikipedia Ingestion Readme