Class AvPresentationRequest
- Namespace
- Tessio.Verifier.OpenId4Vp
- Assembly
- Tessio.Verifier.OpenId4Vp.dll
A built EU Age Verification authorization request, ready to be delivered to the Age Verification App. Its parameters ride directly in AuthorizationRequestUri; there is no request object.
public sealed record AvPresentationRequest : IEquatable<AvPresentationRequest>
- Inheritance
-
AvPresentationRequest
- Implements
- Inherited Members
Remarks
Deliberately a sibling of PresentationRequest rather than a third shape within it.
PresentationRequest is a frozen contract (contracts-v0) describing "a sealed hierarchy
with exactly two concrete shapes", and every one of its shapes carries a required
SignedRequestObject. An AV request has none, so it cannot be expressed there without either
breaking exhaustive pattern matching for existing consumers or storing an empty string in a property
the next reader would trust.
The overlap with PresentationRequest is therefore structural, not accidental: this type is what remains once the JAR is removed. Keep it that way. If a future profile needs a third variation, that is the signal to design a common abstraction, not to widen this one.
Properties
AuthorizationRequestUri
Wallet-facing URI carrying every request parameter in its query string. Encode as a QR code or deep link.
public required Uri AuthorizationRequestUri { get; init; }
Property Value
ClientId
Verifier identifier echoed from ClientId. Under this
profile it takes the form redirect_uri:<response_uri>.
public required string ClientId { get; init; }
Property Value
ExpiresAt
Absolute expiration of this request (UTC), for session cleanup.
public required DateTimeOffset ExpiresAt { get; init; }
Property Value
Remarks
Advisory, and more so than under the JAR profiles. A signed request carries an exp
claim, so a conformant wallet declines to answer a stale one. This profile has no request object
and therefore no exp, so nothing on the wallet side prevents a late answer. Whether one is
accepted is entirely the consuming verifier's decision, and this type does not make it: a verifier
that grants access on a completed check should compare this value against arrival time itself.
Nonce
Per-request nonce echoed from Nonce. The verifier retains this to check the nonce the wallet commits to in its device signature.
public required string Nonce { get; init; }
Property Value
State
Optional state echoed from State.
public string? State { get; init; }
Property Value
Remarks
Optional in the profile, but it is how a verifier with a fixed response_uri correlates the
response to its session. Omit it only if correlation is carried some other way.