Aller au contenu principal
Version 0.2Brouillon

LuxID Verified: identity verification

What is LuxID Verified?

LuxID Verified is the identity-attribute verification layer of LuxID: it confirms that the name and date of birth in a user's account have been checked against official documentation.

A standard LuxID Account verifies that the user controls a specific email address. LuxID Verified goes further: it confirms that the name and date of birth stored in the user's LuxID Account have been checked against official documentation.

The identity proofing is carried out by a qualified upstream source (currently LuxTrust). LuxTrust declares a LoA for the proofing - currently Substantial - and LuxID relays that LoA to Partners via the luxid_verification_level claim. The LoA was issued by LuxTrust, not by LuxID.

Partners receive a verified flag, the LoA value declared by the upstream proofing source, and the timestamp of the proofing event - they do not receive information about which proofing source was used.

Identity proofing is currently carried out via LuxTrust, Luxembourg's national PKI-based identity infrastructure operated by LuxTrust S.A. (opens in a new tab). LuxTrust and LuxID are complementary services - LuxTrust is not subordinate to LuxID, and LuxID is not subordinate to LuxTrust. LuxID Verified uses LuxTrust as an identity proofing source; the resulting verified status is held in the user's LuxID Account.

Partners that opt in to LuxID Verified can receive confirmation of a user's verified status in the ID Token.

Note on assurance ceiling. LuxID Verified on its own reaches eIDAS Substantial assurance, not High. The path to eIDAS High is via LuxTrust used as an MFA method (auth_level 9), which carries its own identity proofing as a hardware-backed qualified credential. If your use case requires eIDAS High assurance - for example, regulated financial services or qualified electronic signatures - you should require LuxTrust as the authentication method, not LuxID Verified alone. For those use cases, LuxTrust S.A. (opens in a new tab) provides direct qualified identity services.

Why use LuxID Verified?

Clean, accurate personal data. When a user's name and date of birth have been verified against official documentation, Partners receive data that is accurate and up to date - reducing mismatches, failed name-checks downstream, and support tickets caused by mistyped or self-reported data. This directly supports the GDPR data-accuracy principle (Regulation (EU) 2016/679, Art. 5(1)(d), CELEX:32016R0679 (opens in a new tab)).

No independent proofing pipeline to build. Identity proofing is complex and requires appropriate processes. LuxID Verified delegates this to a trusted source. Partners receive a binary verified claim and metadata - they do not need to implement document scanning, liveness checks, or their own identity matching.

User consent at account level. Users who have completed LuxID Verified consent to share their verification status with Partner applications. This is not a one-time flow per application; the verified status is persistent in the user's LuxID Account and shared with consenting applications.

Future-proofing. LuxID Verified is designed to accommodate additional verification sources in the future, including the European Digital Identity Wallet (EUDI Wallet) as it becomes available in Luxembourg. The proofing source remains internal to LuxID regardless of which source is used; the Partner-facing claims (luxid_verified, luxid_verification_level, luxid_verified_at) stay the same.

Verification process

  1. The user navigates to their LuxID Account (opens in a new tab) and selects "Verify your identity".
  2. LuxID initiates the identity proofing flow internally. The user completes the proofing process, which confirms the name and date of birth on their LuxID Account against official documentation.
  3. LuxID marks the user's account as verified at the Substantial assurance level.
  4. On the user's next sign-in to a Partner application that has opted in, the verification claims are included in the ID Token.

The verification is persistent: the user does not need to re-verify on each sign-in. LuxID stores the verification status and the timestamp of the proofing event.

Token claims

When a user with LuxID Verified signs in to an application that has opted in, the ID Token includes the following custom claims:

ClaimTypeDescription
luxid_verifiedbooleantrue if the user's name and date of birth have been verified. Absent or false if not verified.
luxid_verification_levelstringThe LoA value declared by the upstream proofing source (LuxTrust) and relayed by LuxID. Current value: "substantial".
luxid_verified_atISO 8601 stringTimestamp of when identity proofing was completed.

The identity proofing source is internal to LuxID and is not released to Partners. Partners receive the verified flag, the level reached, and the timestamp - this is sufficient to act on the verification without needing to know the underlying source.

Example ID Token with verification claims

{
"iss": "https://login.luxid.lu",
"sub": "a3f2c1d8-9b4e-4a2f-8c1d-3e7b9a2f1c4d",
"aud": "app_partner_prod",
"iat": 1748477400,
"exp": 1748481000,
"auth_time": 1748477400,
"acr": "urn:luxid:acr:level:substantial",
"amr": ["pwd", "otp"],
"email": "marie.dupont@example.lu",
"email_verified": true,
"name": "Marie Dupont",
"given_name": "Marie",
"family_name": "Dupont",
"luxid_verified": true,
"luxid_verification_level": "substantial",
"luxid_verified_at": "2026-04-15T10:30:00Z"
}

In this example acr: "urn:luxid:acr:level:substantial" reflects Substantial assurance. LuxID Verified contributes to Substantial, not High. High assurance requires LuxTrust as the MFA method (auth_level 9).

luxid_verified: false or absent

If a user has not completed identity verification, the luxid_verified claim is either absent from the token or present as false. The luxid_verification_level and luxid_verified_at claims are absent.

Partners should treat an absent luxid_verified claim the same as luxid_verified: false.

Use cases

Data quality - accurate name and date of birth

Partners whose service depends on accurate personal data benefit from knowing that the name and date of birth in the user's LuxID Account have been verified against official documentation. This is the primary use case for LuxID Verified.

Accurate personal data matters for:

  • GDPR Art. 5(1)(d) compliance - the data-accuracy principle requires that personal data held about users be accurate and kept up to date (Regulation (EU) 2016/679, Art. 5(1)(d) (opens in a new tab)). Relying on verified data from LuxID helps Partners meet this obligation.
  • Fewer downstream errors - mismatched names in booking systems, billing records, or legal documents create support overhead. Verified data reduces these mismatches at source.
  • Smoother onboarding - users do not have to manually enter their name and date of birth; the Partner receives it already verified.

Age verification

Some services require confirmation that a user is above a certain age (18+, 16+, etc.) without needing to know the user's exact birthdate. LuxID Verified enables age bracket claims via the Attribute Enrichment feature. See Attribute enrichment for the age_over_16 and age_over_18 claim format.

Access control for verified users

A Partner may wish to restrict their application to users who have completed identity verification - for example, a service that legally requires confirmed identity before granting access. Using the claims parameter to make luxid_verified essential causes LuxID to fail the authorisation flow for unverified users (see Configuration below), ensuring only verified users reach your application.

Restricting to substantial assurance

Partners that need to confirm a user's identity at eIDAS Substantial can use luxid_verified: true together with luxid_verification_level: "substantial" as part of their access-control logic.

Regulated services requiring eIDAS High assurance (for example, financial services with AML/KYC obligations, qualified electronic signatures, regulated onboarding) are outside LuxID Verified's scope. LuxID Verified reaches Substantial, not High. Those use cases fall under the eIDAS and eIDAS 2 regulatory framework (opens in a new tab) and are typically met via a notified national eID, a qualified trust service provider (in Luxembourg, LuxTrust S.A. (opens in a new tab) is the established provider), or - once available - the EUDI Wallet.

Configuration

Opting in

Identity verification claims are not included by default. To receive luxid_verified and related claims, request that they be added to your Application's Claim Template - contact LuxID with your Application name and the verification claims you need. (Once the planned LuxID Console ships, this will be a self-service toggle under your Application's Claims settings.)

Once added to your Claim Template, verification claims are included in tokens for verified users and absent for unverified users.

Making verification essential

To fail the authorisation flow for users who have not completed identity verification, use the OIDC claims request parameter with essential: true:

GET https://login.luxid.lu/mga/sps/oauth/oauth20/authorize
?client_id=<your_client_id>
&response_type=code
&redirect_uri=<your_callback>
&scope=openid profile email
&claims=%7B%22id_token%22%3A%7B%22luxid_verified%22%3A%7B%22essential%22%3Atrue%7D%7D%7D
&state=<state>
&nonce=<nonce>

The URL-decoded claims parameter value:

{
"id_token": {
"luxid_verified": {
"essential": true
}
}
}

When luxid_verified is requested as essential:

  • If the user is verified: authorisation proceeds normally, token includes luxid_verified: true and related claims.
  • If the user is not verified: LuxID displays a prompt informing the user that identity verification is required for this application and guiding them to complete LuxID Verified. The authorisation flow does not complete until verification is done.

Checking verification level in your Application

After receiving the token, verify that luxid_verified is true and that luxid_verification_level meets your application's requirement. The only value currently issued by LuxID Verified is "substantial":

function requireVerification(idTokenClaims, requiredLevel = 'substantial') {
if (!idTokenClaims.luxid_verified) {
throw new AccessDeniedError('Identity verification required.');
}
if (idTokenClaims.luxid_verification_level !== requiredLevel) {
throw new AccessDeniedError(
`Verification level "${idTokenClaims.luxid_verification_level}" does not meet required level "${requiredLevel}".`
);
}
}

Future: EUDI Wallet

The European Digital Identity Wallet (EUDI Wallet), mandated under the revised eIDAS 2.0 regulation (Regulation (EU) 2024/1183 (opens in a new tab)), will enable EU citizens to present verified identity attributes from a wallet on their mobile device.

LuxID is designed to accommodate the EUDI Wallet as an additional identity proofing source in the future. The proofing source will remain internal to LuxID regardless of which source is used; Partners will continue to receive luxid_verified, luxid_verification_level, and luxid_verified_at exactly as today, with no source information released.

Event: user.identity.verified

When a user completes identity verification, LuxID emits a user.identity.verified event to the Event Hub:

{
"event_type": "user.identity.verified",
"event_id": "evt_1e2f3a4b-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
"occurred_at": "2026-05-22T11:30:00Z",
"application": { "id": "app_partner_prod", "name": "Partner Application" },
"subject": {
"sub": "a3f2c1d8-9b4e-4a2f-8c1d-3e7b9a2f1c4d",
"email": "marie.dupont@example.lu"
},
"context": {},
"data": {
"verification_level": "substantial",
"verified_at": "2026-05-22T11:28:00Z"
}
}

Partners subscribed to this event can update their user records in real time when a user completes verification - for example, to unlock features that require verified identity without waiting for the user's next sign-in.

Security and privacy notes

luxid_verified: true is not irrevocable. LuxID stores the verification status and may update it if the underlying proofing is invalidated. Partners relying on long-lived verification status should define a re-verification period (for example, re-check every 12 months) appropriate to their use case.

GDPR - special category data. Identity verification may involve processing personal data that could constitute special category data under GDPR Article 9 (for example, biometric data collected during liveness checks). This processing is performed by the proofing source, not LuxID or the Partner. Partners receive only the derived luxid_verified boolean and metadata claims, not the underlying identity documents or biometric data.

Data minimisation. Only request luxid_verified claims for applications where identity verification is genuinely required. Do not enable LuxID Verified claims as a default "nice to have" - it increases the sensitivity of the token and requires appropriate handling under GDPR.

luxid_verified_at for audit. Retain the luxid_verified_at timestamp in your audit log if your record-keeping obligations require you to evidence when identity was verified.

LoA provenance. luxid_verification_level: "substantial" is the LoA value declared by LuxTrust (the upstream proofing source) and relayed by LuxID. It corresponds to eIDAS Substantial as defined in Commission Implementing Regulation (EU) 2015/1502 (opens in a new tab). LuxID relays this value; it does not issue it. Partners relying on this claim for compliance purposes should document this provenance in their own compliance records.

Mise à jour le 2026-07-02