veilletech.fr
13 oct. Feed du jour
#05 SYMFONY Article

Symfony 8.2 : exiger une clé de sécurité

Savoir quand l'utilisateur s'est connecté ne dit pas comment. Symfony le retient désormais.

Symfony 8.2 enregistre dans le jeton de sécurité les méthodes d'authentification prouvées pendant la session, avec la date de dernier usage de chacune, selon les noms de la RFC 8176. Un voter peut alors réclamer une ré-authentification plus forte, par exemple une clé de sécurité, via requestReAuthentication(), et OpenID Connect transmet la demande par acr_values. Le fournisseur reste libre d'authentifier autrement : la réponse se lit dans oidc_acr.

2 min de lectureavancévidéo 1:27
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Ce que le jeton retient
  3. Réclamer mieux depuis un voter
  4. Avec OpenID Connect
  5. À retenir

Ce qui se passe

Le mode sudo de Symfony 8.2 vérifie quand l'utilisateur a saisi ses identifiants. Cette fonctionnalité, créditée à Nicolas Grekas, ajoute comment : lire ses factures peut se contenter d'un mot de passe, envoyer de l'argent peut exiger une clé de sécurité matérielle.

Ce que le jeton retient

Les jetons de sécurité conservent les méthodes prouvées pendant la session et la date de leur dernier usage.

Réclamer mieux depuis un voter

En mode sudo, refuser IS_AUTHENTICATED_RECENTLY ou IS_AUTHENTICATED_VERY_RECENTLY déclenche une ré-authentification plutôt qu'un 403. La 8.2 l'offre à vos voters : requestReAuthentication() sur l'objet Vote. Une action protégée par un attribut à vous :

PHP
#[IsGranted('IS_SECURITY_KEY_USED')]

lance le point d'entrée de ré-authentification du pare-feu quand l'utilisateur a une clé mais ne s'en est pas servi dans la session. Ce point d'entrée lit SecurityRequestAttributes::RE_AUTHENTICATION_ATTRIBUTE pour savoir quel attribut a été refusé, et peut afficher l'invite de la clé plutôt que le mot de passe. Limite : un seul attribut refusé ; un contrôle qui combine plusieurs rôles renvoie toujours un 403.

Avec OpenID Connect

C'est le fournisseur qui refait l'authentification. Le paramètre acr_values lui indique le niveau voulu, à n'ajouter que si le voter l'a demandé. C'est une demande : le fournisseur peut faire autrement, et la revendication acr obtenue est donc stockée dans l'attribut de jeton oidc_acr, que le voter contrôle. phr et phrh viennent de la spécification OpenID Connect EAP ACR Values ; toute valeur gérée par votre fournisseur convient.

Source : New in Symfony 8.2: Proving Authentication Methods, blog Symfony, 12 octobre 2026.