All notable changes to this project are documented here. The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[Unreleased]
[0.6.1]
- Emit
:token_deniedaudit/telemetry events for token endpoint failures, including OAuth error, status, client/grant/scope context when available, and sender-constraint presence. - Normalize Phoenix callback specs before handing
:cert_derto core Attesto protected-resource verification, so function captures,{Module, function}, and{Module, function, extra_args}all work consistently.
[0.6.0]
Initial release: a Phoenix/Ecto OAuth 2.0 / OIDC authorization server layer over attesto.
Added
AttestoPhoenix.Config: centralized, validated configuration with neutral host callbacks (:load_client,:verify_client_secret,:load_principal,:authorize_scope,:on_event, and others), deriving theAttesto.Configthe protocol layer consumes.AttestoPhoenix.Router: theattesto_routes/1macro mounting the token, revocation, discovery, JWKS, and optional dynamic-registration endpoints.- Controllers for the token endpoint (
authorization_code,refresh_token, andclient_credentialsgrants), revocation (RFC 7009), discovery (RFC 8414), JWKS (RFC 7517), and optional dynamic client registration (RFC 7591). AttestoPhoenix.Plug.AuthenticateandAttestoPhoenix.Plug.RequireScopesprotected-resource plugs with DPoP and mTLS sender-constraint enforcement.- Ecto-backed implementations of the attesto store behaviours: code store,
refresh store (rotation with reuse detection), DPoP nonce store, and DPoP
jtireplay check, plus an optional TTL sweeper. mix attesto_phoenix.gen.migrationto generate the operational tables.- Pushed Authorization Requests (PAR, RFC 9126),
private_key_jwtclient authentication, signed request object validation, token exchange, UserInfo, registration management cleanup, and Phoenix resource-server plugs.