février 2025

Mettez en place une authentification JSON dans Symfony

Dans le parcours sur symfony, je n’ai pas parlé de l’authentification via webservice. On va aborder cet aspect dans cet article.

Se connecter via un webservice est intéressant à savoir si on veut développer un front indépendant de type ReactJs ou AngularJS , ou même une application mobile, votre symfony servant de backend. D’abord il faut ajouter quelques ligne dans votre security.yaml:

security.yaml

# config/packages/security.yaml
security:
    # ...

    firewalls:
        main:
            anonymous: lazy
            json_login:
                check_path: /jsonlogin
                username_path: security.credentials.email
                password_path: security.credentials.password
SecurityController : ajoutez ce code dans le controller

    /**
     * @Route("/jsonlogin", name="jsonlogin", methods={"POST"})
     */
    public function jsonlogin(Request $request): Response
    {
        $user = $this->getUser();

        return $this->json([
            'email' => $user->getEmail(),
            'roles' => $user->getRoles(),
        ]);
    }

Utiliser POSTMAN pour envoyer une requête de type POST et dont le content type est application/json vers la route jsonlogin

POSTMAN

Vous devez envoyer un Json, tel que dans l’image. (pas en tant que variable POST)

Le serveur va vous répondre avec un PHPSESSION_ID en retour. Pourquoi pas un Json Web Token? parce que basiquement c’est ce qui se passe. Mais le fonctionnement du PHPSESSION_ID est similaire, vous devez le renvoyer pour accéder à des partie du site web qui ncessitent un authentification.

Une fois la requêtes POST envoyée, si tout se passe bien, on reçoit comme prévu la réponse ci-dessus (voir le code controller plus haut). Et l’image ci-dessous nous montre le PHPSESSION_ID qu’on doit récupérer et sauver pour les reuq^tes subséquentes.

Pour sauver le Cookie (PHPSESSION_ID) cliquez dans POSTMAN le lien Cookie

Une modale va apparaître, vous devez entre le nom de domaine pour ce cookie

Une fois le domaine entré l ePHPSESSION_ID s’affiche

Vous êtes prêt pour faire une requête authentifiée !

Requête vers la page d’ajout de produit

Grâce à notre cookie sauvegardé, on aaccès à al page d’ajout de produit qui a besoin d’être authentifié

Requête GET vers la même page mais en ayant effacé les cookies

Regardez le code HTML, c’est celui de la page de login !

J’espère que ce petit tuto vous a plu et vous a permis de mieux comprendre le mécanisme d’authentification HTTP.

Note concernant la structure du json d’authentification

Dans le security yaml vous donnez un indice à Symfony sur la structure du json envoyé, par défaut la strucutre est:

#structure de base
{
    "email": "admin@gmail.com",
    "password": "123"
}

dans notre cas :
{
    "security": {
        "credentials": {
            "email": "admin@gmail.com",
            "password": "123"
        }
    }
}


# security.yaml
...
            json_login:
                check_path: /jsonlogin
                username_path: security.credentials.email
                password_path: security.credentials.password
...

Développeur apprenez Linux ! Ce n’est pas si difficile que ça.

Voici un liste de commande Linux pour débutant puis une seconde liste un peu plus intermédiaire

Liste de commande pour débutant en Linux

ls : liste les fichier et dossiers
cp : copier un fichier ou un dossier
mv : déplace ou renomme un fichier ou dossier
find : chercher un fichier ou des fichiers ou dossiers
pwd : savoir dans quel répertoire je me trouve actuellemnet
cat : affiche le contenu textuel d'un fichier
tail : affiche les n lignes de fin d'un fichier
head : afficher les n ligne de début d'un fichier
chown : change le propriétaire d'un fichier
chmod : change les droits d'accès d'un fichier
sudo : invoque le mode root (super utilisateur) pour avoir des privilèges élevés
su : change d'utilisateur
tar : archive des fichier, utile pour 
gzip, gunzip : compresse un fichier, généralement on compresse une archive, tar dispose d'un mode d'archivage avec compression
rm : efface un fichier ou un groupe de fichier ou un dossier de façon récursive.
touch : crée un fichier texte
mkdir : crée u fichier ou un répertoire
rmdir : efface un répertoire

Liste de commandes plus intermédiaire pour Linux

grep : permet de chercher les fichiers contenant une chaine de caractères
zcat : comme la commande cat mais pour les fichiers compressés
truncate : coupe le contenu d'un fichier, en spécifiant la position de découpe 0 pour vider le fichier
wget : télécharge une resource (http par exemple)
curl : utilitaire très connu pour des opération de transmission réseau
sed : utilitaire puissant travaillant en colonne, permet de découper verticalement un fichier
awk : un peu comme sed
ps : liste les process en cours d'exécution
jobs : liste les programmes s'exécutant en arrière plan
fg, bg : met un process en avant plan, bg met en arrière plan, ce qui libère le shell pour une autre commande
& : invoque une commande et la mets en arrière plan
> : dirige un contenu texte vers un fichier
>> : ajoute à la fin d'un fichier texte une chaine de texte
xargs : permet de chainer les commandes,la sortie d'une première commande sera en entrée de la seconde commande
| (pipe) : perme de chainer les commande.
adduser : 
chgrp : change le groupe d'appartenance d'un fichier
unlink : efface un fichier comme rm pour un fichier

chattr : rend immodifiable un fichier (même par root)
top : utilitaire montrant les ressources utilisées de l'ordinateur 
mount : permet d'ajouter un disque ou ue clé USB par exemple.
nohup : utilitaire qui permet d'exécuter une commande au long cours même si on quitte le shell
&& : chaine plusieurs commandes en série

Encore d’autres commandes Linux:

scp : copie un fichier
rsync : synchronise deux répertoires

scp text.txt user@12.45.21.111:~/.ssh    copie le fichier vers l'hôte distant et le met dans le répertoire /home/user/.ssh
ps aux : 
crontab : fichier contenant les tâche )à exécuter périodiquement

usermod : modifie les caractéristique d'un utilisateur, comme le rendre sudoable
chsh : changer de shell
groups : afficher les gourpes d'un utilisateur
finger : sert à afficher les informations de utilisateur connecté (comme pinky)

Exercez vous :

voici une liste d’exercices à faire pour vous exercer

  • créer un utilisateur
  • créer un groupe
  • ajouter un utilisateur à un groupe
  • changer le mot de passe d’un utilisateur
  • créer un script shel et l’exécuter
  • jailer un utilisateur
  • effacer un utilisateur
  • créer un utilisateur système (sans login)
  • créer un lien symbolique (raccourcis)