EU Digital Identity Wallet · .NET
Verify EUDI Wallet credentials
from your .NET backend.
Open-source ASP.NET Core verifier for OpenID4VP 1.0 +SD-JWT VC, including mdoc (mDL) verification. Native DI wiring, demo mode included and a clean trust seam for when you go to production.
Install
$ dotnet add package Tessio.Verifier.AspNetCoreFive-minute quickstart
Wire one ASP.NET Core endpoint, run it and watch a verified age_over_18claim come back over Server-Sent Events. No production wallet required.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTessioVerifier(options =>
{
options.Mode = VerifierMode.Demo; // local-only flow, no real wallet needed
options.RequestedClaims = ["age_over_18"]; // selective disclosure: ask only for what you need
});
var app = builder.Build();
app.MapTessioVerifier(); // request-init, wallet-callback, result-stream
app.MapGet("/", () => Results.Content(
"""<a href="/verify/start">Start a verification</a>""", "text/html"));
app.Run();Why a .NET-native verifier?
Native to .NET
Runs on .NET 8, 9 and 10. DI extensions, minimal APIs, Azure-friendly. No translation from Kotlin or Rust, the code looks like the rest of your stack.
Demo mode included
No production wallets yet? Demo auto-completes locally, Mock issues real signed credentials through the whole pipeline, Test replays the RFC 9901 spec vector and Live waits for real wallets.
HAIP-aligned
OpenID4VP 1.0, SD-JWT VC with `dc+sd-jwt`, mdoc (mDL), DCQL queries, JAR-signed requests, encrypted responses. Built to the EUDI profile that matters.
Pluggable trust
A clean `ITrustListResolver` seam. Use the dev resolver to iterate, then swap to the managed 27-state trust layer when you go live.
Status
v0.3.0 is on NuGet with multi-tenant hosting
Install the package and the quickstart above runs end to end. The SD-JWT VC core passes the RFC 9901 spec vectors and Test mode replays the specification's own example through the real verifier. Live mode serves real wallets with signed requests, encrypted responses and a QR start page; the going-live guide covers the path there. Both verification pipelines are fuzz-tested. v0.2 verifies ISO mobile documents (mso_mdoc) and agrees byte for byte with the ISO 18013-5 worked example. v0.3 adds a public verification seam for self-driving and multi-tenant hosts: one process verifies wallet callbacks for many tenants, each against its own request. The public API stays frozen atcontracts-v0.
Mandatory acceptance under Regulation (EU) 2024/1183 lands 6 December 2027. We're shipping this before then so .NET shops aren't left translating from Kotlin.
Built on the standards
No proprietary protocols. The credentials Tessio verifies are the same ones every EUDI Wallet emits.