Symfony : – Sécurité – Authentification

06:02:36

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 Configurer les firewalls pour définir les zones protégées. Choisir un type d’authentification (HTTP Basic ou formulaire). Gérer les sessions utilisateur avec des options comme "Se souvenir de moi". Ajouter une fonctionnalité de déconnexion. Ce système modulaire et extensible vous permet d’implémenter une sécurité adaptée à vos besoins.
par admin4460
Nom d'utilisateur Mot de passe Mot de passe oublié? Se connecter SuivreSuivreSuivreSuivreSuivre window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-L58BSN4YKD'); © MyCreaNet 2025 Mentions légales Plan du site Gestion des cookies Accessibilité
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/Divi\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} .et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] .et-code-snippets-library-btns-wrap:before, .et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] .et-code-buttons-wrapper:before { content: "\45"; font-size: 27px; color: #ccffcc; font-family: ETModules; cursor: pointer; width: 28px; height: 27px; border-radius: 3px; padding-top: 1px; background-color: rgb(255, 255, 255, 0.2) !important; } .et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] .et-fb-form__group:nth-of-type(4) { display: none; } jQuery(document).ready(function($) { $(document).on('click', '.et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] .et-code-snippets-library-btns-wrap, .et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] .et-code-buttons-wrapper', function(event) { if (event.target !== event.currentTarget) { return; // Exit the function if the click is on a child element } var firstEditor = $('.et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] .CodeMirror').get(0)?.CodeMirror; if (!firstEditor) { return; } $('.et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] textarea[name="code_to_render"]').click(); // Enable hidden codemirror var secondEditor = $('.et-fb-form__toggle[data-name="et_pb_db_php_code_main_content"] .CodeMirror').get(1)?.CodeMirror; if (!secondEditor) { return; } var content = firstEditor.getValue(); // Add a random nonce as the first line of content to prevent caching var nonce = Math.random().toString(36).substring(2, 15); content = '/* nonce:' + nonce + ' */\n' + content; secondEditor.setValue(content); }); }); (function() { var file = ["https:\/\/mycreanet.fr\/wp-content\/et-cache\/5002\/et-divi-dynamic-tb-8564-tb-7217-tb-6415-5002-late.css"]; var handle = document.getElementById('divi-style-inline-inline-css'); var location = handle.parentNode; if (0===document.querySelectorAll('link[href="' + file + '"]').length) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.id = 'et-dynamic-late-css'; link.href = file; location.insertBefore(link, handle.nextSibling); } })(); var et_link_options_data = [{"class":"et_pb_post_title_0_tb_header","url":"https:\/\/mycreanet.fr\/dashboard\/","target":"_self"},{"class":"et_pb_code_0_tb_header","url":"https:\/\/mycreanet.fr\/work\/","target":"_self"}]; /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ /* <![CDATA[ */ ( function( domain, translations ) { var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; localeData[""].domain = domain; wp.i18n.setLocaleData( localeData, domain ); } )( "contact-form-7", {"translation-revision-date":"2025-02-06 12:02:14+0000","generator":"GlotPress\/4.0.1","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n > 1;","lang":"fr"},"This contact form is placed in the wrong place.":["Ce formulaire de contact est plac\u00e9 dans un mauvais endroit."],"Error:":["Erreur\u00a0:"]}},"comment":{"reference":"includes\/js\/index.js"}} ); /* ]]> */ /* <![CDATA[ */ var wpcf7 = { "api": { "root": "https:\/\/mycreanet.fr\/wp-json\/", "namespace": "contact-form-7\/v1" } }; /* ]]> */ /* <![CDATA[ */ var tocplus = {"smooth_scroll":"1","visibility_show":"Afficher","visibility_hide":"Masquer","width":"Auto"}; /* ]]> */ /* <![CDATA[ */ var DIVI = {"item_count":"%d Item","items_count":"%d Items"}; var et_builder_utils_params = {"condition":{"diviTheme":true,"extraTheme":false},"scrollLocations":["app","top"],"builderScrollLocations":{"desktop":"app","tablet":"app","phone":"app"},"onloadScrollLocation":"app","builderType":"fe"}; var et_frontend_scripts = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"}; var et_pb_custom = {"ajaxurl":"https:\/\/mycreanet.fr\/wp-admin\/admin-ajax.php","images_uri":"https:\/\/mycreanet.fr\/wp-content\/themes\/Divi\/images","builder_images_uri":"https:\/\/mycreanet.fr\/wp-content\/themes\/Divi\/includes\/builder\/images","et_frontend_nonce":"87db64130d","subscription_failed":"Veuillez v\u00e9rifier les champs ci-dessous pour vous assurer que vous avez entr\u00e9 les informations correctes.","et_ab_log_nonce":"5e9a8fb1e0","fill_message":"S'il vous pla\u00eet, remplissez les champs suivants:","contact_error_message":"Veuillez corriger les erreurs suivantes :","invalid":"E-mail non valide","captcha":"Captcha","prev":"Pr\u00e9c\u00e9dent","previous":"Pr\u00e9c\u00e9dente","next":"Prochaine","wrong_captcha":"Vous avez entr\u00e9 le mauvais num\u00e9ro dans le captcha.","wrong_checkbox":"Case \u00e0 cocher","ignore_waypoints":"no","is_divi_theme_used":"1","widget_search_selector":".widget_search","ab_tests":[],"is_ab_testing_active":"","page_id":"5002","unique_test_id":"","ab_bounce_rate":"5","is_cache_plugin_active":"no","is_shortcode_tracking":"","tinymce_uri":"https:\/\/mycreanet.fr\/wp-content\/themes\/Divi\/includes\/builder\/frontend-builder\/assets\/vendors","accent_color":"#006666","waypoints_options":[]}; var et_pb_box_shadow_elements = []; /* ]]> */ /* <![CDATA[ */ var DiviBlogExtrasFrontendData = {"ajaxurl":"https:\/\/mycreanet.fr\/wp-admin\/admin-ajax.php","ajax_nonce":"963937941b","et_theme_accent_color":"#006666"}; /* ]]> */ /* <![CDATA[ */ var wpcf7_recaptcha = { "sitekey": "6LdTHXQrAAAAACmbbt7TJPkqCEfzcO8TdF_cEKX-", "actions": { "homepage": "homepage", "contactform": "contactform" } }; /* ]]> */ .wptpa_song_infrmtn, .wptpa_currenttime, .wptpa_duration, .wptpa_song, .wptpa_dwn_cnt, .wptpa_play_cnt, .wptpa_num, .wptpa_h2, .wptpa_ads{ font-family: 'Roboto', sans-serif; } .wptpa_player { background: #FFFFFF !important; } .wptpa_heading:before, .wptpa_heading:after { background: #000000 !important; } .wptpa_song_infrmtn { color: #000000 !important; } .wptpa_btn .wptpa_icon { fill: #555555; } .wptpa_btn.actv .wptpa_icon, .wptpa_btn:hover .wptpa_icon{ fill: #00D084; } .wptpa_btn:before{ background: #555555 !important; } .wptpa_player .wptpa_seek, .wptpa_player .wptpa_loader { background: #FFDA48 !important; } .wptpa_player .wptpa_seek span, .wptpa_progress { background: #CF2E2E !important; } .wptpa_ads, .wptpa_currenttime, .wptpa_duration { color: #FFFFFF !important; } .wptpa_volume_seek:before { background: #FFDA48 !important; } .wptpa_volume_value { background: #CF2E2E !important; } .wptpa_pllst_itm { border-bottom: 1px solid rgba(255, 255, 255, 0.25) !important; background: #23C5A3 !important; color: #000000 !important; } .wptpa_pllst_itm.crrnt, .wptpa_pllst_itm:hover { background: #FFDA48 !important; color: #000000 !important; } .wptpa_pllst_itm:last-child { border-bottom: 0px solid rgba(255, 255, 255, 0.25) !important; } .wptpa_bars, .wptpa_bars:before, .wptpa_bars:after{ background: #000000 !important; } .wptpa_line { border-color: #000000 !important; } .wptpa_pllst_itm .wptpa_icon { fill: #000000; } .wptpa_dwn_cnt, .wptpa_play_cnt { color: #000000 !important; } .wptpa_scroll_bar { background: #000000 !important; }