Aller au contenu principal
Version 0.3Brouillon

Register an Application

Planned - future LuxID Console

Self-service Application registration is on the LuxID roadmap. Today, you submit the fields below to LuxID and LuxID performs the registration. The structure of this page mirrors the future Console UI.

Overview

An Application is how LuxID represents a software product that integrates with it; each Application is registered separately in UAT and Production, with its own credentials and configuration.

Every software product that integrates with LuxID is represented as an Application in LuxID's registry. UAT and Production are completely independent environments - the same Application must be registered separately in each, and each registration has its own credentials and configuration.

Application registration is handled by LuxID. You submit the information described on this page to LuxID, and LuxID creates the Application and returns your Client ID and Client Secret.

For background on the LuxID domain model, see Roles in the ecosystem.

How to request a new client Application

To request a new Application registration in LuxID, submit the following information to LuxID. Required fields gate go-live; optional fields enhance functionality.

Application details (required)

These fields are used on various LuxID pages - the consent screen, the account dashboard, and audit logs.

FieldUsed forExample / constraints
NameApplication display name on consent screen and account dashboard"My awesome app"
LogoVisual identity on consent and account screensSquare logo, .png or .jpeg, min 64x64 px, transparent background allowed. Must work in both light and dark mode
IntegrationProtocol typeOne of OIDC, OAuth2, SAML
Public URLApplication's public landing pagehttps://www.myawesomeapp.com
Redirect URL(s)Where LuxID sends the user after sign-in - one or several, exact match enforcedhttps://private.myawesomeapp.com or mobile schemes like myapp://mobile/callback
Administrative contact(s)Operational / commercial point of contactName + email
Technical contact(s)Engineering point of contactName + email

Redirect URLs are enforced exactly: LuxID will reject any redirect to a URI not on the registered list. Mobile app schemes (custom URI schemes) are supported. Register separate redirect URIs for UAT and Production - they are independent registrations.

Application agreements (optional)

LuxID can track your Application's agreements (Terms and Conditions, Privacy Policy, etc.) and ask the user to accept them at first sign-in. This is optional - if you do not need centralised agreement tracking, skip this section and link to your own T&C / Privacy pages from your application UI instead.

If you opt in, all three fields below are required for every language you want to support. LuxID's UI currently displays agreement prompts in English (EN), French (FR), German (DE), and Luxembourgish (LB).

For each agreement (typically: one T&C entry, one Privacy Policy entry):

FieldUsed forExample
Agreements textThe acceptance text shown above the agreement link, per languageEN: "I agree that I have read and approved the". FR: "Je certifie avoir lu et accepté les". DE: "Ich stimme zu, dass ich folgendes gelesen und akzeptiert habe:". LB: "Ech bestätegen datt ech folgendes gelies an acceptéiert hunn:"
Agreements URL display textThe clickable link label, per language - use the regulator-friendly localised nounEN: "Terms and Conditions" or "Privacy Policy Statement". FR: "Conditions Générales d'Utilisation" or "termes sur la politique en matière de respect de la vie privée". DE: "die Allgemeinen Geschäftsbedingungen" or "die Datenschutzerklärung". LB: "d'Conditions Générales" or "d'Dateschutz-Bestëmmungen"
Agreements URL linkThe actual URL of the agreement page, per languagehttps://www.myawesomeapp.com/terms?lang=EN or https://www.myawesomeapp.com/privacy?lang=FR

LuxID stores the user's acceptance per agreement version and re-prompts on version change. See Privacy and consent.

Shared user claims (optional)

If your Application requests user information, the user is prompted for consent at first sign-in. That information is then injected into the ID Token as claims. Only claims the user consented to share are present.

LuxID supports a subset of the OIDC standard claims (opens in a new tab):

sub (always injected), name, given_name, family_name, email, email_verified, gender, birthdate, phone_number, phone_number_verified, address, updated_at.

For each claim you want to request, specify:

FieldUsed forExample
Wanted user claimsThe list of OIDC standard claims you needname, email, phone_number
User claim essential / optionalPer OIDC Core 1.0 §5.5 (opens in a new tab), whether the claim is essential or optionalname: essential, gender: optional
User claim hint labelOptional per-claim hint shown on the consent screen, explaining the restriction or usagephone_number: "MyAwesomeApp is only available for Luxembourg phone numbers"

LuxID reviews and approves each requested claim against data minimisation principles. Requests for sensitive claims (birthdate, address, etc.) require a clearly stated purpose.

Practical note

Request only the claims you will actively use in the first version of your Application. Adding claims after go-live triggers a re-review. At runtime, the scope and claims parameters in your authorisation request can only narrow the approved set - you cannot request claims outside it.

Shared technical claims (optional)

Technical claims carry application-specific data into the token without a user consent prompt. They are invisible to the user. Use cases include internal correlation IDs, partner-side flags, and migration shims.

FieldUsed forExample
Wanted technical claimsThe list of custom technical claim namesCustom per Application

Notes:

  • All technical claims are always optional - returned only if a value has been set on the Subscription.
  • New technical claim definitions require LuxID team review and approval before activation.
  • For Partners migrating from legacy PostID: the legacy technical claims you used (such as entityId) are still supported but renamed in LuxID. Coordinate the renaming map with LuxID during migration.

Technical claim values are read and written via the Partner API (PUT/DELETE on /subscribers/{subscriberExtId}/claims/{claimName}).

Access rules (optional)

Access Rules are configured under the Access Rules area for the Application, with three sibling panels - any combination of them can be enabled per Application:

  • Auth requirements - the minimum auth_level the user must reach.
  • Guard rule - a condition evaluated before the consent and terms screen.
  • User rule - a condition evaluated after the user has accepted the consent screen.

All three are optional. Applications without any Access Rule entries accept any authenticated user.

Auth requirements

The minimum auth_level LuxID requires before completing the sign-in to your Application. LuxID assigns every completed authentication a numeric auth_level reflecting the strength of the factors presented - this is LuxID's own classification scale; see Authentication levels for the scale values and their informal comparison with eIDAS strength tiers.

The confirmed scale:

auth_levelAuthentication methodImplementation status
0Unauthenticated (no minimum)Available as a minimum setting
1Kerberos / loginlessNot implemented in LuxID
2Password onlyImplemented
3Password + OTP via SMS / voiceImplemented
4Password + TOTP (authenticator app)Implemented
6MFA fingerprintNot implemented in LuxID
8Passkey (WebAuthn / FIDO2)Implemented
9LuxTrustImplemented

Levels 1 and 6 are reserved in the scale but not currently implemented in LuxID.

The Console UI presents these as labelled options rather than raw integers. The numeric value is recorded against each authentication event for audit and analytics, and is also held against the Application in the two configuration fields below.

Default minimum auth_level - the static minimum auth_level any user must achieve to sign in to this Application. If the user's current session was established at a lower level, LuxID steps them up before completing the authorisation. Example: a banking Application sets its default minimum to 9 to force LuxTrust for every sign-in.

Per-action escalation rules - step-up rules attached to specific operations within the Application. Each rule maps a named action to a minimum auth_level. The default minimum still applies to the initial sign-in; per-action rules trigger when your Application explicitly requests step-up at runtime. Example: a payment portal sets the default minimum to 3 (password + OTP for everyday access) plus a per-action rule approve_transfer = 9 (LuxTrust required at the moment of the payment). This keeps everyday sign-in frictionless while enforcing strong authentication only at high-risk moments.

Runtime interaction with acr_values. At runtime you can also request a minimum via the acr_values parameter on the authorisation request. The effective minimum is the higher of the Application's configured default minimum and any acr_values value in the request. You cannot use acr_values to bypass the configured minimum.

Guard rule

A condition evaluated before the consent and terms screen. If the user fails the Guard rule, they are blocked immediately and never see the claim list - the rejection is invisible-by-design. Use this when eligibility must be checked before exposing anything about the Application to the user (for example, "only allow sign-in from the corporate IP range", "only allow phone numbers from a given country").

A Guard rule is built from:

  • Base rules - atomic conditions. Examples available out of the box:
    • minimumAge - user must be older than a specified age (based on the birthdate held in LuxID)
    • ipAddressEquals - user must connect from a specified IP address
    • phoneNumberCountry - user must have a phone number of a specified country
    • Group-membership, has-LuxTrust, phone-number-validated, and similar base rules are also supported.
  • Composing rules - combine base rules with boolean operators:
    • anyOf - logical OR
    • allOf - logical AND
  • A worked example: anyOf of [phoneNumberCountry: LU validated, has LuxTrust, member of the VIP Group].

Requesting additional base rules beyond the available catalogue is possible but subject to LuxID team review and timing.

Custom error message (Optional) - for the Guard rule, you can provide a custom error message shown to the blocked user. Use this to explain why access was denied and what the user can do next. Example: "This service is only available to Luxembourg residents. If you have moved, please update your address at https://account.luxid.lu/ (opens in a new tab)."

User rule

A condition evaluated after the user has accepted the consent screen. Suitable for finer-grained gating once the user has agreed to share their data with the Application - for example, "the consenting user must be a member of the VIP Group, otherwise show an explanatory error". The User rule uses the same base + composing primitives as the Guard rule, and also supports a custom error message.

For the conceptual model behind Access Rules, see Roles in the ecosystem and Learn the Basics / Authorisation.

Application lifecycle states

Applications can be in one of three states:

StateBehaviour
ActiveAuthentication flows proceed normally.
SuspendedNew authentication attempts are blocked. Existing sessions are not terminated. LuxID returns an error to the user. Use during incident response.
DecommissionedAll flows permanently blocked. Application cannot be reactivated. Use when a product is retired.

To change the state of an Application, contact LuxID or use the Status control in the Console Application overview panel if available. Suspension and decommissioning are immediate.

Next steps

Mise à jour le 2026-07-02