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 ForTrustClick β 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.
sha256:<wallet pairwise_sub> Β· same value across all 3 steps
Sign mandate
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.
Premium access
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.
Verify on-site
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.
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)
- The user taps Sign in β the browser issues
GET /oidc/authorize/ - ForTrust returns a page with the QR and starts polling
/oidc/userinfo/{session_id}/ - The user scans the QR with the EUDI wallet (or taps "Open wallet" on the same device)
- The wallet posts
POST /oidc/response/carrying thevp_token - ForTrust verifies signature, trust chain and policy, marks the session
completed - The browser receives the verdict, renders the claims, and the RP is notified at
redirect_uri?code=&state= - The RP calls
GET /oidc/userinfo/{session_id}/β receives the verified claims