Symfony/Security pour PHP : guide complet avec exemples
Symfony/Security est un composant puissant et flexible de l'écosystème Symfony, conçu pour implémenter l'authentification (vérification d'identité) et l'autorisation (vérification des droits d'accès) dans les applications PHP. Il offre aux développeurs une architecture prête à l'emploi pour protéger les routes, gérer les sessions, travailler avec les mots de passe et s'intégrer à divers fournisseurs d'utilisateurs (base de données, LDAP, OAuth).
Pourquoi utiliser cette bibliothèque ? Dans le développement web moderne, la sécurité n'est pas une option, mais une exigence impérative. Symfony/Security vous permet de vous abstraire des tâches répétitives : hachage des mots de passe, création de formulaires de connexion, vérification des rôles et des jetons. Au lieu de réinventer la roue, vous bénéficiez d'un standard industriel utilisé dans des milliers de projets à travers le monde. Le composant s'intègre facilement aussi bien avec le framework Symfony qu'avec d'autres applications PHP via le paquet symfony/security-core.
Les fonctionnalités principales incluent : la prise en charge de plusieurs « pare-feu » (firewalls) pour différentes parties de l'application, un système flexible de fournisseurs d'utilisateurs, une gestion automatique des sessions et des cookies, ainsi qu'une protection intégrée contre les attaques CSRF et le brute-force des mots de passe. La bibliothèque suit le principe de « sécurité par défaut », ce qui en fait un choix idéal pour des projets de toute envergure.
Installation
L'installation se fait via Composer, le gestionnaire de paquets standard pour PHP. Exécutez la commande suivante à la racine de votre projet :
composer require symfony/security-bundle
Si vous utilisez Symfony Flex (recommandé), la recette configurera automatiquement la configuration de base. Pour les projets autonomes (sans framework), installez le noyau :
composer require symfony/security-core symfony/security-http symfony/security-csrf
Démarrage rapide : exemple minimal fonctionnel
Créons une page sécurisée simple. Tout d'abord, assurez-vous d'avoir installé Symfony (version 6.4+). Créons un contrôleur et configurons la sécurité.
Étape 1 : Configuration de security.yaml
# config/packages/security.yaml
security:
enable_authenticator_manager: true
providers:
in_memory:
memory:
users:
admin:
password: '$2y$13$...' # hachage du mot de passe "admin123"
roles: ['ROLE_ADMIN']
firewalls:
main:
lazy: true
provider: in_memory
form_login:
login_path: login
check_path: login
logout:
path: /logout
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
Étape 2 : Contrôleur
// src/Controller/SecurityController.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 SecurityController extends AbstractController
{
#[Route('/login', name: 'login')]
public function login(AuthenticationUtils $authenticationUtils): Response
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', [
'last_username' => $lastUsername,
'error' => $error,
]);
}
#[Route('/admin', name: 'admin')]
public function admin(): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
return new Response('Bienvenue dans le panneau d\'administration !');
}
}
Étape 3 : Template de connexion (Twig)
{# templates/security/login.html.twig #}
{% if error %}
{{ error.mes
Aussi dans la bibliothèque
Recommendations