Plusieurs pare-feu améliorent la sécurité dans Symfony 5.4
P粉952365143
2023-08-26 16:14:30
<p>J'essaie de séparer l'authentification de l'utilisateur de celle de l'administrateur. </p>
<p>J'ai donc créé 2 pare-feu et 2 contrôles d'accès différents. </p>
<p>Mon fichier security.yaml est le suivant :</p>
<pre class="brush:php;toolbar:false;">enable_authenticator_manager : true
mot de passe_hashers :
SymfonyComponentSecurityCoreUserPasswordAuthenticatedUserInterface : 'auto'
fournisseurs:
authentification_propriétaire :
entité:
classe : AppEntityMerchantOwner
propriété : adressee-mail
Authentification d'utilisateur:
entité:
classe : AppEntityUserUser
propriété : adressee-mail
pare-feu :
développeur :
modèle : ^/(_(profiler|wdt)|css|images|js)/
sécurité : faux
utilisateur:
paresseux : vrai
modèle : ^/admin/login/
fournisseur : user_authentication
user_checker : AppSecurityAuthentificableModelChecker
formulaire_login :
fournisseur : user_authentication
default_target_path : app.dashboard.index
use_referer : vrai
use_forward : faux
chemin_de_connexion : app.authorization.admin_login
check_path : app.authorization.admin_login
paramètre_nom_utilisateur : connexion[emailAddress]
paramètre_mot de passe : connexion[mot de passe]
Se déconnecter:
chemin : app.authorization.logout
cible : app.authorization.admin_login
principal:
paresseux : vrai
modèle : ^/
fournisseur : owner_authentication
user_checker : AppSecurityAuthentificableModelChecker
formulaire_login :
fournisseur : owner_authentication
default_target_path : app.dashboard.index
use_referer : vrai
use_forward : faux
chemin_de_connexion : app.authorization.login
check_path : app.authorization.login
paramètre_nom_utilisateur : connexion[emailAddress]
paramètre_mot de passe : connexion[mot de passe]
Se déconnecter:
chemin : app.authorization.logout
cible : app.authorization.login
contrôle d'accès:
- { chemin : ^/admin/login, rôles : PUBLIC_ACCESS}
- { chemin : ^/login, rôles : PUBLIC_ACCESS }
- { chemin : ^/, rôles : ROLE_USER }</pre>
<p>Tout fonctionne bien sur le pare-feu principal, mais lorsque j'utilise le bouton de soumission du pare-feu utilisateur (administrateur), la page de connexion se rafraîchit et rien ne se passe. Je ne reçois aucune erreur. </p>
<p>** Si j'ajoute une connexion utilisateur (administrateur) sur le pare-feu principal, alors /admin/login fonctionne correctement et l'autre ne fonctionne plus. </p>
<p>Lorsque j'appelle <code>$authenticationUtils->getLastAuthenticationError()</code>, je ne reçois aucune erreur. Mais la validation ne fonctionne pas non plus.</p>
<p>Voici à quoi ressemble mon contrôleur : </p>
<pre class="brush:php;toolbar:false;">fonction publique adminLogin(AuthenticationUtils $authenticationUtils) : réponse
{
si ($this->getUser()) {
return $this->redirectToRoute('app.dashboard.index');
}
$loginForm = $this->createForm(LoginType::class, ['emailAddress' => $authenticationUtils->getLastUsername()]);
return $this->renderForm('app/pages/authorization/admin_login.html.twig', [
'title' => 'Connexion',
'login_form' =>
'erreur' => $authenticationUtils->getLastAuthenticationError()?->getMessageKey(),
]);
}</pré>
<p>C'est le même problème que quelqu'un a eu : https://grafikart.fr/forum/35234, mais je n'ai trouvé aucune solution. </p>
Enfin, j'ai trouvé la réponse et je la posterai ici : https://stackoverflow.com/a/42352112/8003007 Tout ce que j'ai à faire est d'en ajouter un
context: my_context
aux deux pare-feu.Il s'agit d'une option difficile à identifier car elle n'apparaît pas dans la documentation officielle et actuelle de Symfony, uniquement dans les versions précédentes, telles que Symfony 3.4.