Symfony : – Sécurité – Authentification

Symfony propose un système d’authentification flexible, basé sur les concepts de pare-feu, authentification HTTP et authentification par formulaire. Ce système permet de sécuriser les zones de votre application et de gérer les connexions des utilisateurs.

Pare-feu

Définition

Un pare-feu définit les zones de l’application soumises au système de sécurité. Il agit comme une barrière pour filtrer les requêtes, en fonction de critères tels que les chemins ou les noms de domaine.

Configuration de Base

Exemple de pare-feu protégeant toutes les requêtes :

# config/packages/security.yaml
security:
  firewalls:
    mon_pare_feu:
      pattern: ^/

Ici, toutes les requêtes passant par l’URL / ou ses sous-routes sont protégées.

Pare-feu pour un sous-domaine

Vous pouvez restreindre l’accès par domaine en combinant pattern et host :

firewalls:
  mon_pare_feu:
    pattern: ^/
    host: ma-section\.example\.com
    http_basic: ~

Pare-feu pour les ressources statiques

Pour laisser les ressources comme les images ou les scripts accessibles sans authentification, définissez un pare-feu dédié :

firewalls:
  dev:
    pattern: ^/(_(profiler|wdt)|css|images|js)/
    security: false

Authentification HTTP

L’authentification HTTP Basic est une méthode simple et rapide pour protéger une application.

Exemple de Configuration

security:
  providers:
    mes_utilisateurs:
      memory:
        users:
          user: { password: userpass, roles: ['ROLE_USER'] }

  firewalls:
    mon_pare_feu:
      pattern: ^/
      http_basic:
        realm: "Accès sécurisé"

Lorsqu’une requête est effectuée, un popup de connexion HTTP apparaît, demandant les identifiants.

Authentification par Formulaire

L’authentification via un formulaire est la méthode la plus utilisée dans les applications web.

Configuration

security:
  providers:
    mes_utilisateurs:
      memory:
        users:
          user: { password: userpass, roles: ['ROLE_USER'] }

  firewalls:
    mon_pare_feu:
      pattern: ^/
      form_login: ~

Création des Routes

Ajoutez les routes nécessaires :

# config/routes.yaml
login_check:
  path: /login_check

La route /login_check est utilisée pour soumettre les informations d’identification.

Contrôleur pour la Page de Connexion

Créez une action pour afficher le formulaire de connexion :

<?php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;

class LoginController extends AbstractController
{
    #[Route('/login', name: 'login')]
    public function index(AuthenticationUtils $auth): Response
    {
        $erreur = $auth->getLastAuthenticationError();
        return $this->render('login/index.html.twig', ['erreur' => $erreur]);
    }
}

Template Twig

Le formulaire de connexion ressemble à ceci :

{% extends 'base.html.twig' %}

{% block body %}
    {% if erreur %}
        <div>{{ erreur.message }}</div>
    {% endif %}

    <form action="{{ path('login_check') }}" method="post">
        <label>Identifiant :</label>
        <input type="text" name="_username" />
        <br />

        <label>Mot de passe :</label>
        <input type="password" name="_password" />
        <br />

        <button type="submit">Connexion</button>
    </form>
{% endblock %}

Connexion Automatique des Utilisateurs

Ajoutez une case à cocher « Se souvenir de moi » pour prolonger l’authentification via un cookie.

Configuration

firewalls:
  mon_pare_feu:
    pattern: ^/
    form_login: ~
    remember_me:
      key: "%secret%"
      lifetime: 7776000 # 90 jours
      path: /
      domain: ~

Ajoutez un champ checkbox dans le formulaire de connexion :

<label>Se souvenir de moi</label>
<input type="checkbox" name="_remember_me" checked="checked" />

Déconnexion des Utilisateurs

Configuration

Ajoutez une directive logout pour permettre aux utilisateurs de se déconnecter.

firewalls:
  mon_pare_feu:
    pattern: ^/
    form_login: ~
    logout: ~

Définissez une route pour la déconnexion dans le fichier des routes :

# config/routes.yaml
logout:
  path: /logout

Lorsqu’un utilisateur accède à /logout, il est automatiquement déconnecté.

Lien de Déconnexion dans Twig

Ajoutez un lien de déconnexion dans vos templates :

<a href="{{ path('logout') }}">Déconnexion</a>

Résumé des Étapes Clés

  1. Configurer les firewalls pour définir les zones protégées.
  2. Choisir un type d’authentification (HTTP Basic ou formulaire).
  3. Gérer les sessions utilisateur avec des options comme « Se souvenir de moi ».
  4. Ajouter une fonctionnalité de déconnexion.

Ce système modulaire et extensible vous permet d’implémenter une sécurité adaptée à vos besoins.

Symfony : – Sécurité

La sécurité est une préoccupation essentielle lors du développement d’applications web, particulièrement lorsqu’il s’agit de gérer des espaces...

Sites Ressources e-Plus Pour Laravel 11

1. Packagist Description : Le principal dépôt de packages PHP, avec une catégorie spécifique pour Laravel. Lien : https://packagist.org Ressources :...