skip to content

A credential presented to a service is either a reference to state the issuer holds, or a self-contained assertion the verifier evaluates on its own. Where does the authority live in each shape, what exactly does an assertion freeze at the moment it is minted, and why does the choice between the two shapes not change what happens when the credential is stolen?

level: seniorimportance: should knowfreq 48%

answer

  1. reference resolves; assertion evaluates
  2. authority in state vs authority in the key
  3. assertion = authorization decision frozen at issuance
  4. signature proves origin, never currency
  5. bearer by default; binding is the real axis

basics

~20 s

A credential is either a reference to the issuer's state or a self-contained assertion the verifier evaluates alone. An assertion is a frozen authorization decision from issuance time. Both are bearer credentials — possession is authority — unless bound to a key.

solid answer

~50 s

The structural axis is **reference versus assertion**. A reference means nothing by itself; the verifier resolves it against state the issuer owns, so authority lives in that state. An assertion carries the facts and is integrity-protected, so authority lives in the issuer's *key*: the verifier decides without reaching the issuer. That is the only shape that works across a trust boundary the verifier cannot cross, which is why federation is assertion-shaped. The part people miss is what an assertion *is*: an authorization decision taken at issuance and frozen. Its claims answer "what was true when this was minted", never "what is true now", so the freshness gap is an authorization defect, not a performance cost. No lifetime is short enough to turn a snapshot into a decision — high-impact actions must re-evaluate authoritative state at the moment of the action. Both shapes are bearer credentials: whoever holds one is the principal. Binding to a key or device is the axis that actually changes the threat model.

code

text · 13 lines
text
REFERENCE
  client -> service:  cred = "h7Qz..."      (means nothing on its own)
  service -> issuer state: resolve(cred) -> principal + current facts
  authority lives in: the state
  requires: reachability + entitlement to query

ASSERTION
  client -> service:  cred = {claims} + integrity protection
  service:            verify(cred, trusted issuer key) -> accept claims as of issuance
  authority lives in: the key
  requires: trust in the key only
  note: verify() answers "issuer said this, unaltered"
        verify() never answers "this is still true"

go deeper

for a junior

Know the two shapes: one is a pointer the server must look up, the other carries the facts and is checked with a key. Know that a signature proves the issuer said it, not that it is still true.

for a middle

Explain that an assertion records an authorization decision made at issuance, and that verifying it checks integrity and expiry rather than whether the claims still hold.

for a senior

Decide per operation how stale an authorization input may be, insist on re-evaluating authoritative state for high-impact actions regardless of credential lifetime, and treat bearer semantics as the default risk.

for a principal

Set where authorization decisions are taken across the estate — which coarse claims issuers may freeze versus what resource owners must evaluate live — and drive the move from bearer to possession-bound credentials, accounting for key management and intermediaries.

## Two shapes a credential can take Strip away formats and protocols and every credential a client presents is one of two things. A **reference** is a meaningless value — a handle, an identifier — that points at a record the issuer owns. The verifier learns nothing from the value itself; it asks the authoritative store *who is this, and what was decided about them*. Authority lives in that store. An **assertion** is a statement — "this principal is X, belongs to tenant Y, was granted Z" — protected so that tampering is detectable and the origin is provable, typically by a signature or a MAC. The verifier reads the statement, checks the protection against a key it already trusts, and decides. Authority lives in the **key**, not in any state. Everything else about the two designs is downstream of that one difference. ## Why an assertion is the only shape that crosses a trust boundary A reference is only meaningful to a party that can resolve it. Resolving it requires two things a verifier may not have: *reachability* of the issuer's state, and *entitlement* to query it. Between services you control, both are cheap assumptions. Across an organisational boundary — a partner, a customer's own infrastructure, an offline or intermittently connected device, a component deliberately isolated from your data plane — neither holds. Making the reference longer or more random does not help; unresolvable is unresolvable. An assertion replaces a reachability relationship with a **key-trust relationship**. The verifier needs the issuer's public key (or a chain terminating in something it trusts) and nothing else at decision time. Trust becomes transitive without connectivity. That is the whole reason federated and cross-domain identity is assertion-shaped: it is not an optimisation, it is the only shape that functions when the verifier cannot see the issuer's state. ## An assertion is a frozen authorization decision Here is the claim worth carrying into an interview. When an issuer mints an assertion carrying roles, scopes, entitlements or tenancy, it has already *performed an authorization decision* — it consulted authoritative state, evaluated policy, and recorded the outcome. The client then replays that recorded outcome to verifiers that never see the inputs. So the gap between issuance and use is not latency and not a caching inefficiency. It is an **authorization defect with a known duration**: for the credential's lifetime, verifiers enforce a decision made against inputs that may already be false. A role removed, a tenant suspended, a contract terminated, an account compromised and locked — the assertion keeps asserting the old world, and a correctly implemented verifier keeps honouring it, because verification proves *integrity and origin*, never *currency*. A signature says "the issuer said this and nobody altered it", which is silent on whether the issuer would still say it. The consequence is a rule, not a tuning knob: **for high-impact actions, re-evaluate authoritative state at the moment of the action**, regardless of how short the credential's lifetime is. Shortening the window narrows the exposure; it never converts a snapshot into a decision. Reading a public catalogue can tolerate a stale belief; moving money, changing a recovery address or granting someone else access cannot, and those operations should consult live state even when the credential says they are permitted. ## What this does to the authentication/authorization split The split this concept protects is: authentication establishes *who*, authorization decides *what may be done*, evaluated by the party that owns the resource. A credential is authentication evidence. The moment fine-grained permissions are packed into it, the credential silently becomes the authorization decision — taken by the issuer, at issuance, for every verifier at once. Policy is then spread across issuers, frozen for a lifetime, and impossible to change centrally. The design consequence: carry identity plus a small number of coarse, slow-changing claims; make the fine-grained decision at the resource against current state. The same logic explains why an assertion should name the verifier it was minted for — an assertion any service accepts merely because it verifies is a credential without an intended audience. ## Bearer versus proof of possession The axis that actually moves the threat model is orthogonal to reference-versus-assertion. Both shapes are, by default, **bearer** credentials: possession is authority, the credential authenticates itself rather than the party holding it, and a copy is as good as the original. Neither shape detects theft, and neither shape is inherently safer than the other when a credential leaks from a log, a proxy, a browser store or a backup. **Proof of possession** changes that. The credential is bound to a secret the legitimate holder controls — a private key named in or hashed into the credential, or the TLS channel it was issued over. The verifier then demands two things: a valid credential *and* fresh evidence that the presenter controls the bound secret, typically a signature over request-specific material such as a nonce, timestamp, method and target. A stolen copy alone is inert; the attacker must also extract non-exportable key material, which is a materially harder compromise. Binding is not free. Every client needs key management and a place to keep the secret; intermediaries that terminate and re-originate connections break channel binding; the freshness material must be checked to prevent replay; clock skew becomes a correctness issue; and the binding check must fail closed — a verifier that accepts the credential when the proof is missing has silently reverted to bearer semantics for every caller. ## How to decide Ask three questions in order. Can every verifier reach and query authoritative state? If no, you need an assertion. How stale may this operation's authorization inputs be? That answer, not the credential shape, dictates where you re-check live state. And what happens if a copy of this credential leaks? If "complete impersonation" is unacceptable, bind it — that decision matters more than the reference-versus-assertion choice it sits on top of.

  • If an assertion is a frozen authorization decision, what should and should not go inside it?
    Identity plus a small number of coarse, slow-changing facts — who the principal is, which tenant, which broad audience the credential is for. Fine-grained permissions do not belong there, because embedding them moves the authorization decision to the issuer and freezes it for the credential's lifetime across every verifier. The resource owner should evaluate fine-grained policy against current state at request time, using the credential only as evidence of identity.
  • A team argues that a two-minute lifetime makes the freshness problem go away. What is wrong with that reasoning?
    It confuses narrowing exposure with eliminating a defect. A two-minute window still means a revoked, suspended or compromised principal is authorized for up to two minutes on every verifier that trusts the assertion, and it does nothing for an action whose impact is irreversible within that window. Short lifetimes also shift the same decision to whatever mints the replacements, which must itself consult authoritative state. The correct control for high-impact actions is re-evaluating live state at the point of the action.
  • What concretely changes for an attacker when a credential is bound to a key rather than being a bearer token?
    Interception stops being sufficient. The verifier requires fresh evidence — usually a signature over request-specific material such as a nonce, timestamp, method and target — produced with the secret the credential is bound to, so the attacker must compromise the key store or device as well as capture the credential. The cost is client-side key management, breakage through intermediaries that re-originate connections, replay protection on the freshness material, and a verifier that must fail closed when the proof is absent.

A reference is a coat-check ticket: the number means nothing until the cloakroom looks it up, and the cloakroom can refuse. An assertion is a sealed, signed letter of introduction: anyone who knows the writer's seal can act on it without contacting the writer — including long after the writer changed their mind.

saying these in an interview costs you the question

  • Saying a signed credential is 'validated on every request', implying the claims are re-checked against current state; verification proves integrity and origin, not currency.
  • Treating the difference as stateless-versus-stateful performance rather than where authority lives and what the credential is a snapshot of.
  • Claiming self-contained assertions are inherently more or less secure than references, when both are bearer credentials with identical theft consequences.
  • Packing fine-grained permissions into the credential and treating the credential as the authorization decision.

context