Security overview

Security posture of the platform

This page describes how Osinet Command is built and operated from a security perspective. It is a product security overview — not a legal compliance certification or third-party audit report.

Role-based access control

Four roles: Owner, Admin, Technician, Customer Viewer
Capabilities derived at session-verify time, not stored in token
Every API route and page enforces capability checks

Customer visibility scoping

customer_viewer role restricts to assigned customers only
Enforced at page layer, API layer, and database layer
Assignments stored in Supabase, survive cold restarts

Hardened sessions

HMAC-signed session tokens, short expiry
HttpOnly, Secure, SameSite cookie flags
Deep server-side verification on every protected request

Two-factor authentication

TOTP (authenticator app) support for all accounts
Enrollment and verification fully implemented
Enforcement gate available; currently phased off during early access

Redis rate limiting

Sliding window rate limiting on sensitive routes
Redis-backed; async — does not block on Redis unavailability
Covers auth, connector sync, and snapshot endpoints

Audit trail

All user and system actions logged to Supabase
Connector syncs, user invites, and configuration changes recorded
No secrets or credentials logged — log safety enforced in sync routes

Data isolation

All data org-scoped at the query level
Connector snapshots, customers, and audit events never cross org boundaries
Supabase RLS applied where applicable

Microsoft SSO

Microsoft Entra ID (Azure AD) SSO for user authentication
Break-glass local credential path preserved for recovery
SSO registration carries customer assignments and roles

Role-based access control

Every API route and page enforces capability-based access. Capabilities are derived from roles at session verification time — not stored in the session token itself.

Owner

Full platform access including billing, user management, and all connector configuration.

Admin

All connector and customer operations; cannot manage billing or other admins.

Technician

Read access to all customers and connectors; cannot change configuration.

Customer Viewer

Read-only access scoped to explicitly assigned customers only.

Customer visibility scoping

Customer viewers are restricted to a specific set of assigned customers. Enforcement is layered — a bypass at one layer is caught by the next.

Page layer

canSeeCustomer() filters the customer list before any connector data is fetched or rendered.

API layer

Snapshot GET routes verify customer assignment before returning connector data.

Database layer

member_customer_access table persists customer assignments in Supabase. Survives cold restarts and session changes.

Sessions and authentication

Sessions are HMAC-signed, short-lived, and stored in hardened HttpOnly cookies. Deep session verification happens server-side on every protected request — the edge middleware performs a presence check only and is not the authoritative guard.

HMAC-signed tokens

Session payload is signed server-side. Tampered tokens are rejected at deep-verify.

Short expiry

Sessions expire quickly. Stale sessions are rejected on re-verification.

Cookie hardening

HttpOnly, Secure, and SameSite flags set on the session cookie.

Server-side verify

Signature, expiry, and org allowlist are re-checked on every protected server request.

Two-factor authentication

TOTP-based 2FA (authenticator app) is supported for all user accounts. Enrollment and verification infrastructure is fully implemented.

2FA enforcement (requiring all users in an org to enroll) is not currently enforced — the enforcement gate is disabled by design during early access. Individual users can opt-in.

Microsoft SSO provides a separate authentication path. Break-glass access via local credentials is preserved for recovery scenarios.

Rate limiting

Sensitive API routes are rate-limited using Redis-backed sliding window counters. Rate limiting is applied asynchronously and does not block the request path on Redis unavailability.

/api/auth/login
/api/auth/register
/api/auth/2fa/verify
/api/connectors/*/sync
/api/snapshots/*

Audit logs and data handling

Action log

User logins, invites, role changes, and connector configuration events are written to Supabase.

Connector sync log

Each connector sync records result status, org, and timestamp without storing raw API credentials.

No secrets in logs

Connector API keys and credentials are never written to log output. Log safety is enforced in sync routes.

Supabase RLS

Row-level security policies applied to sensitive tables where applicable, restricting direct data access.

Snapshot persistence

Connector state is stored as org-scoped snapshots. Cold restarts do not clear data or expose stale cross-org state.

Org isolation

All Supabase queries are scoped by org ID. Cross-org data access is not possible through normal query paths.

Scope of this page

This is a description of security controls built into the product. It is not a SOC 2 report, ISO 27001 certification, GDPR compliance statement, or legal attestation of any kind. For specific compliance or contractual security requirements, contact us directly.

Questions about security?

Already have access? Sign in. New to the platform? Request pilot access.