ForTrust dWallet
Demo Relying Party (test client)
Test client showing how a third-party application authenticates an EUDI Wallet user via ForTrust.

Sign in with ForTrust Wallet

The WiFi credential scope requires a separate WiFi attestation pre-issued in the wallet. If the wallet only carries an mdoc PID, use Network access (PID) instead β€” it grants access on the identity the user already has.

Sign in with ForTrust

Click β†’ redirect to ForTrust β†’ scan the QR or tap "Open wallet" β†’ claims appear live.

⭐

Demo: Premium content with recurring mandate

Three independent steps linked by the same pairwise pseudonym emitted by the wallet β€” the RP, the bank and the verifier all know it's the same user without learning their identity.

1

Sign mandate

Online Β· on bank / merchant

The user opens the bank app, scans a QR with the EUDI wallet, and cryptographically signs a mandate (PSD2 Art.18). Server stores holder_pseudonym + cap + cycle.

🎟️ All 3 demos (Pass Hub)
2

Premium access

Online Β· any RP site

On a gated content site, the user logs in pseudonymously. Server derives holder_pseudonym and queries the mandate table. Returns only premium_status=active/none β€” no name, no ID.

⭐ Scan QR & sign in
3

Verify on-site

Proximity Β· NFC at merchant

At entry/delivery, the operator taps the wallet with the validator's NFC reader. The validator sees the same holder_pseudonym and shows "Subscription active Β· PAID" β€” offline, identity-free.

πŸ“± NFC TAP on validator

What the demo RP sends to ForTrust

client_id
demo.rp.fortrust.ro
redirect_uri
https://dwallet.fortrust.ro/oidc/demo/callback/
nonce
Gfzw2X3wPx_MljaEwSc6bY3ltChPbiNU
state (CSRF)
sBRKV0gscmTH2_rZ4fcwo91zKvM1eyfM
scope
openid profile eudi_pid
response_type
vp_token

Full request URL:

https://dwallet.fortrust.ro/oidc/authorize/?client_id=demo.rp.fortrust.ro&redirect_uri=https%3A%2F%2Fdwallet.fortrust.ro%2Foidc%2Fdemo%2Fcallback%2F&nonce=Gfzw2X3wPx_MljaEwSc6bY3ltChPbiNU&scope=openid%20profile%20eudi_pid&state=sBRKV0gscmTH2_rZ4fcwo91zKvM1eyfM&response_type=vp_token

The flow (end-to-end)

  1. The user taps Sign in β†’ the browser issues GET /oidc/authorize/
  2. ForTrust returns a page with the QR and starts polling /oidc/userinfo/{session_id}/
  3. The user scans the QR with the EUDI wallet (or taps "Open wallet" on the same device)
  4. The wallet posts POST /oidc/response/ carrying the vp_token
  5. ForTrust verifies signature, trust chain and policy, marks the session completed
  6. The browser receives the verdict, renders the claims, and the RP is notified at redirect_uri?code=&state=
  7. The RP calls GET /oidc/userinfo/{session_id}/ β†’ receives the verified claims