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
...

A propos de l'auteur

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *