Skip to content

fix(aauth): accept the Person Server's own auth token as the presented token; release 0.1.0 - #197

Merged
brightsparc merged 5 commits into
mainfrom
fix/aauth-present-own-auth-token
Oct 22, 2026
Merged

brightsparc merged 5 commits into
mainfrom
fix/aauth-present-own-auth-token

Conversation

@brightsparc

@brightsparc brightsparc commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

An agent keeps presenting the auth token it holds for a resource until the resource asks for another. The resource then names that auth token's jti as presented_jti in its resource token, and the agent sends the auth token to its Person Server as presented_token. The Person Server accepted only a person token there (aa-person+jwt), so every call after the first to one resource was refused with 400 invalid_presented_token, "not an aa-person+jwt". The platform's egress works this way, so a trip's second and third bookings failed on staging.

The change

  • PersonServer accepts as the presented token either a person token or an auth token it issued itself: its own issuer, and dwk aauth-person.json, so not an Access Server's.
  • Either is checked against the same PresentedExpectation: issuer, aud the resource (trailing slash aside), bound to the agent's key, jti the resource's presented_jti, and the same sub, mission_s256 and tenant.
  • A federated call still presents the person token; an auth token there is refused.

This is what the data plane did before it adopted the library: it accepted any live token it had issued, checked against the same claims.

Tests

  • A second call presents the first call's auth token, is issued, and spends its own amount. It fails without the change.
  • An auth token the resource did not see (presented_jti differs) is invalid_resource_token.
  • An auth token another server signed is invalid_presented_token.

166 tests, coverage 90.3% (floor 88).

Release

introspection-aauth is pre-release, so this releases it as 0.1.0 (release-as in release-please-config.json, removed once 0.1.0 is out). The 1.0.0 that the first release cut from its breaking-change footers is deleted from PyPI and GitHub, and its changelog entry goes with it.

🤖 Generated with Claude Code

…d token

An agent presents the auth token it holds for a resource until the resource
asks for another; the resource then names that auth token's jti as
presented_jti. The Person Server accepted only a person token there, so every
call after the first to one resource was refused ("not an aa-person+jwt").
It now also accepts an auth token it issued itself (its issuer, its dwk),
checked against the same expectation. A federated call still presents the
person token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It is pre-release; 1.0.0 came from the initial release's breaking-change
footers and is yanked from PyPI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brightsparc brightsparc changed the title fix(aauth): accept the Person Server's own auth token as the presented token fix(aauth): accept the Person Server's own auth token as the presented token; release 0.1.0 Oct 22, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brightsparc
brightsparc merged commit 8446faa into main Oct 22, 2026
10 checks passed
@brightsparc
brightsparc deleted the fix/aauth-present-own-auth-token branch October 22, 2026 01:44
@introspection-ci introspection-ci Bot mentioned this pull request Oct 22, 2026

This branch was successfully deployed

1 active deployment
build — 4b1ed6f0 Deployed Oct 22, 2026 by brightsparc via Unit Tests #565
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant