Projet

Général

Profil

Actions

Feature #13707

ouvert

Double authentification

Feature #13707: Double authentification

Ajouté par Sebastien Vuillet il y a environ 3 ans. Mis à jour il y a environ 4 heures.

Statut:
In progress...
Priorité:
Normal
Assigné à:
Catégorie:
Authentification
Début:
01/09/2023
Echéance:
% réalisé:

100%

Temps estimé:
Livraison en PROD:

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

saisie code recuperation.png (44,1 ko) saisie code recuperation.png Sebastien Vuillet, 24/09/2026 15:59
activer.png (79,5 ko) activer.png Sebastien Vuillet, 24/09/2026 15:59
saisie code.png (55,9 ko) saisie code.png Sebastien Vuillet, 24/09/2026 15:59
génération code recupération.png (117 ko) génération code recupération.png Sebastien Vuillet, 24/09/2026 15:59
enrolement effectue.png (95,5 ko) enrolement effectue.png Sebastien Vuillet, 24/09/2026 15:59
enrolement.png (90,5 ko) enrolement.png Sebastien Vuillet, 24/09/2026 15:59
Truted devices feature.png (49,7 ko) Truted devices feature.png Sebastien Vuillet, 02/10/2026 10:14
code_totp_mobile.png (29,9 ko) code_totp_mobile.png Sebastien Vuillet, 05/10/2026 11:45
saisie code recuperation.png
activer.png
saisie code.png
génération code recupération.png
enrolement effectue.png
enrolement.png
Truted devices feature.png
code_totp_mobile.png

Demandes liées 1 (0 ouverte — 1 fermée)

Lié à Silverpeas Core - Feature #8382: Multi Factor AuthenticationClosed17/11/2016

Actions

Mis à jour par David Lesimple il y a environ 3 ans Actions #1

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 Actions #2

  • Version cible mis à Version 6.5

Mis à jour par David Lesimple il y a plus d'un an Actions #4

Mis à jour par David Lesimple il y a 9 mois Actions #6

  • Version cible changé de Version 6.5 à Version 6.6

Mis à jour par Sebastien Vuillet il y a 18 jours Actions #7

  • Assigné à mis à Sebastien Vuillet

Mis à jour par Sebastien Vuillet il y a 14 jours Actions #8

  • Statut changé de New à In progress...

Mis à jour par Sebastien Vuillet il y a 13 jours Actions #9

  • % réalisé changé de 0 à 50

Mis à jour par Sebastien Vuillet il y a 12 jours Actions #10

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é Actions #11

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é Actions #12

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 Actions #13

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é Actions #14

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 Actions #15

  • Statut changé de In progress... à Resolved
  • % réalisé changé de 50 à 100

Mis à jour par Sebastien Vuillet il y a 12 jours Actions #16

  • Version cible changé de Version 6.6 à Version 6.5

Mis à jour par Sebastien Vuillet il y a 11 jours · Edité Actions #18

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é Actions #19

Si twoFactorTotpMandatory = false fonctionnement inchangé
Si twoFactorTotpMandatory = true

Login / mot de passe
        │
        ▼
Mot de passe valide
        │
        ├── 2FA configuré ──────► demande code TOTP ──► Silverpeas
        │
        └── 2FA non configuré
                    │
                    ▼
          Écran d'enrôlement obligatoire
                    │
                    ├── QR Code
                    ├── saisie du code TOTP
                    └── validation
                            │
                            ▼
                    génération des codes
                    de récupération
                            │
                            ▼
                       Silverpeas

Mis à jour par Sebastien Vuillet il y a 5 jours · Edité Actions #20

  • 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é Actions #21

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é Actions #22

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 environ 4 heures Actions #25

Points à tester :

- comportement avec le SSO activé
- valider fonctionnement avec domainLDAP
- quid de l'accès anonyme

Actions

Formats disponibles : PDF Atom