-
Notifications
You must be signed in to change notification settings - Fork 322
Description
Nouvelle fonctionnalité : Authentification via Passkey (WebAuthn/FIDO2)
L’objectif est d’ajouter la possibilité de se connecter avec une passkey (WebAuthn/FIDO2) directement depuis la page de login.
Les passkeys sont des identifiants numériques sécurisés basés sur WebAuthn/FIDO2, utilisables uniquement sur des connexions HTTPS, qui remplacent les mots de passe par une authentification simple, résistante au phishing et ne nécessitant plus de double authentification (2FA).
Détails de mise en œuvre
Gestion des passkeys (dans les préférences utilisateur)
- Ajout d’un nouvel onglet dans l’écran des préférences utilisateur dédié aux passkeys.
- L’utilisateur peut enregistrer un nombre illimité de passkeys.
- Les passkeys doivent être des resident keys (plus conviviales et adaptées à une utilisation multi-appareils).
- Pour chaque passkey enregistrée, afficher :
- Date de création (avec heure précise).
- Date de dernière utilisation (avec heure précise).
- Possibilité de :
- Renommer une passkey pour la distinguer facilement.
- Supprimer une passkey (y compris la dernière restante).
Authentification (sur la page de login)
- Ajout d’un bouton « Se connecter avec une passkey ».
- Ce bouton déclenche le flux WebAuthn/FIDO2 standard :
- Détection des passkeys disponibles sur l’appareil/navigateur.
- Sélection et validation par l’utilisateur (via biométrie, PIN, etc.).
- Vérification côté serveur et ouverture de session si succès.
- En cas d’échec (aucune passkey trouvée, refus utilisateur, erreur navigateur), retour à l’écran de login classique.
Sécurité et contraintes
- Les passkeys doivent être stockées et gérées conformément aux spécifications WebAuthn/FIDO2.
- Les opérations de suppression et de renommage doivent être journalisées pour audit.
- Prévoir une fallback : si aucune passkey n’est disponible ou utilisable, l’utilisateur doit pouvoir se connecter avec son mot de passe habituel.
New Feature: Passkey (WebAuthn/FIDO2) Authentication
The goal is to enable login using a passkey (WebAuthn/FIDO2) directly from the login page.
Passkeys are secure digital credentials based on WebAuthn/FIDO2, usable only over HTTPS connections, replacing passwords with simple, phishing‑resistant authentication that no longer requires two‑factor authentication (2FA).
Implementation Details
Passkey Management (in user preferences)
- Add a new tab in the user preferences screen dedicated to passkeys.
- Users can register an unlimited number of passkeys.
- Passkeys should be resident keys (more user-friendly and suitable for multi-device usage).
- For each registered passkey, display:
- Creation date (with exact time).
- Last usage date (with exact time).
- Allow users to:
- Rename a passkey for easier identification.
- Delete a passkey (including the last one).
Authentication (on login page)
- Add a “Login with passkey” button.
- This button triggers the standard WebAuthn/FIDO2 flow:
- Detect available passkeys on the device/browser.
- User selects and validates (via biometrics, PIN, etc.).
- Server verifies and grants session if successful.
- If the flow fails (no passkey found, user cancels, browser error), fall back to the classic login screen.
Security and Constraints
- Passkeys must be stored and managed according to WebAuthn/FIDO2 specifications.
- Deletion and renaming operations should be logged for audit purposes.
- Fallback required: if no passkey is available, users must still be able to log in with their password.
A new table will be required to store user passkeys
Table: user_passkeys
| Column | Type | Constraints / Notes |
|---|---|---|
id |
INT PK | Unique identifier for the passkey |
user_id |
INT FK | Reference to users.id |
name |
VARCHAR(255) | Custom name for the passkey (editable by the user) |
credential_id |
VARBINARY(255) | Unique identifier of the key (WebAuthn credentialId, stored as base64/hex) |
public_key |
VARBINARY(2048) | Associated public key (stored for server-side verification) |
sign_count |
INT | Usage counter (WebAuthn spec, protects against cloned credentials) |
aaguid |
CHAR(36) | Authenticator Attestation GUID (UUID, identifies the authenticator type) |
created_at |
TIMESTAMP | Date and time of creation |
last_used_at |
TIMESTAMP NULL | Date and time of last usage (NULL if never used) |
Recommended Indexes
(user_id)(credential_id)unique