veilletech.fr
22 oct. Feed du jour
#07 SYMFONY Article

Symfony 8.2 : signer les messages par transport

Signez au transport : le message se vérifie avant d'être lu.

Symfony 8.2 déplace la signature des messages Messenger du handler vers le transport : tout message non signé est refusé avant d'être lu. Elle permet aussi de faire tourner les secrets de signature sans toucher à kernel.secret, via des listes où le premier secret signe et tous vérifient. À activer sur un transport sans message en attente.

3 min de lectureavancévidéo 1:18
Partager
Sommaire5 sections
  1. Ce qui change
  2. Les contraintes
  3. Faire tourner les secrets
  4. Comment s'y prendre
  5. À retenir

Ce qui change

Symfony 7.4 avait ajouté la signature des messages dans Messenger : un message forgé et glissé dans une file ne déclenche plus un handler sensible, comme ceux qui lancent des commandes ou des processus. Mais elle se réglait par handler (#[AsMessageHandler(sign: true)]), si bien que Symfony devait lire le type du message avant de savoir si une signature était exigée : lire une donnée non vérifiée et charger la classe qu'elle nomme.

Symfony 8.2 fait passer la signature au transport, avec une option sign :

Les contraintes

Faire tourner les secrets

Changer kernel.secret a des effets en cascade : les cookies remember-me déconnectent leurs utilisateurs, les URI signées et les liens de connexion déjà envoyés cessent de marcher, les messages signés en attente sont refusés, et les identifiants produits par Uuid47Transformer changent sans qu'on puisse les faire tourner.

Symfony 8.2 garde kernel.secret comme secret stable de l'application et donne à chaque fonctionnalité qui signe sa propre option, qui accepte une liste : le premier secret signe les nouvelles données, tous les secrets de la liste vérifient. Par défaut, ces options valent kernel.secret : rien ne change tant qu'on ne configure rien. Les messages sont resignés à chaque nouvelle tentative et les cookies remember-me à chaque connexion, ils passent donc d'eux-mêmes au nouveau secret.

Comment s'y prendre

  1. Laisser les files se vider, puis activer sign sur les transports concernés et sur leur transport d'échec.
  2. Router vers un transport signataire les RunCommandMessage, RunProcessMessage et ServiceCallMessage asynchrones.
  3. Pour une rotation : nouveau secret en tête de liste, ancien derrière, retiré quand les liens et URI signés avec lui ont expiré.

Source : Symfony, 21 octobre 2026. Source en anglais.