Lockspire.Protocol.Registration
(lockspire v1.0.0)
Copy Markdown
RFC 7591 dynamic client registration intake — Plug.Conn-free orchestrator.
Pipeline (per Phase 26 D-13, refined per RESEARCH Q5 RESOLVED):
- Precondition gate — when
server_policy.registration_policy == :initial_access_tokenandiat == nil, reject with%Error{code: :invalid_token, field: :iat, reason: :missing}BEFORE any other step. - IAT redemption via
Lockspire.Protocol.InitialAccessToken.redeem/1(skipped ifiatis nil). - DcrPolicy resolution via
Lockspire.Protocol.DcrPolicy.resolve/3(Phase 25). - Slice-specific intake validation (D-14 jwks/coherence/redirect + D-15 PKCE floor).
- Credential generation (
client_id,client_secret,registration_access_token). - Persistence via
Lockspire.Admin.Clients.create_dcr_client/1(DCR-aware persistence helper from plan 26-01 task 4 — preserves provenance/RAT-hash/IAT-FK/issued_at/expires_at verbatim, unlike the legacyLockspire.Clients.register_client/1which strips them). - Post-commit audit + telemetry emission (
:dcr_registration_succeeded/:dcr_registration_rejected).
Per D-11 IAT-style enumeration defense, IAT redemption failures collapse to
%Error{code: :invalid_token} (the discriminator stays in telemetry).