pub enum TokenVerifyError {
}Variants§
InvalidFormat
Bearer string did not parse as a JWS Compact serialization. Adapter-side reject before engine entry.
SignatureInvalid
Cryptographic signature verification failed (engine M16).
Expired
exp claim is in the past (engine M19).
IssuerInvalid
iss did not match super::VerifyConfig::issuer (engine M23). The
engine does not expose the actual value because the failed
match means we cannot trust any payload field — the SDK
surfaces just “issuer invalid” and the audit log carries the
caller’s expected value alongside this variant.
AudienceInvalid
aud did not match super::VerifyConfig::audience (engine M21/M22).
MissingClaim(&'static str)
A required claim was absent or malformed.
JWKS fetch failed and there is no usable cached snapshot
(initial bootstrap failure or with_initial constructed with
an empty key set). Distinct from SignatureInvalid so audit
logs distinguish “we couldn’t even attempt verification” from
“verification failed.”
SessionVersionStale
Engine check_epoch rejected: token’s sv claim is below the
authoritative substrate’s current value. Break-glass /
LogoutAll just kicked this token (RFC §3 Row 3 + STANDARDS_AUTH_INVALIDATION
§2.3). Distinct from Expired (which is exp-bound) — the
caller’s UX response is the same (re-authenticate) but audit
logs distinguish revocation from natural expiry.
Surfaces only when the consumer wired
JwtVerifier::with_epoch_revocation at boot. With no port
wired, the engine’s epoch gate short-circuits and this variant
is unreachable.
Engine check_epoch could not reach its substrate (cache miss
fell through to fetcher; fetcher returned transient error).
Fail-closed per STANDARDS_AUTH_INVALIDATION §3 — admit-on-
failure would let stale tokens slip during outage windows.
Caller’s HTTP response should be 503 Service Unavailable.
Surfaces only when the consumer wired
JwtVerifier::with_epoch_revocation at boot.
SessionRevoked
Phase 11.Z 0.10.0 (RFC_2026-05-08 §4.2 lock) — L2 session
liveness reject. The token’s sid claim resolved to a row that
is absent OR revoked_at is set. Distinct from
SessionVersionStale (L1 sv-axis): L2 is consumer-DB row
revocation; L1 is cross-service break-glass propagation.
Caller’s HTTP response is 401 and the browser cookie clears
(the LogoutAll/per-session-revoke flow’s actionable signal).
Surfaces only when the consumer wired
JwtVerifier::with_session_liveness at boot AND the token
carries a sid claim. Tokens without sid (machine
credentials, AI-agent flows, R6 legacy admit per
super::VerifiedClaims::session_id) admit without consulting
the L2 port (lenient — RFC_2026-05-08 §4.2 lock).
Phase 11.Z 0.10.0 — L2 session liveness substrate could not
answer (DB connection lost, schema unavailable, query timeout).
Fail-closed per STANDARDS_AUTH_INVALIDATION §3 — admit-on-
failure would let post-revoke tokens slip through during outage
windows. Caller’s HTTP response should be 503 Service Unavailable. Distinct from SessionVersionLookupUnavailable
(L1) so audit dashboards pivot L1 substrate health vs L2
substrate health independently.
Surfaces only when the consumer wired
JwtVerifier::with_session_liveness at boot.
IdTokenAsBearer
M73 — id_token presented as a Bearer token. RFC 9068 §1 (negative)
- OIDC Core §1.2 intent: id_tokens authenticate the user to the RP; access_tokens authorize the RP to the resource server. The two are not interchangeable. Many 3rd-party RPs misuse id_token for API access — the SDK’s BearerVerifier surface is for resource servers, so an id_token-shaped JWT here is always wrong.
Distinct from SignatureInvalid (which is the engine’s catch-all
for “token cannot be trusted”) so audit logs distinguish a
developer-misuse signal (“you’re sending the wrong token class”)
from a forgery signal (“the signature didn’t verify”). Rejected
BEFORE engine entry so the audit log does not get the same
signal masked by TypMismatch → SignatureInvalid collapsing.
Other(String)
Catch-all for engine variants that don’t map to a structural
SDK rejection. Carries the engine’s AuthError Display so the
audit log retains the M-code.
Trait Implementations§
Source§impl Clone for VerifyError
impl Clone for VerifyError
Source§fn clone(&self) -> VerifyError
fn clone(&self) -> VerifyError
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VerifyError
impl Debug for VerifyError
Source§impl Display for VerifyError
impl Display for VerifyError
Source§impl Error for VerifyError
impl Error for VerifyError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl PartialEq for VerifyError
impl PartialEq for VerifyError
Source§fn eq(&self, other: &VerifyError) -> bool
fn eq(&self, other: &VerifyError) -> bool
self and other values to be equal, and is used by ==.impl Eq for VerifyError
impl StructuralPartialEq for VerifyError
Auto Trait Implementations§
impl Freeze for VerifyError
impl RefUnwindSafe for VerifyError
impl Send for VerifyError
impl Sync for VerifyError
impl Unpin for VerifyError
impl UnsafeUnpin for VerifyError
impl UnwindSafe for VerifyError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.