Skip to content

How It Works

IDToken replaces passwords with a cryptographic credential derived from your passport and a mobile app that confirms your identity through face verification.

The service has its own user database. The user enters their user ID — the service maps it to a tokenId and initiates the IDToken authentication.

portal.gov.eu/login

Sign in with IDToken

User ID
|
Authenticate with IDToken

Confirm on your device

Match this code on your IDToken app

847293
Waiting for approval...

Identity Verified

Welcome back, authenticated via VDS

9:41
Thursday, March 19
IDToken Login request from portal.gov.eu
now
IDToken

Confirm this code matches

847293

portal.gov.eu

2:47 remaining

Verifying identity...

Authenticated

Identity verified via VDS credential

Step 1: Get Your IDToken (One-Time Enrollment)

Section titled “Step 1: Get Your IDToken (One-Time Enrollment)”

A user creates their BioSeal — either at an issuance station (a kiosk or operator desk) or directly on their own smartphone — using their passport or national ID card:

  1. The passport or ID card is read via MRZ + NFC (ICAO 9303 chip)
  2. The id3 Face SDK performs liveness detection and matches the user’s face against the document chip photo
  3. The BioSeal Issuance Service generates a VDS (Visible Digital Seal) — a cryptographically signed credential containing the user’s identity data and biometric photo
  4. The VDS is encoded as a QR code displayed on screen (issuance station) or stored directly in the app (smartphone)

If issued at a station, the user opens the IDToken mobile app and scans the QR code. If issued on the smartphone, the VDS is already in the app. In both cases, the app:

  • Verifies the VDS signature locally
  • Performs a face verification (live capture vs. VDS face template) — this ensures the person holding the phone is the rightful owner of the credential, which is essential when the VDS was obtained from an external QR code
  • Generates an ECDSA P-256 key pair in the device’s secure element
  • Registers the public key with the auth server (POST /enroll)

The private key never leaves the device. The server only stores the public key + tokenId binding.

PassportNFC ReadFace MatchBioSeal VDSApp ScanFace MatchEnrolled

Step 2: Register with a Service (One-Time per Service)

Section titled “Step 2: Register with a Service (One-Time per Service)”

Before logging in, the user must trust the service. The website displays a Service VDS QR code — a cryptographically signed credential that identifies the service and declares what identity data it can request.

Service WebsiteAuth ServerMobile App1. GET /service/vds2. Build &sign VDS3. Service VDS (Base45)4. Display QR code”Scan to register”5. User scans QR with IDToken app6. Verify VDS sigShow service details7. User taps “Trust”8. POST /service/register9. StoreService trusted
  1. The service website fetches a Service VDS from the auth server — a signed credential containing the service’s name, URL, logo, and authorized scopes
  2. The website displays the Service VDS as a QR code with a “Scan to register” prompt
  3. The user scans the QR code with the IDToken app
  4. The app verifies the Service VDS signature using the auth server’s public key (from JWKS) and shows a registration screen with the service details and the maximum scopes it can request
  5. The user taps “Trust this service”
  6. The app stores the service locally and registers the binding with the auth server

This is done once per service. The user can review and remove trusted services from the app at any time. At each subsequent login, the user still controls exactly which scopes to share (per-authentication consent).

When a user wants to log into a trusted service:

BrowserAuth ServerMobile App1. Enter tokenId2. GenerateOTP3. FCM Push (OTP)4. WebSocket: OTP347812displayed on screen347812displayed on phone5. User compares OTPs visually6. Face Verifyid3 Face SDK7. ECDSA Signature8. Verify9. Issue JWT10. WebSocket: JWTUser is logged inJWT stored for API calls
  1. The user enters their tokenId on the service website
  2. The auth server generates a 6-digit OTP and stores the session (60-second TTL)
  3. The OTP is pushed to the mobile app via FCM push notification
  4. The OTP is also sent to the browser via WebSocket for display
  5. The user compares the OTP on screen with the one on their phone — this verifies the service is legitimate (mutual authentication)
  6. The user confirms with face verification on their phone (id3 Face SDK, liveness detection + 1:1 match against VDS face template)
  7. The app signs the session with the device’s ECDSA private key and sends it to the server
  8. The server verifies the signature and OTP
  9. The server issues a JWT with the identity claims matching the granted scopes
  10. The JWT is delivered to the browser via WebSocket — the user is logged in

The JWT contains only the identity data the service is allowed to see. The user controls what is shared:

BBar Le Centralwants to verify:Your nameThat you are over 18This service will NOT receive:· Your date of birth· Your nationality· Your document number· Your photoOTP — Compare with your screen347-812expires in 47sDECLINEAPPROVE & SHAREPrivacy Policy

The user can toggle individual scopes on or off before approving. The granted scopes are cryptographically bound to the ECDSA signature — the server cannot inflate them after the user’s biometric approval.

PropertyHow
No passwords to stealIdentity is based on a signed credential + device-bound key, not a memorized secret
Mutual authenticationThe user verifies the service (OTP match), the service verifies the user (ECDSA signature). With Service VDS, both sides present cryptographic credentials.
Phishing-resistantA fake service cannot generate a valid OTP without the server’s HKDF master secret
Replay-proofSessions are single-use, deleted after verification, with a 60-second TTL
Biometric gatingFace verification must pass before the device key can sign — a stolen phone is useless
Privacy-preservingSelective disclosure: services only see what they need, and users approve each disclosure

If a user loses their phone:

  1. An operator revokes the old enrollment (POST /revoke)
  2. The user presents their passport or ID card (at an issuance station or on a new smartphone)
  3. A new VDS is issued, the user re-enrolls with the new phone
  4. No per-service action needed — all services verify the tokenId on each login, so revocation propagates automatically

What’s Different from Passwords, FIDO, and Passkeys?

Section titled “What’s Different from Passwords, FIDO, and Passkeys?”
FeaturePasswordsFIDO/PasskeysIDToken
User database requiredYesYes (public keys)No (key binding only)
Phishing resistanceNoneStrongStrong (mutual OOB)
Identity sourceSelf-declaredSelf-declaredGovernment document
Biometric verificationNoDevice-local1:1 against passport photo
Works across devicesYes (portable)Per-deviceAny device (OOB via phone)
Recovery on device lossPassword resetAccount recoveryPresent document, re-enroll
Selective disclosureNoNoYes (scope-based)
Trust levelNoneNonePKI-backed (eIDAS levels)

IDToken is an Identity Provider — it proves who the user is with government-backed credentials and biometric verification. It does not manage roles, permissions, or access policies. This separation is intentional: organizations already have access management infrastructure, and IDToken is designed to plug into it, not replace it.

The signed JWT issued after authentication is the integration point. It carries verified identity claims (sub, given_name, age_over_18, etc.) that any standard authorization layer can consume:

  • API gateways (Kong, Envoy, AWS API Gateway) verify the JWT and enforce access policies before requests reach your backend
  • RBAC / ABAC systems map the tokenId to local roles and use JWT claims as policy attributes
  • Enterprise SSO — IDToken speaks OIDC and SAML 2.0, so it plugs directly into existing IAM platforms (Microsoft Entra ID, Okta, etc.)
  • Zero Trust architectures (Cloudflare Access, Zscaler) use IDToken as an external OIDC identity source

The user’s scope-based consent acts as a cryptographic ceiling for all authorization decisions — even if your policies grant full access, the JWT only contains the claims the user chose to share.

Learn more: Access Management Integration

  • The VDS Credential — How the Visible Digital Seal works: structure, signature, manifests, and revocation
  • Quick Start — Integrate IDToken into your application with code examples
  • Authentication Flow — Protocol-level detail of each phase, with API request/response formats
  • Security Model — Threat model, cryptographic algorithms, and OTP derivation
  • Trust Architecture — The full PKI governance chain from VDSIC to signing certificate