10

Authenticate Humans and Map Identity Across Three Planes

Authenticate a person once where appropriate, but authorize and revoke that person independently in the provider, hosted-runtime, and generated-application planes.

System map · Day 10

Whole-system design

Five stable layers. Today's work is expanded and linked; the rest stays in context.

Product and authority

People and product entry points

Source-backed today

Begins with a human sign-in but does not treat one identity token as universal authority everywhere.

Identity and policy

Source-backed today

Validates issuer, audience, expiry, subject, and organization before mapping any plane-specific identity.

HelixWorks control plane

Source-backed today

Authorizes provider projects and collaborators independently of runtime or application user permissions.

Generated application plane

Design target · not proved

A separate app-user session and role decision is required even for the same person, but the generated HTML does not implement it yet.

Delivery and desired state

Covered — CI and immutable artifactsAhead — Git desired state · Argo CD reconciliation

Cloud and orchestration

Covered — Terraform and AWS APIs · Accounts, VPC, DNS, and private paths · Kubernetes or EKS control plane

Compute and traffic

Covered — Worker compute · Platform service workloads · Generated app workloadsAhead — Ambient mesh data plane

Storage and evidence

Covered — Product data and artifacts · Evidence and observabilityAhead — Infrastructure state · Cluster desired and live state

The enterprise problem and today’s slice

Enterprise problem: Reusing one role or token across platform administration, runtime operations, and generated-app data turns organization membership into unintended access to deployments and customer records.

Whole-course context: Workload and delegated connector grants are separate design records rather than implemented authorities; today establishes the provider identity baseline before collaboration and publication.

Today’s slice: Design three plane-local principal mappings and inspect the provider-plane JWT identity implemented today; hosted-runtime operator and generated-app user grants are not yet implemented.

End-of-day evidence: A five-minute provider token and tests for signature, issuer, audience, expiry, subject, and organization prove the implemented boundary; plane-local grants and independent revocation remain explicit missing evidence.

Still unsolved: Sharing invitations, publication approval, release promotion, AWS federation, and production incident roles remain later slices.

Customer outcome and implementation focus

The customer outcome is a reviewable authenticate humans and map identity across three planes change, not a collection of requirements. This day starts with the implementation boundary, then uses the command or manifest below to produce positive, denied, and recovery evidence.

Components in focus

Provider identity service, hosted-runtime identity proxy, and generated-app session service; API workloads; provider and app identity databases plus audit object storage; session cache is permitted only as a short-lived derivative and cannot outlive revocation checks.

This map names the implementation boundary for this day. The service or controller changes only the state it owns; runtime and audit evidence let the operator distinguish a declared change from an effective one.

Map a human identity without crossing authorization planes

Prove independent revocation

Inspecting token claims cannot prove every API rejects the wrong audience. The current implementation has one provider audience, forge-control-plane, and derives its value when minting a short-lived local token; it cannot prove independent runtime or generated-app revocation. Read the exact development-token tool in scripts/mint-local-token.py.

claims = encode({"sub": os.getenv("ACTOR", "owner@acme.test"), "org": os.getenv("ORGANIZATION_ID", "acme"), "iss": "helixworks-forge", "aud": "forge-control-plane", "exp": int(time.time()) + 300})
signed = f"{header}.{claims}"
signature = base64.urlsafe_b64encode(hmac.new(secret.encode(), signed.encode(), hashlib.sha256).digest()).decode().rstrip("=")
print(f"{signed}.{signature}")

Decision rules

Share authentication only where it reduces login friction; never share authorization implicitly. Every cross-plane mapping is explicit, least-privilege, audited, and independently revocable, and every API validates issuer, audience, tenant, resource, and current grant state.