Releases: faustbrian/go-authentication
Release list
github.com/faustbrian/go-authentication v1.0.0
1.0.0 - 2026-08-25
Fixed
- Run OIDC Keycloak interoperability through the repository-owned standalone
script instead of a removed monorepo-relative path.
Changed
-
Upgrade JWT cryptographic dependencies to their current secure releases.
-
Exclude intentional nested modules from root local-proxy archives so local,
bootstrap, CI, and public module checksums describe the same source
boundary. -
Track the pinned documentation-tool lockfile so clean CI checkouts install
the exact validated cspell dependency. -
Reconcile standalone dependency checksums against deterministic current
module archives so CI, local verification, and release consumers resolve
identical content. -
Harden standalone documentation validation with deterministic spelling and
link checks, package-specific documentation gates, and repository-local
contributor guidance.
Documentation
-
Replace obsolete standalone-repository links and workflow claims with
monorepo-canonical targets and current release guidance. -
Link the package README to the repository-wide Golib documentation portal.
Security
- Protect static Basic and API-key credentials with random per-authenticator
HMAC-SHA-256 keys instead of reusable unkeyed secret digests. - Enforce and prove inclusive credential, principal, challenge, collection, and
static-entry bounds at their exact limits; reject forged result states and
provider method mismatches without weakening fail-closed behavior.
Fixed
- Bind package-owned composition and static-secret lifecycle decisions to the
authoritative RFC authentication and credential-security constraints. - Return authentication unavailability instead of emitting a non-compliant
401 Unauthorizedresponse when no validWWW-Authenticatechallenge is
available.
Changed
-
Publish the module from its standalone
github.com/faustbrian/go-authenticationidentity while preserving its documented API and behavior. -
Replace obsolete owned-module pseudo-version pins with the monorepo's local
v0.0.0source-proxy coordinates; release tooling continues to emit exact
v1.0.0dependency versions. -
Link specification provenance directly to the canonical decision register so
conformance rationale and executable evidence remain discoverable. -
Require owned sibling modules at local
v0.0.0; clean external consumers
pin each module to an exact main pseudo-version. -
Add explicit pipe-compatible bearer extraction for legacy opaque-token
contracts while retaining strict RFC 6750 syntax by default. -
Preserve
apikey.Staticcomparability while retaining per-authenticator
keyed credential digests. -
Execute API compatibility tooling against the isolated module graph so owned
dependency source changes cannot conflict with release checksums. -
Refresh owned-module checksums against the final consolidated archives.
-
Normalized standalone module metadata against the canonical owned dependency
graph, including complete checksums for clean consumer resolution. -
Use the repository-pinned current
apidiffrevision for root and optional
authentication-module compatibility checks.
Added
- An auditable specification decision register for Basic, bearer, API-key,
challenge, credential-source, middleware, composition, and rotation policy. - Constant-work static bearer authentication with bounded overlapping tokens
and atomic whole-set replacement for credential rotation and revocation. - Immutable bounded principals, typed redacted credentials, explicit anonymous
results, stable failures, challenges, context helpers, and deterministic
authenticator composition. - Constant-time static Basic and API-key authentication, atomic API-key
rotation, and callback bearer and API-key adapters. - Strict opt-in HTTP header, query, and cookie extraction with fail-closed
authentication-only middleware. - Optional JWT/JWK and OIDC modules with bounded remote key handling, strict
algorithm and claim validation, rotation, stale-key behavior, and owned
resource lifecycle. - Secret-safe
slogand optional OpenTelemetry instrumentation adapters. - Deterministic test fixtures, runnable examples, fuzz targets, race tests,
benchmarks, exact statement coverage gates, API compatibility checks, and
reproducible release automation. - Security audit artifacts covering the threat model, findings, protocol and
failure-injection matrices, authoritative vectors, and secure adoption.
Changed
- OIDC remote refresh now has bounded cancellation-aware waiters, conditional
requests, bounded freshness, failure cooldown, and consistent numeric-date
skew enforcement. - JWT remote shutdown now owns, cancels, and drains admitted operations.
- JWT and OIDC reject algorithm/key-family and JWK metadata mismatches.
- Basic credentials and HTTP challenges reject control bytes, and challenges
enforce explicit parameter and field bounds. - Query credential constructors are deprecated for new designs.
Release integrity
- Source commit:
9f3aa6f181833ff4a4ca474d868711d1dd2b9122 - Exact-head CI: https://github.com/faustbrian/go-authentication/actions/runs/32907415809
- Release dry-run: urn:sha256:870f01d9fa0ce83a918f3cb1319785f766a4d66dda6d8495e866546ce94bfcba
- Assets include a CycloneDX SBOM, SLSA v1 in-toto provenance, and SSH-signed checksums.
Verify the checksum attestation with:
ssh-keygen -Y verify -f ALLOWED_SIGNERS -I brian@cline.sh -n golib-release -s SHA256SUMS.sig < SHA256SUMS
github.com/faustbrian/go-authentication/oidc v1.0.0
1.0.0 - 2026-08-25
Documentation
- Link the package README to the repository-wide Golib documentation portal.
Security
-
Reject duplicate discovery/JWKS members, invalid response media types,
oversized headers, null or wrongly typed standard metadata, empty JWK
operation policy, encryption-only keys, ambiguous missing key IDs,
non-loopback HTTP providers, retired-key rollback, malformed standard JOSE
headers and protocol claims, distributed-claim tokens, lossy numeric
decoding, and non-ASCII or oversized subjects; preserve private JSON numbers
withoutfloat64coercion. -
Preserve fractional temporal boundaries, validate every claim before nonce
consumption, keep nonce cancellation unavailable, and prevent a canceled
refresh owner from poisoning other callers. -
Enforce exact token issuers, trusted additional audiences, duplicate-audience
rejection, provider-advertised algorithms, strict metadata, and fail-closed
JWKS expiry during provider outages. -
Bound and synchronize discovery plus metadata/JWKS refresh, eagerly initialize
keys, probe unknown key IDs after a cooldown, spread refresh with per-instance
jitter, and redact provider failures. -
Enforce hard configuration ceilings and algorithm-specific public-key shape
and size bounds before accepting provider keys. -
Support caller-owned nonce replay checks with panic containment and optional
at_hashandc_hashvalidation throughValidateIDToken.
Added
-
Add the stable OpenID Connect, JOSE, JSON, HTTP, cache, rotation, lifecycle,
and diagnostic specification decision register with executable evidence. -
Add specification, public-option, failure, lifecycle, fleet-refresh, fuzz,
interoperability, and benchmark hardening evidence, including a pinned Google
discovery snapshot and an ephemeral provider-issued token from an immutable
Keycloak 26.3.2 image. -
Add
TrustedAudiences,TokenBinding, andValidateIDTokenfor explicit
multi-audience and front-channel token-binding policy. -
Document supported profiles, exclusions, setup, adoption, cache rotation,
concurrency, cancellation, resource lifetime, security, migration, and FAQ.
Distribution
- Include the canonical MIT licence in the independently published module.
Compatibility
- Added a pinned module export baseline so incompatible public API changes
fail the canonical repository gate.
Changed
-
Publish the module from its standalone
github.com/faustbrian/go-authentication/oidcidentity while preserving its documented API and behavior. -
Refresh local
v0.0.0owned-module checksums after dependency manifests and
release notes were normalized; runtime behavior and public APIs are
unchanged. -
Require owned sibling modules at local
v0.0.0; clean external consumers
pin each module to an exact main pseudo-version. -
Refresh owned-module checksums against the final consolidated archives.
-
Normalized standalone module metadata against the canonical owned dependency
graph, including complete checksums for clean consumer resolution. -
Refreshed the canonical authentication checksum after its test archive
changed, preserving isolated module verification. -
Refreshed the canonical authentication checksum after its API compatibility
baseline was normalized to the module boundary.
Release integrity
- Source commit:
9f3aa6f181833ff4a4ca474d868711d1dd2b9122 - Exact-head CI: https://github.com/faustbrian/go-authentication/actions/runs/32907415809
- Release dry-run: urn:sha256:44a78e83e9770047fb631ad5fd316c1cf045c89d9a19ff61e68b3794a2c66c19
- Assets include a CycloneDX SBOM, SLSA v1 in-toto provenance, and SSH-signed checksums.
Verify the checksum attestation with:
ssh-keygen -Y verify -f ALLOWED_SIGNERS -I brian@cline.sh -n golib-release -s SHA256SUMS.sig < SHA256SUMS
github.com/faustbrian/go-authentication/jwt v1.0.0
1.0.0 - 2026-08-25
Security
- Use one clock instant for every claim check in a validation attempt, reject
fractional and exponent NumericDate encodings that invite parser-dependent
rounding, and preserve private JSON numbers losslessly instead of exposing
roundedfloat64values. - Require verification-only JWK operations, treat conflicting
max-age
directives as immediately stale, and keep remote work permanently rejected
after close begins even when a close attempt is canceled. - Make the default remote HTTP transport safe, reject typed-nil transports,
and complete successful remote-cache initialization with exactly one bounded
request. - Preserve the last validated remote key set across hostile refresh responses,
prove old-key eviction and outage recovery, and ensure unknown key IDs never
trigger attacker-driven fetches. - Require canonical unpadded base64url signatures and JSON-number NumericDate
claims; add exact subject allowlists and custom required-claim policy, and
reject configurations whose claim bound cannot hold every required claim. - Reject build-tag-dependent ES256K so the published algorithm matrix remains
completely executable under the module's canonical build. - Keep safe standards error categories while replacing provider and transport
causes with a stable redacted key-provider category. - Route automatic JWKS refresh through the configured hardened client,
serialize it with explicit refresh work, detach provider lifetime from the
constructor context, honor freshness directives and response age, and avoid
body-limit arithmetic overflow. - Reject invalid UTF-8 in protected headers and claim sets instead of allowing
JSON decoding to replace malformed bytes. - Enforce algorithm-specific HMAC sizes, RSA modulus bounds, exact EC curves,
public-only asymmetric verification keys, and reject token-provided key
references, unpaired Unicode surrogates, and oversized JSON numbers. - Bound remote JWK headers, bodies, key counts, initialization, and concurrent
operations; reject redirects and compression; validate responses before
caching; deep-copy returned sets; coalesce refreshes; and independently
jitter refresh schedules across provider instances.
Documentation
-
Link the package README to the repository-wide Golib documentation portal.
-
Add the stable JWT, JOSE, JSON, remote-JWKS, cache, lifecycle, and diagnostic
specification decision register with executable evidence links. -
Document strict claim and algorithm policy, local and remote key ownership,
fail-stale refresh behavior, cancellation, close semantics, error redaction,
adoption, migration, security tradeoffs, and compatibility.
Interoperability
- Add full signed-payload and cache-header fuzz boundaries alongside the
compact-token and remote-response fuzz targets. - Add the RFC 7515 Appendix A.2 RS256 compact JWS and bidirectional
golang-jwt interoperability for every shared HMAC, RSA, PSS, and ECDSA
algorithm. - Verify bidirectional HS256 compatibility with golang-jwt v5 in addition to
the pinned RFC 7520 JWK vector and lestrrat-go/jwx implementation.
Distribution
- Include the canonical MIT licence in the independently published module.
Compatibility
- Added a pinned module export baseline so incompatible public API changes
fail the canonical repository gate.
Changed
-
Publish the module from its standalone
github.com/faustbrian/go-authentication/jwtidentity while preserving its documented API and behavior. -
Refresh local
v0.0.0owned-module checksums after dependency manifests and
release notes were normalized; runtime behavior and public APIs are
unchanged. -
Require owned sibling modules at local
v0.0.0; clean external consumers
pin each module to an exact main pseudo-version. -
Refresh owned-module checksums against the final consolidated archives.
-
Normalized standalone module metadata against the canonical owned dependency
graph, including complete checksums for clean consumer resolution. -
Refreshed the canonical authentication checksum after its test archive
changed, preserving isolated module verification. -
Refreshed the canonical authentication checksum after its API compatibility
baseline was normalized to the module boundary.
Release integrity
- Source commit:
9f3aa6f181833ff4a4ca474d868711d1dd2b9122 - Exact-head CI: https://github.com/faustbrian/go-authentication/actions/runs/32907415809
- Release dry-run: urn:sha256:5a0b1704bd8c568b41b214b9cb6b42ad4acaf3090af03b7f7ea50da3cce35609
- Assets include a CycloneDX SBOM, SLSA v1 in-toto provenance, and SSH-signed checksums.
Verify the checksum attestation with:
ssh-keygen -Y verify -f ALLOWED_SIGNERS -I brian@cline.sh -n golib-release -s SHA256SUMS.sig < SHA256SUMS
github.com/faustbrian/go-authentication/authotel v1.0.0
1.0.0 - 2026-08-25
Documentation
- Link the package README to the repository-wide Golib documentation portal.
Distribution
- Include the canonical MIT licence in the independently published module.
Compatibility
- Added a pinned module export baseline so incompatible public API changes
fail the canonical repository gate.
Changed
-
Publish the module from its standalone
github.com/faustbrian/go-authentication/authotelidentity while preserving its documented API and behavior. -
Refresh local
v0.0.0owned-module checksums after dependency manifests and
release notes were normalized; runtime behavior and public APIs are
unchanged. -
Normalize credential, outcome, and failure dimensions to the documented
closed value sets; clamp negative durations; complete each attempt exactly
once under duplicate or concurrent callbacks without making duplicates wait
for provider work; and isolate provider and observer panics without
disclosing panic values. -
Define adapter telemetry convention version
1.0.0without mislabeling it as
an OpenTelemetry instrumentation-module version or schema URL, and document
signal stability, bounded-provider prerequisites, provider ownership,
privacy, cancellation, concurrency, lifecycle, compatibility, and migration
policy. -
Preserve the caller context when a hostile tracer returns nil and release
captured request context and span references after the winning completion so
retained callbacks cannot retain request state. -
Expand hardening proof across complete captured-telemetry redaction,
high-concurrency cardinality, bounded batch-exporter backpressure, hostile
provider fuzzing, SDK errors and shutdown, and enabled, sampled-out, no-op,
and direct-instrumentation allocation benchmarks with enforced relative
latency and allocation budgets. -
Make the unavoidable bounded synchronous-provider prerequisite explicit:
indefinitely blocking implementations are outside the supported contract
because containing them would require unbounded abandoned goroutines. -
Require owned sibling modules at local
v0.0.0; clean external consumers
pin each module to an exact main pseudo-version. -
Refresh owned-module checksums against the final consolidated archives.
-
Normalized standalone module metadata against the canonical owned dependency
graph, including complete checksums for clean consumer resolution. -
Refreshed the canonical authentication checksum after its test archive
changed, preserving isolated module verification. -
Refreshed the canonical authentication checksum after its API compatibility
baseline was normalized to the module boundary.
Added
- Add an allocation-aware benchmark for the complete authentication
instrumentation start-and-finish path. - Add bounded fuzz coverage for arbitrary credential, outcome, failure, and
duration values across the complete instrumentation lifecycle.
Release integrity
- Source commit:
9f3aa6f181833ff4a4ca474d868711d1dd2b9122 - Exact-head CI: https://github.com/faustbrian/go-authentication/actions/runs/32907415809
- Release dry-run: urn:sha256:4e0831a8a96f2d593d54346115e963790ef8df8958469510387794cf59970fbf
- Assets include a CycloneDX SBOM, SLSA v1 in-toto provenance, and SSH-signed checksums.
Verify the checksum attestation with:
ssh-keygen -Y verify -f ALLOWED_SIGNERS -I brian@cline.sh -n golib-release -s SHA256SUMS.sig < SHA256SUMS