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
- UUGHMf72quP7VP3oBU4nfL_9kaqZNcC1
- state (CSRF)
- a70dI3Zh-D-oSRxhWn0OGhjcQtv-0QxZ
- 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=UUGHMf72quP7VP3oBU4nfL_9kaqZNcC1&scope=openid%20profile%20eudi_pid&state=a70dI3Zh-D-oSRxhWn0OGhjcQtv-0QxZ&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