Run the local flow
The fastest way to understand TrustPlane Auth is to watch it deny the right things. This page runs the full proof-bound request flow on your own machine — passport issuance, transcript-v1 request binding, adapter verification, replay denial, and route policy — with nothing but a verified CLI.
New here? Read What is TrustPlane Auth? first for the short product story, then come back to run the local flow.
Prerequisites
Section titled “Prerequisites”Using a verified CLI archive (the common path):
- A POSIX shell (macOS/Linux). The demos use Unix domain sockets.
- A verified
trustplaneCLI archive — start with Install and verify if you have not downloaded and verified it yet. - No Go toolchain is required for the archive path.
Building from a source checkout instead:
- Go 1.22+ (the runtime is written in Go).
- A local TrustPlane Auth source checkout (
make buildproduces the binaries).
Prepare the CLI and binaries
Section titled “Prepare the CLI and binaries”Use a verified CLI archive from Install and verify, or build from a TrustPlane Auth source checkout:
make buildThis produces three binaries in bin/:
| Binary | What it is |
|---|---|
bin/trustplane |
The CLI (issue, verify, bundle, broker, up, demo) |
bin/trustplane-adapter |
The brownfield reverse-proxy verifier |
bin/trustplane-broker |
The local broker (issues request-bound passports) |
If you installed from an archive, the first check is:
trustplane --helpRun the demos (fastest way to see it work)
Section titled “Run the demos (fastest way to see it work)”Each make target is a self-contained, local demonstration:
make demo # issue + verify a passport, run the protected-service examplemake demo-bundle # resolve issuer keys from a local TrustPlane bundlemake demo-adapter # brownfield adapter: valid allows, missing=401, wrong-aud=403make demo-provider-gateway # the full story: broker + transcript-v1 + replay + deny reasonsThe demo-provider-gateway target is the one to watch — it starts a local software-signer
broker, writes a local trust bundle and a trustplane-bundle-v1 policy bundle, starts the
transcript-v1 adapter, and then proves: a valid call allows, a duplicate is denied
(jti_replay), a wrong path/nonce/route is denied (request_binding_mismatch), a missing
route policy is denied, and a stale bundle fails closed.
Issue and verify a passport by hand
Section titled “Issue and verify a passport by hand”Issue a short-lived passport (this also writes a trust bundle with the public key):
./bin/trustplane issue \ --subject spiffe://example.local/ns/default/sa/demo \ --audience example-api \ --trust-domain example.local \ --bundle-out trustplane-bundle.jsonVerify it using the bundle (no online lookup needed):
./bin/trustplane verify \ --token "$TOKEN" \ --bundle trustplane-bundle.json \ --kid "$KEY_ID" \ --issuer "$ISSUER" \ --audience example-api \ --trust-domain example.localYou just did secretless verification: the verifier only used a public bundle, never a shared secret.
Run the local broker and adapter together (trustplane up)
Section titled “Run the local broker and adapter together (trustplane up)”trustplane up is the one-command local orchestrator. It starts a software-signer broker over a
Unix socket, writes local bundle files, and starts a transcript-v1 adapter with in-memory replay
and bundle-policy enforcement. It is the easiest way to experiment with the full pipeline.
./bin/trustplane upRun the v0.1 acceptance gate
Section titled “Run the v0.1 acceptance gate”This is the canonical “is the local TrustPlane Auth runtime behaving correctly?” check. It is deterministic and local-only:
make v01-acceptanceIt exercises broker-issued headers through the adapter, no-broker trustplane sign headers,
wrong-route denial, duplicate-replay denial, stale-bundle fail-closed, insufficient-key-binding
denial, request-binding tamper denial, and transcript conformance. See the
acceptance gate guide for a walkthrough.
Next steps
Section titled “Next steps”- Understand the pieces → Architecture
- See one API accept many trusted callers → Use cases overview
- See each capability with an example → Capabilities
- Protect a real existing API → Protect your first API
- Add a new client without redeploying → Brownfield APIs
- Deploy the adapter in front of a live API → Deployment overview