Feature #13707
ouvertDouble authentification
100%
Description
Afin de répondre aux exigences de sécurité de plus en plus fortes, la mise en place d'une double authentification devient incontournable.
Une fois activé, lorsque l'utilisateur se connectera, il recevra un email avec un code. Il devrait renseigner ce code dans l'écran qui s'affichera après sa connexion pour accéder à Silverpeas.
Fichiers
Mis à jour par David Lesimple il y a environ 3 ans
Si la plateforme est accessible en intranet avec du SSO, c'est ce dernier qui devra fonctionner.
De fait, la double authentification ne sera active qu'avec l'authentification manuelle.
Mis à jour par Sebastien Vuillet il y a plus de 2 ans
- Version cible mis à Version 6.5
Mis à jour par David Lesimple il y a plus d'un an
- Lié à Feature #8382: Multi Factor Authentication ajouté
Mis à jour par David Lesimple il y a 9 mois
- Version cible changé de Version 6.5 à Version 6.6
Mis à jour par Sebastien Vuillet il y a 18 jours
- Assigné à mis à Sebastien Vuillet
Mis à jour par Sebastien Vuillet il y a 14 jours
- Statut changé de New à In progress...
Mis à jour par Sebastien Vuillet il y a 13 jours
- % réalisé changé de 0 à 50
Mis à jour par Sebastien Vuillet il y a 12 jours
Mise en place d'une authentification native à deux facteurs dans Silverpeas pour les utilisateurs qui s'authentifient directement avec leur login / mot de passe Silverpeas.
Le second facteur repose sur le standard TOTP (Time-based One-Time Password), compatible notamment avec les applications d'authentification courantes.
La fonctionnalité comprend :
l'activation du 2FA depuis les paramètres du profil ;
l'enrôlement d'un utilisateur avec génération d'un secret TOTP ;
la génération d'un QR Code permettant de configurer l'application d'authentification ;
la validation d'un code TOTP lors de la connexion ;
la possibilité d'utiliser des codes de récupération ;
la gestion des tentatives échouées ;
le verrouillage temporaire après dépassement du nombre maximal de tentatives ;
la désactivation du 2FA ;
le stockage sécurisé des secrets ;
les tests unitaires associés.
Mis à jour par Sebastien Vuillet il y a 12 jours
· Edité
Fonctionnement
Activation du 2FA
Depuis les paramètres du profil utilisateur, l'utilisateur peut activer l'authentification à deux facteurs.
Lors de l'activation :
Silverpeas génère un secret TOTP aléatoire.
Le secret est associé au compte utilisateur.
Un QR Code est généré à partir de l'URI otpauth://.
L'utilisateur scanne ce QR Code avec son application d'authentification.
L'utilisateur saisit le premier code généré par son application.
Silverpeas valide ce code.
Le 2FA est activé si le code est correct.
Des codes de récupération sont générés.
Le QR Code est uniquement destiné à l'enrôlement. Il n'est pas affiché comme mécanisme de connexion ultérieure.
QR Code
Le QR Code contient une URI standard :
otpauth://totp/<issuer>?secret=<secret>&issuer=<issuer>&algorithm=SHA1&digits=6&period=30
Le nom affiché dans l'application d'authentification est basé sur le nom de l'application Silverpeas.
Le nom de l'application est configurable.
Connexion avec 2FA activé
Lorsqu'un utilisateur ayant activé le 2FA saisit correctement son login et son mot de passe :
Login / mot de passe
│
▼
Authentification OK
│
▼
2FA activé ?
│
oui
│
▼
Écran de saisie du code TOTP
│
▼
Validation du code
│
┌────┴────┐
│ │
valide invalide
│ │
▼ ▼
Connexion tentative
échouée
Le mot de passe seul ne permet donc pas de terminer l'authentification lorsque le 2FA est activé.
Validation TOTP
L'implémentation utilise le mécanisme TOTP standard :
algorithme : HMAC-SHA1 ;
nombre de chiffres : 6 par défaut ;
période : 30 secondes par défaut ;
fenêtre de validation : 1 période avant / après par défaut ;
secret généré aléatoirement ;
encodage du secret : Base32.
L'implémentation TOTP est réalisée directement avec les API cryptographiques du JDK.
Aucune bibliothèque TOTP externe n'est nécessaire.
La génération et la validation sont implémentées dans :
org.silverpeas.core.security.totp.TotpServiceImpl
La classe contient également une implémentation Base32 minimale compatible avec le format utilisé par les applications TOTP.
Codes de récupération
L'utilisateur dispose également de codes de récupération permettant de se connecter lorsqu'il n'a pas accès à son application d'authentification.
Depuis l'écran de saisie du TOTP, il peut choisir :
Utiliser un code de récupération
L'écran bascule alors vers la saisie d'un code de récupération.
Il est également possible de revenir au mode TOTP.
Lorsqu'un code de récupération valide est utilisé :
le code est consommé ;
il ne peut plus être réutilisé ;
la date d'utilisation est enregistrée ;
les compteurs de tentatives sont réinitialisés ;
la date de dernière utilisation du 2FA est mise à jour.
Les codes de récupération ne sont pas stockés en clair : leur empreinte SHA-256 est conservée en base.
Protection contre les tentatives répétées
Le mécanisme de 2FA conserve notamment :
le nombre de tentatives échouées ;
la date éventuelle de verrouillage ;
la date de dernière utilisation ;
le statut du 2FA.
La configuration permet de définir le nombre maximal de tentatives.
Une fois ce nombre dépassé, l'accès par 2FA est temporairement bloqué conformément à la configuration.
Un code valide ou l'utilisation d'un code de récupération permet de remettre à zéro le compteur de tentatives.
Désactivation du 2FA
L'utilisateur peut désactiver le 2FA depuis les paramètres de son profil.
La désactivation supprime :
la configuration TOTP ;
les codes de récupération associés.
Le compte revient alors à une authentification classique login / mot de passe.
Stockage des données
Deux tables sont utilisées.
ST_User_2FA
Cette table contient la configuration 2FA de l'utilisateur :
userId
secret
status
createdAt
updatedAt
lastUsedAt
failedAttempts
lockedUntil
Un seul enregistrement est associé à un utilisateur.
Le secret TOTP est chiffré avant d'être enregistré en base.
Il n'est donc pas stocké en clair.
La gestion est réalisée par :
TwoFactorAuthenticationRepository
TwoFactorAuthenticationRepositoryImpl
ST_User_2FA_Recovery
Cette table contient les codes de récupération :
id
userId
hash
used
createdAt
usedAt
Seule l'empreinte du code est stockée.
Un code consommé est marqué :
used = true
et ne peut plus être utilisé.
La gestion est réalisée par :
RecoveryCodeRepository
RecoveryCodeRepositoryImpl
Mis à jour par Sebastien Vuillet il y a 12 jours
· Edité
Chiffrement du secret TOTP
Le secret TOTP constitue une donnée sensible et n'est jamais stocké directement.
Le repository utilise :
ContentEncryptionService
pour :
secret TOTP
│
▼
chiffrement
│
▼
ST_User_2FA.secret
Lors de la lecture :
ST_User_2FA.secret
│
▼
déchiffrement
│
▼
secret TOTP utilisé par le service
Les tests vérifient notamment que la valeur persistée n'est pas le secret en clair.
Mis à jour par Sebastien Vuillet il y a 12 jours
Configuration
Les paramètres TOTP sont configurables dans :
/properties/org/silverpeas/authentication/settings/authenticationSettings.properties
Les principaux paramètres sont :
twoFactorTotpSecretSize
twoFactorTotpDigits
twoFactorTotpPeriod
twoFactorTotpValidationWindow
twoFactorTotpIssuer
twoFactorTotpMaxAttempts
Valeurs par défaut utilisées par l'implémentation TOTP :
Secret : 20 octets
Digits : 6
Period : 30 secondes
Window : 1 période
Issuer : Silverpeas
Le nom de l'application utilisé dans le QR Code est donc configurable via :
twoFactorTotpIssuer
Mis à jour par Sebastien Vuillet il y a 12 jours
· Edité
Résumé
La fonctionnalité fournit désormais un 2FA natif intégré au mécanisme d'authentification Silverpeas, sans dépendance à un fournisseur d'identité externe.
Elle couvre le cycle complet :
┌──────────────┐
│ Paramètres │
│ du profil │
└──────┬───────┘
│
Activation
│
▼
┌──────────────┐
│ Secret TOTP │
│ + QR Code │
└──────┬───────┘
│
Enrôlement
│
▼
┌──────────────┐
│ 2FA activé │
└──────┬───────┘
│
Login + mot de passe
│
▼
┌──────────────┐
│ Saisie TOTP │
└──────┬───────┘
│
┌─────────┴─────────┐
│ │
TOTP OK Code récupération
│ │
└─────────┬─────────┘
│
▼
┌──────────────┐
│ Connexion │
│ Silverpeas │
└──────────────┘
Mis à jour par Sebastien Vuillet il y a 12 jours
- Statut changé de In progress... à Resolved
- % réalisé changé de 50 à 100
PR sur master : https://github.com/Silverpeas/Silverpeas-Core/pull/1468
Mis à jour par Sebastien Vuillet il y a 12 jours
- Version cible changé de Version 6.6 à Version 6.5
Mis à jour par Sebastien Vuillet il y a 11 jours
- Fichier activer.png activer.png ajouté
- Fichier saisie code recuperation.png saisie code recuperation.png ajouté
- Fichier saisie code.png saisie code.png ajouté
- Fichier génération code recupération.png génération code recupération.png ajouté
- Fichier enrolement effectue.png enrolement effectue.png ajouté
- Fichier enrolement.png enrolement.png ajouté
Mis à jour par Sebastien Vuillet il y a 11 jours
· Edité
Après discussion, il faut pouvoir rendre l’enrôlement obligatoire pour les utilisateurs avec connexion.
Mis à jour par Sebastien Vuillet il y a 5 jours
· Edité
Si twoFactorTotpMandatory = false fonctionnement inchangé
Si twoFactorTotpMandatory = true
Mis à jour par Sebastien Vuillet il y a 5 jours
· Edité
- Statut changé de Resolved à In progress...
La possibilité pour les administrateurs de réinitialisé la double authentification d'un utilisateur a été ajouté. Cela permet de forcer le ré-enrôlement de l'utilisateur via le menu QVF sur la fiche de l'utilisateur dans la console d'administration.
Mis à jour par Sebastien Vuillet il y a 4 jours
· Edité
Ajour de la fonctionnalité Trusted Device
La fonctionnalité Trusted Device permet à un utilisateur ayant activé la double authentification TOTP de ne pas avoir à saisir son code TOTP à chaque connexion depuis un appareil déclaré comme fiable.
Configuration
La fonctionnalité est désactivée par défaut.
Deux paramètres permettent de la configurer :
twoFactorTrustedDeviceEnabled = false
twoFactorTrustedDeviceLifetime = 2592000
twoFactorTrustedDeviceEnabled : active ou désactive la fonctionnalité.
twoFactorTrustedDeviceLifetime : durée de validité d'un appareil de confiance, en secondes. La valeur par défaut correspond à 30 jours.
Mis à jour par Sebastien Vuillet il y a 4 jours
· Edité
Silverpeas mobile supporte désormais le TOTP avec ou sans le Trusted device, en plus de l'authentification biométrique.
Ce mécanisme remplace l'ancien : https://tracker.silverpeas.org/issues/14066
Mis à jour par Sebastien Vuillet il y a 4 jours
- Fichier Truted devices feature.png Truted devices feature.png ajouté
Mis à jour par Sebastien Vuillet il y a environ 14 heures
- Fichier code_totp_mobile.png code_totp_mobile.png ajouté
Mis à jour par Sebastien Vuillet il y a environ 4 heures
Points à tester :
- comportement avec le SSO activé
- valider fonctionnement avec domainLDAP
- quid de l'accès anonyme