Explicit algorithm allowlist - the token header never decides (§3.1).
Names from the default set ("EdDSA", "ES256", "PS256", ...), or
legacy descriptors from lacewing/legacy/rsa such as LEGACY_RS256;
"RS256" as a bare string is refused.
The audience value that must appear in the token (§3.9).
OptionalclaimExtra per-claim predicates, run after all standard checks.
The one issuer this profile trusts (§3.8).
Key source: a JWKS (static or remote config), a KeySource, or a single key.
OptionalmaxAllowed clock skew, default 5s, capped at 120s.
Maximum accepted token age (now - iat), independent of exp.
OptionalmaxOptional cap on the token's declared lifetime (exp - iat). Where
maxTokenAge bounds how long a token stays usable, this refuses a token
whose issuer claimed an implausible span at all - a misissuance signal.
OptionalrevocationOptional revocation store - its absence is a visible choice.
OptionalsubjectPin the expected sub (§3.8.2).
Expected token type, e.g. "at+jwt" (§3.11).
OptionalunsafeUgly on purpose: accept tokens when the revocation store errors (LW-rev.4).
Lacewing - an opinionated JWT library where RFC 8725 (JWT Best Current Practices) is the default behavior, not an optional configuration.
This barrel is the public API. Internals under
src/lib/are policy machinery and stay private; legacy interop algorithms live behind the explicitlacewing/legacy/*imports.