Skip to content

v0.23.0

Release Date: 2026-10-27

A security release for resource servers that accept AI agents. aauthrs now accepts auth tokens only from the server entitled to issue them, binds every verified signature to the resource that receives it, and gains a revocation hook. It updates aauth-go to v0.3.0. It is breaking for resources that accept an Access Server's auth tokens: read Upgrading first.

Highlights

  • Auth tokens only from their rightful issuer. In four-party (Audience set), only the resource's Access Server may issue the auth tokens it accepts (dwk aauth-access.json). In three-party, only a trusted Person Server issuing for itself (dwk aauth-person.json). Before, any issuer in TrustedIssuers was accepted with either dwk, so a Person Server trusted for person tokens could grant itself scopes that bypass the Access Server's policy.
  • Signatures bound to this resource. Signature.Authority defaults to the host of Resource, so a request signed for another server is refused. Auth and person tokens are already addressed to one resource; agent tokens are not, so in agent-token mode a server an agent called could otherwise replay the agent's signed request here.
  • A revocation hook. Config.IsRevoked is asked about every token once it and the request signature verify: a revoked token is a 401 revoked_jwt, unavailable revocation state a 500. It works like aauth-go's ResourceGuard, so applications need not wrap the authenticator to check revocations.

Breaking Changes

  • Name the Access Server in Audience. A resource that accepts auth tokens from an Access Server must set aauthrs.Config.Audience to it. Listed only in TrustedIssuers, its auth tokens are refused. The Access Server's keys are resolved through Audience, which does not make it trusted for person tokens.
  • No Access Server tokens in three-party. Without Audience, a trusted issuer's auth token with dwk aauth-access.json is refused.

Dependencies

  • github.com/aauth-dev/aauth-go v0.3.0 (was v0.2.0). It verifies more strictly: agent identifiers must be in their provider's domain, request bodies are read up to 4 MiB for verification, token lifetimes are capped, and signature failures no longer carry internal error text.

Documentation

  • AI Agents (AAuth): choosing three- or four-party, Audience, the signature authority and IsRevoked

Upgrading

There are no database migrations.

  1. If your resource accepts auth tokens from an Access Server, set Audience to it. When the Person Server and the Access Server share one origin, name that origin in both TrustedIssuers and Audience:

    aauthrs.Config{
        TrustedIssuers: []string{"https://agents.example.com"},
        Audience:       "https://agents.example.com",
        // ...
    }
    
  2. If your resource sits behind a proxy, make sure the Host header that reaches it is the resource's public host. A rewritten Host now fails signature verification. Set Signature.Authority yourself only if the resource is reached under a host other than its identifier's.

  3. If your application also uses aauth-go directly, read its v0.3.0 migration guide. Agent providers must use their issuer's host as the agent domain, and personserver and accessserver stores gain new methods.
  4. To check revocations, set IsRevoked, returning an error wrapping aauth.ErrRevoked for a revoked token.