Authentication Is Becoming Invisible

The incident review had been going for forty minutes before anyone noticed that the first question was unanswerable.

A support engineer's session had been used to pull a customer export at 02:14. The account was real, the device was enrolled, the token was valid, the policy engine had raised nothing. The obvious opening question in any session-compromise review is when did this user last authenticate? — because that timestamp is where you start drawing the timeline, and everything before it is a different investigation than everything after.

The identity provider had an answer. auth_time on every token issued to that session, including the one used at 02:14, was 09:31 on a Tuesday eleven days earlier. That was the last time the engineer had seen a login screen. Since then she had opened a laptop roughly forty times, unlocked it with her face, and been silently issued fresh tokens on the strength of a device-bound key and a compliance signal from the endpoint management agent. Forty acts of authentication, in the sense of a human proving something to a machine. Zero authentication events, in the sense of anything the identity system recorded as one.

So the honest answer to "when did this user last authenticate?" was: about six hours ago, on a device we don't operate, using a gesture we can't see, verified by a component that told us nothing except a single bit meaning yes. And that answer doesn't fit in a timeline, an audit report, a session policy, or a max_age parameter.

Nothing was broken. This is the intended behaviour of every stack in that sentence, and it is a better security posture than what it replaced. It is also the direction the whole industry is moving, deliberately and for good reasons — and it quietly demolishes an assumption that most session, audit and step-up logic is built on without ever writing it down.

Invisible authentication does not remove the authentication decision. It relocates it — into device unlock, into platform posture, into enrolment, and into recovery — and in the process it removes the periodic checkpoint that everything downstream was silently keyed to. The engineering problem of the next decade is not making authentication stronger. It is rebuilding, deliberately and at cost, the properties that a login screen used to provide for free.

Forward-looking identity pieces rot faster than almost anything else in this field, so: no adoption claims, no vendor roadmaps, and every mechanism here is already specified and already shipping somewhere. The argument doesn't depend on how fast any of it spreads, only on the direction, which has been consistent for a decade — fewer authentication events, not stronger ones.


The login event was a bundle, and nobody unbundled it deliberately

Start by being precise about what disappears, because "login" is doing more work than its name suggests.

A login event, in the old sense, is a discrete, timestamped, user-observed act in which a specific factor was exercised against a specific verifier. That definition contains at least seven distinct properties, which arrived bundled together by historical accident and are now being separated one at a time:

  1. A timestamp. A single moment you can put on a timeline; elapsed time since it is a computable number.
  2. A named factor. Password, TOTP, hardware key — something with known properties and a known threat model.
  3. An assurance level. A conclusion (this session reached AAL2, or the phishing-resistant tier) derived from the factor and the policy in force at that instant.
  4. A moment of user attention. Whatever else it did, the login prompt occupied a present, deliberate human for two seconds.
  5. A natural session boundary. Sessions were created at logins, so "session" and "authenticated interval" had the same edges.
  6. A compliance artifact. A log row an auditor accepts as evidence that a person authenticated to a system on a date — the literal form most control language takes.
  7. An incident anchor. The set of authentication events partitions time into before and after, and that partition is how you scope a blast radius.

Nobody chose that bundle. It's an artifact of proving who you are having been expensive and manual, so it happened rarely, at moments the user noticed, and got recorded because it was rare enough to record.

Now consider what each property costs once authentication becomes continuous and ambient. The timestamp becomes a distribution, not a point. The named factor becomes a chain of components with different owners. The assurance level becomes a function of time rather than a constant. The moment of attention vanishes entirely — that is, in fact, the product goal. The session boundary detaches from anything a human did. The compliance artifact has no natural row to be. And the incident anchor is gone: there is no before and after, only a posture that was continuously acceptable until it wasn't.

Six of the seven properties are load-bearing in code you have already written. That's the whole problem.

You can see how deep the assumption runs by reading almost any control standard. The NIST 800-63 series expresses reauthentication requirements at AAL2 as an absolute limit — on the order of twelve hours — plus an idle limit on the order of thirty minutes, and both are phrased as requirements to perform a reauthentication: an event, with a before and an after. Similarly, OIDC gives you max_age, which is arithmetic on auth_time, and prompt=login, which demands that an event occur. The vocabulary we standardised on has no way to express "this session has been continuously accompanied by a device-bound key and a live compliance signal for eleven days, and a human was verified at the OS level six hours ago." The best it can do is round that to a number and compare it.


What is actually replacing it

It's worth being concrete about the mechanisms, because the interesting engineering is in the specifics and because the general framing ("continuous authentication!") is where the marketing lives.

Platform user verification gating a hardware-held key. Windows Hello, Face ID, Touch ID, Android's biometric prompt. The mental model most people carry — "the biometric is the credential" — is wrong in a way that matters here; Why Biometrics Aren't Secrets covers why. The biometric is a local gate on a private key that never leaves the secure element. The important consequence for this article is structural: the authentication decision has been split into two halves that live in different places. The half you can verify is a signature over a challenge. The half you cannot verify is whether a human, and specifically the right one, was in front of the device when it happened.

WebAuthn is admirably honest about that split, and the honesty is easy to miss. authenticatorData carries a flags byte with, among others, a user presence bit (UP: something touched the authenticator) and a user verification bit (UV: the authenticator verified who was there). Two different claims, correctly separated. But notice what UV does not tell you. It doesn't tell you the modality — face, fingerprint, PIN, and an enterprise's device PIN policy all collapse to the same single bit. It doesn't tell you the quality or the false-accept characteristics. And authenticatorData contains no timestamp at all: nothing in the structure asserts that the verification happened simultaneously with the assertion, and platforms differ in how they scope a verification across operations. Your relying party learns that verification occurred, at some point, by some means, according to a component whose implementation you did not choose.

That is not a criticism of the design; putting more in there would mostly manufacture false precision. But if your risk logic treats a UV bit as "the user authenticated just now, with a strong factor," you have made an inference the protocol does not support.

Conditional mediation. Passkey autofill, where the credential is offered inside the username field and one gesture completes the whole thing. The ceremony is cryptographically identical to a full WebAuthn assertion, but the user's experience of an event has been engineered down to something indistinguishable from accepting an autocomplete suggestion. The event survives in your logs; it has stopped surviving in the user's memory. That matters more than it sounds, because several security properties — including "the user would have noticed something odd" — depend on the user experiencing the act as an act.

Device-bound session state and posture signals. A TPM or secure-element key vouching for the machine; a compliance verdict from an endpoint management agent; a device certificate; the platform artifacts (Windows' Primary Refresh Token being the best-known) that turn "this machine is enrolled and healthy" into something an identity provider accepts in place of a fresh interaction.

Continuous evaluation, as a standard rather than a slogan. This is the part I'd most encourage people to actually read, because it's the piece of specified machinery that most directly addresses the missing checkpoint, and it's not widely known outside the teams that had to implement it. The OpenID Foundation's Shared Signals work defines a framework for transmitting security events between cooperating parties — RISC for account-level events, and the Continuous Access Evaluation Profile (CAEP) for session-level ones: credential change, device compliance change, session revocation, assurance level change. The events are Security Event Tokens (RFC 8417), delivered over push (RFC 8935) or poll (RFC 8936).

What matters isn't the plumbing; it's that this inverts the direction of the control. The old model is poll by expiry: issue a short-lived token, and the fact that the resource server will demand a new one in five minutes is your revocation mechanism — a model that exists because the identity provider had no way to reach the resource server, so the checkpoint was the only lever available. CAEP replaces the implicit checkpoint with an explicit signal: the assurance level dropped, the device fell out of compliance, tell everyone now. Vendors have shipped this idea, most visibly as "continuous access evaluation" in the large cloud directories, and the effect is what the name suggests — token lifetimes stop being the security control and become a liveness parameter.

Session artifacts that prove themselves. The last piece, and the one with the sharpest engineering content. If the login event is gone, the session cookie is doing more work than ever — and a cookie is a bearer artifact, which means stealing it is equivalent to being the user, no matter how phishing-resistant the ceremony that created it was. The counter-moves are all forms of binding: DPoP (RFC 9449) and mTLS-bound tokens (RFC 8705) for API credentials, and for browser cookies, the in-progress Device Bound Session Credentials work, which ties a session cookie to a device-held key and requires the browser to periodically re-prove possession to keep the cookie alive.

Sit with that last one for a moment, because it's the whole thesis in miniature: the industry's answer to removing periodic human checkpoints is to add periodic cryptographic ones. The proof of continuity doesn't disappear; it gets moved from the user to the device, and from the login screen to a background refresh the user never sees. Which is good — but it means the thing continuously proving your session is now a component you do not own.


The decision didn't disappear; it moved four times

Here is the part that I think is genuinely non-obvious, and it's the reason "invisible" is a better word than "passive" or "continuous."

Every authentication decision that used to happen in the open still happens. It happens somewhere else, made by someone else, on a schedule you don't control. Four relocations, in rough order of how often they're overlooked.

Into device unlock. When a session is sustained by a hardware key gated on a local gesture, your effective authentication strength is the strength of that gesture and the hardware protecting it. Note that this is not a weak position — it's a subtle and rather beautiful one. A six-digit device PIN has around twenty bits of entropy, which is derisory as a password and entirely adequate here, because the guess is not offline: the secure element or TPM enforces anti-hammering, counts failures, and bricks or delays after a small number of attempts. The security argument for a local PIN rests entirely on hardware rate-limiting, not on entropy. That is the correct argument, and it is different in kind from every argument in Stop Asking Users to Remember Secrets, because it's the one place where a human-memorable secret genuinely is fine.

But the parameters of that argument belong to the platform. Lockout threshold, biometric false-accept rate, whether a PIN can substitute for a face after a failure, whether one verification can satisfy several operations — all vendor decisions, all subject to change in an OS update, none of them expressed in anything your relying party receives.

Into platform posture. "This device is compliant" is an assertion produced by a high-privilege agent on a machine you may not own, against a policy in a console that may belong to a customer rather than to you. You consume it; you cannot verify it. And if the endpoint is compromised at the level that matters, the agent's verdict is one of the things the attacker gets to influence.

Into enrolment. The one that most reliably gets skipped in design reviews. With frequent authentication events, a weak enrolment gets partially corrected over time: the user keeps proving things, and later proofs can be stronger than the first. Without events, the assurance ceiling of an identity is fixed at enrolment and can only decay from there — every silent renewal is an inference from that original act. If the credential was bound during a help-desk call with three security questions, eleven days of impeccably attested silent sessions rest on three security questions. The invisible path inherits the visible one's weakest moment and stops offering chances to fix it.

Into recovery. The visible event you removed from the front door reappears at the side door, and it is the door attackers use. This is the same structural point Passkey Account Recovery Is the Whole Problem makes about credentials, sharpened by ambience: when nobody ever logs in, "I got a new laptop" is one of the very few remaining moments where a human interacts with your identity system in a way that can change what it believes. Those moments become disproportionately valuable to an attacker precisely because they are rare. Rarity concentrates risk; it doesn't dilute it.

Put the four together and the trade the industry is making states itself cleanly:

The security of an invisible session is the security of whatever silently vouches for it — and that thing usually belongs to an OS vendor or an MDM, not to you. You can neither audit it nor revoke it independently.

Both halves of that last clause matter. You can't audit it: there is no interface that answers "was that a face or a passcode, and how long ago?" You can't revoke it independently: you can revoke your own session and your own credential, but you cannot revoke the device's ability to keep vouching. If a laptop is stolen and its unlock gesture is coerced or its biometric enrolment is added to, the thing that fixes it lives in a different console, run by a different team, and your identity system finds out only if someone remembers to tell it — which, again, is exactly what the Shared Signals work exists to fix, and exactly why it's worth implementing before you need it.

One irony worth naming: the one WebAuthn mechanism that says anything about the component doing the vouching is attestation, and I've argued in Attestation: The WebAuthn Feature You Probably Shouldn't Use that most deployments should leave it alone. I still think that — but be clear about what you're accepting. Attestation tells you the authenticator's model, not its state at this moment, so even deployments that do use it have the same gap. It isn't attestation-shaped. It's structural.


The questions that stop having crisp answers

Assume the direction holds. Here is the list of things in a typical identity platform that quietly stop working the way their authors assumed — not breaking loudly, which would be a mercy, but returning answers that are technically produced and semantically hollow.

Question What it used to mean What it means under ambient auth
When did this user last authenticate? The timestamp of the last credential ceremony Ambiguous: last interactive event, last UV assertion, or last posture confirmation — three different numbers, often days apart
Is this session fresh? now - auth_time against a threshold Arithmetic on a number that no longer tracks human presence
What assurance does this session have? A constant set at login A function of time, decaying between silent renewals and jumping on posture changes
How did this session come to exist? One row in a log A graph: enrolment, device binding, a chain of silent renewals, a policy version, several vouching components
Did a human do this? Implied by session existence within a short window Unanswerable from session state alone. Requires a separate signal
What's the incident timeline? Partitioned by auth events Continuous posture with no natural boundaries
What evidence do I give the auditor? "User X authenticated at T with factor F" Either nothing, or a synthetic record you decided to emit

Two of those deserve expanding, because they're where teams get hurt.

auth_time becomes a lie by omission. The claim is defined as the time when end-user authentication occurred, and every implementation must decide what counts. Most set it at the last interactive authentication and carry it forward through silent SSO, which is a defensible reading — arguably the defensible reading — and it produces the eleven-day-old timestamp in my opening. The result is that max_age, the standard freshness lever, forces an interactive prompt whenever the number gets large, whether or not any human evidence is actually stale. So you get the worst of both: a value that understates freshness in normal operation, and a control that overreacts when you use it. Teams work around this by extending max_age, which is a rational local decision that removes the last remaining freshness control in the system.

If you take one implementation note from this article, take this one: auth_time and "time since a human did something only a human could do" are now different quantities, and you need both. Keep auth_time meaning what the spec says. Track the second separately — I'd call it the last human-witnessed act: an operation carrying user verification, initiated by the user, that the user perceived as an act. Then write your policies against whichever one the policy actually cares about. Most step-up policies care about the second and are written against the first.

Compliance evidence has no natural row. A control that reads "users authenticate with MFA to access production systems" was written when authentication was an event, and it is satisfied by producing events. Under ambient authentication the honest description is "the session was continuously accompanied by a device-bound credential whose most recent user verification was six hours old." That is a stronger statement than the control asks for, and it will not pass an audit performed by sampling log rows, because there are no rows of the expected shape.

The resolution is unsatisfying and, I think, correct: emit the events anyway. Not fake ones — synthesised ones, honestly labelled. When a silent renewal happens on the strength of a device credential and a UV assertion, write a record saying exactly that, with the inputs, the resulting assurance level, and the fact that no user interaction took place. You are reconstructing the checkpoint at the log layer because you removed it at the interaction layer. It is bookkeeping, it costs storage — The Hidden Cost of Audit Logs has the bill — and it is much cheaper now than after the first audit finding.


The thing that can never become invisible

Everything above is about authentication. The most consequential design error in this whole area is applying the same trajectory to the thing sitting next to it.

Draw the line precisely:

  • Authentication answers who is this? It is a claim about identity, it is inherently continuous in nature, and it is a perfectly good candidate for becoming ambient. Nothing about "who" needs a human's attention to remain true between two moments.
  • Authorization of intent answers does this specific human want this specific consequential thing to happen, now? It is a claim about volition. It is inherently discrete, and it cannot be inferred from any amount of identity evidence.

No accumulation of posture signals, device attestations, behavioural baselines or fresh UV bits produces evidence about intent. They are different propositions. A session can be maximally assured and the action still be one the user knows nothing about — that is precisely the situation when malware, an over-permissioned browser extension, or an autonomous agent is driving the session. And here's the trap: the better your ambient authentication gets, the more tempting it becomes to treat high session assurance as a substitute for asking. The evidence is so good, and asking is so unfashionable.

This isn't a novel observation; it's an old one that the industry keeps rediscovering under new names. The banking world got there first and wrote it into regulation: the EU's strong customer authentication rules require that the authentication code be dynamically linked to the specific amount and the specific payee, so that an approval cannot be harvested and reused for a different transaction. The security literature calls the general form what-you-see-is-what-you-sign: the thing the human approves must be the thing the machine executes, displayed on a path the attacker doesn't control.

The design consequence is that as authentication events disappear, transaction confirmation should become more prominent, not less. Some fraction of the friction you're removing from the front door needs to reappear at the moments of consequence — payments, permission grants, key rotations, admin operations against other people's data, anything irreversible. And it needs the properties that make it meaningful:

  • Bound to particulars. "Approve transfer of £40,000 to ACME Ltd," not "confirm your identity." A prompt that doesn't name the action is a prompt users approve reflexively, which is the same fatigue dynamic described in Adaptive MFA: Security Should Follow Risk, Not Rules.
  • Bound to this action, not to the session. Session-scoped elevation is worth very little when something else is riding the session. Step-Up Authentication Done Right covers the mechanics — RFC 9470 challenges from the resource server, RFC 9396 rich authorization requests for the transaction detail — so I won't re-derive them here. The point specific to this article is that the case for those mechanisms gets stronger as logins get rarer, because session-level assurance is now permanently high and therefore permanently uninformative as a signal about any particular request.
  • Rendered where the attacker isn't. A confirmation drawn by the same compromised context that initiated the request confirms nothing, which is why the good implementations push it to a separate device or a platform-drawn surface.

If you want a single sentence to take into an architecture review: authentication can become invisible; authorization of intent cannot, and every design that conflates them will end up authorising things nobody asked for.

Agents make this urgent rather than theoretical. A software agent operating on a user's behalf holds a session with excellent authentication properties and no relationship to the user's attention whatsoever. Every control that infers intent from session assurance is, in that setting, inferring intent from the continued existence of a laptop.


What to carry in a session when nothing announces itself

Concretely, for a team building this year. None of this depends on any prediction being right.

Carry assurance and freshness in the session; never recompute them by assumption. A session record should hold, at minimum: the assurance level reached and the policy version that decided it; the methods actually used; whether user verification was asserted; whether the credential is device-bound and by what mechanism; the time of the last human-witnessed act, distinct from auth_time; and the posture inputs that were true when it was last renewed. Downstream services should read those rather than infer them. The AMR/ACR discipline — services authorise on acr, log amr — is the same as it always was; what changes is that these values must now be refreshed rather than stamped once, and services must handle the case where a session's assurance goes down during its lifetime. That direction is new. Almost no code handles it.

Make "how did this session come to exist?" a queryable field. Not a log you can grep during an incident — a field, on the session, that a policy engine can read at request time. Was this session created by an interactive ceremony or by silent renewal? How many renewals deep is it from the last interactive one? What vouched for the most recent renewal? Which enrolment does the credential chain back to, and how was that enrolment verified? This is the ambient-authentication equivalent of the point I made in The Generations of Authentication about knowing which generation minted a session: the sessions to be suspicious of are the ones that came in through a path you don't examine, and "assume the good one" is exactly backwards.

Key step-up to action risk, not elapsed time — but keep a decay term. Elapsed time hasn't stopped mattering; it has stopped being the right primary axis. What decays is not the cryptographic evidence, which is refreshed continuously and is fine, but the evidence that a specific human is present and attentive. So: gate on the consequence of the action, and use time-since-last-human-witnessed-act as a modifier rather than as the trigger. The concrete anti-pattern is a policy that reads now - auth_time > 900 and prompts, in a system where auth_time moves once a fortnight.

Decide what logout means when nobody logs in, before a customer asks. This is the question I'd expect most teams to fail today. If a session is sustained by a device credential and a posture signal, then destroying the session cookie achieves nothing durable: the next request re-establishes it silently, from the same inputs, in milliseconds. That is the ambient version of the bug in Authentication State vs. Session State, and it's worse, because there is no IdP session to end either — the thing re-creating the session is a device binding, not a login.

So "sign out" has to be defined against the binding rather than the session, and you need at least three distinct operations, exposed to different people:

  • End this session — the classic one; useful for shared screens, meaningless as a security control here.
  • Stop trusting this device — revoke the binding, so silent renewal stops. This is the one that actually means logout, and most products don't expose it in a form users can find or understand.
  • Revoke everywhere, now — kill the credential, propagate through Shared Signals or equivalent, and accept that recovery is the cost. This is the "my laptop was stolen" path, and it is the same path as "someone is in my account", which is worth designing on purpose rather than discovering.

Users need a comprehensible version of the middle one. "This isn't my device" is a sentence a person can act on. "Manage active sessions" is a screen they will never open.

Subscribe to signals instead of shortening TTLs. The reflex when trust gets fuzzy is to cut token lifetimes, buying revocation latency at a linear cost in traffic to your identity platform — Identity Is Mostly Read Traffic covers what that does to a capacity plan. Event-driven revocation is the better trade and it already exists as a standard. If you consume identity from a provider, ask what CAEP-style events they emit; if you are the provider, emitting them is worth more to your customers than another lifetime knob.


Where invisible is the wrong design

A direction of travel is not a universal recommendation, and the places where ambient authentication is actively wrong are predictable enough to enumerate.

Shared workstations. Clinical carts, retail terminals, warehouse floors, call centres. Device trust conflates the device with the person, which on a shared machine is the exact inversion of what you need: the device is constant and the person changes every four minutes. These environments need the opposite design — fast, explicit, cheap, frequent identification events, of the tap-a-badge variety — because the whole risk is attribution between humans sharing hardware. Anything treating device trust as a universal improvement makes them materially worse.

High-consequence and irreversible operations. Covered above: not because authentication is insufficient but because intent is a different proposition.

Coercion and duress. A gesture-based unlock can be performed on an unwilling person in seconds, which is not true of a memorised secret. The legal position on compelled biometrics versus compelled passcodes differs by jurisdiction and is genuinely unsettled in several of them, so I won't state it as fact — but the engineering point stands regardless of law: a credential that can be exercised without the holder's cooperation has a different threat model, and for populations at elevated risk (journalists, activists, people at borders, domestic-abuse survivors) that difference dominates. The design response is that the option to require something only a cooperating human can produce should exist, and platforms that provide a fast route to "PIN required now" are getting something right.

Silent failure and the absence of a path back. This is the accessibility argument, and it generalises, so it's worth stating as an engineering one. A visible prompt has a visible failure: you typed the wrong password, you know it, there's a recovery link. Invisible authentication has invisible failure. The device stops reporting compliant because an agent is wedged; the behavioural baseline shifts because the user broke their wrist, changed shifts, is travelling, or uses a screen reader whose interaction pattern looks nothing like the population; the posture signal is stale because a management server is down. None of it is experienced as an authentication problem. It is experienced as the application being subtly broken — no error, no prompt, nothing to try.

Two rules follow. Every silent trust path needs a visible fallback that a user can reach without knowing why they need it — a way to say "let me prove it the hard way" that always works. And a silent denial must produce an explanation somewhere a support agent can read, because otherwise you have built a system whose failures cannot be diagnosed by the people who receive the tickets. "We didn't recognise this device" is a support-resolvable sentence. A risk score is not.

Underneath that is a fairness point worth stating plainly: behavioural and posture signals are, by construction, models of a population's normal behaviour, and the people who fall outside them do so for reasons of disability, working pattern, geography or hardware. A system that quietly degrades for outliers while staying seamless for everyone else does not show up in your dashboards. The aggregate challenge rate looks excellent.


Designing for the absence of a checkpoint

The instinct after a piece like this is to conclude ambient authentication is a bad trade. It isn't. Removing authentication events removes phishing opportunities, fatigue-driven reflexive approval, and the pressure to weaken factors for usability, and it replaces a periodic guess about the past with a continuous statement about the present. On the merits it's the strongest direction the field has moved since public-key credentials, and I'd deploy it.

The point is narrower and, I think, harder to argue with: the login event was doing seven jobs, you were only paying for one, and the other six are now line items.

That reframing is what I'd want an architect to carry out of here, because it converts an amorphous trend into a finite piece of work. For each of the six properties, you now need an explicit mechanism where you previously had a free side effect:

  • The timestamp becomes two tracked quantities — auth_time as the spec defines it, and time-since-last-human-witnessed-act as the thing your policies actually mean.
  • The factor becomes a recorded chain: which credential, which device binding, which vouching components, which enrolment.
  • The assurance level becomes a mutable session attribute that can decrease, with downstream code that handles the decrease.
  • The moment of attention becomes transaction confirmation at the points of consequence, bound to particulars, and nowhere else.
  • The session boundary becomes a device-binding lifecycle with a "stop trusting this device" operation that users can find.
  • The audit artifact becomes deliberately synthesised events, honestly labelled with the fact that no human interaction occurred.
  • The incident anchor becomes a queryable session provenance record, because the timeline you'll want at 3am is now a graph and nobody reconstructs a graph from application logs under pressure.

Every one of those is a small, boring, testable piece of engineering. None of them is speculative. All of them are cheaper to build before you need them, and all of them are things the checkpoint used to give you for nothing.

And there's a test for whether you've done it. Pick a live session in your production system, at random, and try to answer three questions from data your services can read at request time, not from a spelunking exercise in log storage:

  1. What does this session claim about the user's assurance?
  2. What evidence currently supports that claim, and who produced each piece of it?
  3. When did a human last do something that only a human could have done?

If the first is a constant stamped days ago, the second is unrecorded, and the third is a question your system has no field for, then you're running ambient authentication on session logic that assumes a checkpoint which no longer occurs. That's not a hypothetical about 2030. In most stacks that shipped Windows Hello or platform passkeys with device trust, it's the state of things today, and the eleven-day-old auth_time in the opening was not an exotic misconfiguration. It was every default working exactly as documented.

The good news is that the question at the top of an incident review is a design requirement in disguise. Systems that can answer when did a human last prove something, and what vouched for everything since will handle the next decade fine. Systems that can only answer when did they last see a login screen will keep producing that answer, confidently, long after it has stopped describing anything real.