sns-network-solutions/products/secure/sns-auth-research.md
Samuel James 238c40d5e0 funding: mark Flagstar BIPOC + USDA Business Builder as closed/terminated
- Flagstar: program completed, all 35 awards already distributed
- USDA Business Builder: TERMINATED July 15, 2025 (RFBC killed by current admin)
- Updated funding-research.html with strikethrough + red badges + updated capital stack
- Updated meeting agenda funding table (closures + added EASSI)
- Added plane-projects/ scaffolds (Compose YAML, used API instead due to CE compat)
- Added supply-checklist.csv, trailer-registry.md, README.html, kiowa-meeting-agenda.html
2026-08-12 07:33:31 -05:00

7.3 KiB

SNS Auth — CLI Identity Gateway (Future Project)

Status: Research / Pre-development Target market: Small to mid-size businesses Concept: A terminal-based authentication tool that issues short-lived credentials after hardware/passkey verification. One login → all internal tools authenticated. The mwinit pattern, productized for SMBs.


Problem Statement

Small companies use: static API keys in .env files, long-lived SSH keys, shared passwords, maybe 2FA on a web UI. There is no turnkey CLI-first auth system aimed at small businesses who want to secure internal tooling (scripts, APIs, CI, servers) without a bloated web portal.


Product Shape

sns-auth                    <- single Go binary, ~15MB
├── login                   <- FIDO2/passkey tap (or TOTP fallback)
├── status                  <- session info, expiry, scopes
├── token [--scope X]       <- mint a scoped short-lived token
├── exec -- <cmd>           <- run command with creds injected (env vars)
├── secret get/set <name>   <- encrypted secret store (age or bw-backed)
├── enroll                  <- first-time device registration
├── revoke [--all]          <- kill sessions
├── audit                   <- recent auth events
└── admin                   <- user/device/scope management (server-side)

sns-auth-server             <- lightweight daemon (systemd socket-activated)
├── /auth/begin, /auth/finish  <- WebAuthn ceremony
├── /token/issue               <- scoped token mint
├── /token/revoke              <- revocation
├── /audit/log                 <- append-only event log
├── /admin/*                   <- user/device CRUD
└── SQLite backend             <- zero external deps

Feature Set

Authentication

  • Passwordless primary auth — FIDO2/WebAuthn hardware key or passkey
  • Short-lived session tokens — 8-24hr expiry, auto-refresh, forced re-auth after expiry
  • Device binding — token locked to machine fingerprint (hostname + MAC + machine-id)
  • TOTP fallback — for environments without hardware keys
  • Offline grace period — cached credential works N minutes without server contact

Authorization

  • Role-based scopes — each token carries explicit scopes (e.g. infra:read, deploy:write)
  • Service-specific sub-tokens — sns-auth token --scope git mints narrow token for one service
  • Deny-by-default — no scope = no access

Credential Management

  • Secrets vault integration — sns-auth secret get <name> fetches from encrypted store
  • Automatic credential injection — sns-auth exec -- docker push ... injects env vars
  • Rotation enforcement — tracks long-lived token expiry, warns/blocks when overdue

Audit & Security

  • Append-only audit log — every auth event logged with timestamp + device + IP
  • Session revocation — sns-auth revoke --all kills all active sessions instantly
  • Tamper detection — CLI binary checks its own integrity on launch
  • Lockout policy — brute-force protection (irrelevant with FIDO2 but defense-in-depth)

Operations

  • Single binary — one Go binary, zero runtime deps
  • Lightweight server — SQLite backend, runs on any Linux box
  • Mesh-aware — works over private networks (NetBird, Tailscale, WireGuard)
  • Graceful degradation — cached sessions survive server downtime until expiry
  • Bootstrap mode — first-run device enrollment with one-time code

Competitive Advantage Over Current SMB Options

What they have now What sns-auth provides
Shared .env files with API keys Zero standing credentials — everything expires
Password manager + hope Hardware key / passkey required for any credential
No audit trail Every token issuance, secret access, session logged
SSH keys that never rotate Short-lived SSH certs (8hr), auto-expire
"Who has access?" = guessing sns-auth admin list shows all active sessions/devices
Each tool has its own login One sns-auth login → all tools authenticated

Open Source Foundations (build from, not fork)

All BSD/Apache/MIT — fully closeable source:

Library Purpose License
github.com/go-webauthn/webauthn WebAuthn/FIDO2 ceremonies BSD-3
github.com/lestrrat-go/jwx JWT/JWE/JWK token handling MIT
github.com/mattn/go-sqlite3 Storage (users, sessions, audit) MIT
github.com/spf13/cobra CLI framework Apache-2.0
golang.org/x/crypto Crypto primitives (age, argon2) BSD-3

Reference implementations (study, don't fork directly)

Project What to steal URL License
Vouch (vouch.sh) UX flow: YubiKey tap → 8hr session → SSH/AWS/Git creds. Scoped token issuance, credential helper pattern. vouch.sh Apache-2.0/MIT (CLI)
Smallstep CLI Command structure, browser-callback OAuth flow, cert renewal logic, shell integration. github.com/smallstep/cli Apache-2.0
Hanko Passkey auth engine, user management, JWT session handling. Go backend with clean API. github.com/teamhanko/hanko AGPL-3.0 (caution — study only)
Passwordless-Auth-Rust WebAuthn + TOTP + magic link flow, JWT revocation, SQLite backend. Architecture reference. github.com/hoangsonww/Passwordless-Auth-Rust Check repo

Pieces to steal from specific projects

Project Steal what
Kefmat/zero-trust-token-authority Merkle tree audit log, DPoP proof-of-possession binding
kontext-security/kontext-cli Credential injection pattern (exec -- command), scoped access model
kanidm/webauthn-rs Battle-tested WebAuthn implementation (Rust reference if ever needed)

Tech Decisions

  • Language: Go (single static binary, cross-compile, same ecosystem as Smallstep/Hanko)
  • Storage: SQLite (zero-dependency, embedded, good enough for 10k+ users)
  • Crypto: Ed25519 for signing, AES-256-GCM for secrets at rest, Argon2id for any key derivation
  • Transport: HTTPS (TLS 1.3) between CLI and server; mTLS optional for high-security deployments
  • Distribution: Single binary download, Docker image for server, systemd unit file

Development Phases

Phase What Estimated effort
1 - MVP Passkey auth + JWT minting, CLI client (login/status/token/exec), SQLite audit 4-5 weekends
2 - Polish Device enrollment, TOTP fallback, secret command (age-backed), branding, docs 3-4 weekends
3 - Productize Install script, Docker compose for server, admin TUI, pricing page, landing site 3-4 weekends
4 - Harden Security audit, pen-test, binary tamper detection, key ceremony documentation Ongoing

Business Model Options

  • Open-core: CLI + single-user server free; multi-user, team management, SSO bridge = paid
  • Per-seat: Free for 1-3 users, paid per seat after (standard SMB model)
  • Appliance: Ship a pre-configured LXC/VM image customers drop into their infra

Notes

  • Research date: 2026-08-04
  • This tool does NOT compete with Okta/Auth0 (those are web-app identity providers). This is CLI-first infra auth — closer to HashiCorp Vault's auth methods but simpler and standalone.
  • Potential name candidates: sns-auth, gate, sentinel, keypost (TBD)