Nouveau dans Symfony 8.2 (en développement). Le mode sudo dit quand l'utilisateur a prouvé son identité. Une banque veut aussi savoir comment : un mot de passe suffit pour consulter un solde, pas pour vider le compte. Symfony 8.2 retient désormais sur le jeton chaque méthode d'authentification prouvée pendant la session, et l'heure de son dernier usage.
Le jeton se souvient de la méthode
Chaque authenticator le dit par un badge sur le passeport, avec les noms de la RFC 8176, rangés dans AuthenticationMethod :
return new Passport( new UserBadge($identifiant), new CustomCredentials($verifier, $code), [new AuthenticationMethodBadge(AuthenticationMethod::SMS)], );
form_login, json_login et http_basic le font déjà, avec AuthenticationMethod::PASSWORD. Quand le même utilisateur s'authentifie une seconde fois, Symfony ajoute la nouvelle preuve aux anciennes :
$token->getAuthenticationProofs(); // ['pwd' => 1792300000, 'sms' => 1792300060]
La méthode en clé, l'horodatage Unix de son dernier usage en valeur. Un voter n'a plus qu'à regarder.
À faire
La banque d'Ada (ada / lovelace) a une connexion par mot de passe, une page /verification qui envoie un code par SMS (le faux opérateur envoie toujours 314159), et des virements ouverts à toute session connectée. /comptes affiche les preuves de la session : vous verrez la vôtre apparaître.
CodeSmsAuthenticatortraite le formulaire du code. Il vérifie le code de l'utilisateur déjà connecté et dit qu'il s'est authentifié par SMS. Sans mot de passe donné avant, un code ne connecte personne.- Déclarez-le sur le pare-feu
main, à côté deform_login. CodeSmsRecentVoteraccordeCODE_SMS_RECENTquand le jeton porte une preuve SMS de moins de cinq minutes.- Les virements demandent
CODE_SMS_RECENT. Le reste du compte se contente du mot de passe.
Pour l'instant, Ada qui n'a pas saisi de code reçoit un 403 : l'exercice suivant la renverra vers le formulaire du code.