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

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