Tenant isolation
Project and environment are resolved before any customer-controlled scope identifier.
Security model
Authentication proves who the client is. Authorization decides exactly which scopes it may use. Project and environment isolation surround both before realtime traffic begins.
The access path
Your backend remains the identity authority. Orastack enforces the realtime grant on every subscription.
Core controls
Project and environment are resolved before any customer-controlled scope identifier.
A client can access only the scopes and permissions present in its signed grant.
Client credentials are identity-bound, environment-bound, renewable, and intentionally narrow.
Server API keys never belong in a browser and can be named, rotated, and revoked.
Payloads, subscriptions, fanout, rates, and connection queues have explicit limits.
Payloads, state, presence metadata, user IDs, and scope IDs are treated as sensitive.
Credential separation
ora_sk_••••••••••Publishes events, writes state, and issues client tokens. Environment-specific and never exposed to end users.
15 minute grantConnects one application identity with only the scopes and permissions supplied by the backend.
Data handling
Recovery data, operational traces, and ephemeral connection state have different jobs and different lifetimes.
| Data | Lifetime | Purpose | Boundary |
|---|---|---|---|
| Reliable replay | Configured retention | Ordered reconnect recovery | Expired cursors return resync_required |
| State | Until replaced or deleted | Current synchronized value | Atomic replacement; versioned writes |
| Presence | Ephemeral + TTL | Collaborative awareness | Never authoritative for access or billing |
| Operational traces | Bounded | Debugging and observability | Sampled unless deep tracing is enabled |
Operational safeguards
Organization, project, environment, key, IP, user, scope, and connection limits reduce amplification and abuse.
Signals coalesce, state converges, and reliable clients disconnect and recover before memory can grow without bound.
Authorization failures, rate limits, forced disconnects, and resync conditions expose stable codes and metrics.
Development, preview, staging, and production do not share credentials, traffic, cursors, state, or usage.
Responsible disclosure
Do not disclose it publicly. Send the smallest reproducible report you can to security@orastack.dev.