Skip to content

Identity on Axum through T21's shared app #1574

Description

@aram356

Summary

Identity on Axum through T21's shared app: a new PR that takes #1536's and #1537's tests but not their Axum-only stores, store selection or wiring, and switches the production image's store features (aws-dynamodb-ec, celld-ec in #1539) to EZI-2b's providers; partner APIs included; passes T5's suite.

Part of #1558, server-side identity on every adapter. Plan ID A2, planned in wave 7 (MVP: Fastly and Axum); priority P1, size M. Design: spec; order and dependencies: plan.

Requirements

ID-1 One EC lifecycle

On every supported adapter a consented document navigation or EC route call (ID-9) mints the EC, creates the record and sets ts-ec together. A cookie is never issued without a record. An existing EC is kept when geo is unknown.

ID-2 One shared record store

The identity logic stays in core and becomes awaitable (#1526). It runs on one EcKvStore over EdgeZero's KvStore (DEC-3). A store that cannot meet the contract makes startup reject identity configuration with a clear error.

ID-3 Partner APIs answered locally

Identify, batch sync, pull sync and admin lookup run on every adapter with a record store. Without one, identify and batch sync return a local error and never reach the publisher origin. Admin lookup already answers 501 locally; pull sync is outbound only.

ID-8 Body EIDs keep being saved

EIDs sent in the /auction body are saved to the record.

WB-1 Document and EC route responses only

Identity cookies are set on top-level HTML document responses and on EC route responses (ID-9), on every supported adapter.

SH-5 One app for every adapter

The identity routes (identify, batch sync, admin lookup and the EC route), pull sync, the EC lifecycle, provider lookups and cookie write-back run from one app built in core, which every adapter mounts and which builds its state once (SH-1). An adapter crate supplies only platform services: through EdgeZero where it offers them, and otherwise through the adapter's existing platform bridge until the EdgeZero ask lands (today Fastly's limiter, ID-6, and Fastly's geo, EZI-4). A capability an adapter lacks is an EdgeZero ask, never new code in that adapter (DEC-16).

Current state

What the code does today, from the design's survey at the revisions it names:

  • ID-8: main saves them on Fastly; the provider stack and the RC's Axum lifecycle do not.
  • WB-1: main mints ts-ec on Fastly navigations, and the RC adds Axum.
  • SH-5: at Cut Trusted Server over to EdgeZero PR 275 #1506's head only the Fastly adapter wires identity (EC generation and finalization are called from its app.rs and main.rs); Axum, Cloudflare and Spin each build their own router without it.

Acceptance criteria

  • ID-1: The conformance suite (T5) asserts on each supported adapter that a consented navigation creates the record and sets ts-ec in the same response, that a store failure sets no ts-ec, and that an existing EC survives unknown geo
  • ID-1: On an unsupported adapter, startup with identity configuration fails
  • ID-2: No adapter crate's non-test code implements EcKvStore, and a store reporting KvError::Unsupported for the contract fails startup with identity enabled
  • ID-3: In each adapter's tests a capturing origin receives no identify or batch-sync request
  • ID-3: With a store they run, without one they return 501
  • ID-8: On each supported adapter a body EID is in the record after the request
  • WB-1: Identity Set-Cookie headers appear on navigation and EC route responses and never on asset or other API responses
  • SH-5: No adapter crate's non-test code calls EC generation, finalization or an identity handler directly, and the same conformance suite (T5) runs on each supported adapter

Dependencies

Blocked by:

Blocks:

Related pull requests

Notes from the plan

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions