Activité Authentification 1

Situation

Vous êtes employé par une entreprise de développement spécialisée dans le logiciel en Java sans expérience dans le développement web. La direction a néanmoins accepté un mandat pour la réalisation d’une application web et le travail est en cours. Vous venez d’être intégré à l’équipe de développement et vous devez maintenant vous familiariser avec le framework Javalin. On vous propose de réaliser un livre d’or, c.-à-d. une page où les visiteurs peuvent laisser un message.

Consigne

Lisez les instructions ci-après et réalisez les tâches demandées.

Objectifs

À la fin de ce travail, vous devez :

  1. Être capable d’expliquer la notion de session pour une application web.
  2. Être capable d’expliquer les notions d’authentification et de contrôle d’accès.
  3. Connaître le double sens du terme «cookie de session» (cookie non permanent ou cookie qui contient l’identifiant de session).
  4. Connaître des moyens de se prémunir contre le détournement d’identifiants de session.
  5. Connaître les risques de divulgation accidentelle d’information.

Résultat attendu

  • Un bref rapport qui décrit votre travail et votre démarche.
  • Le code source de votre application.

Ressources

Documents :

Logiciel :

  • Machine virtuelle de développement
  • Visual Studio Code
  • Le gestionnaire de dépôts GitLab (gitlab.epai-ict.ch)
  • Le système de contrôle de version git
  • Chrome et Firefox, Serveur HTTP Apache

Gestion de session avec Javalin

Dans une application web, le terme “données de session” ou simplement “session” désigne un ensemble de couples nom-valeur stocké dans un data store qui peut se trouver, par exemple, en mémoire, dans une base de données relationnelle (MySQL, MariaDB, PostgreSQL, etc.) ou encore dans une base de données clé-valeur (redis, memcache, etc.). Cet ensemble est identifié par un identifiant de session (session id) qui est stocké du coté client à l’aide d’un cookie. L’identifiant de session est généralement un nombre suffisamment grand (au moins 128 bit) et aléatoire pour résister à une attaque de type force brute.

Javalin crée automatiquement une session dès que l’on appelle la méthode sessionAttribute(String key, Object value) sur l’objet ctx. Par défaut, les sessions de Javalin sont stockée dans la mémoire de travail. Il s’en suit que les sessions en cours sont perdues lorsque le serveur s’arrête.

Les attributs d’une session sont accessible sur l’objet ctx avec la méthode sessionAttribute.

1
2
ctx.sessionAttribute("maChaine", "ma valeur");
ctx.sessionAttribute("monCompteur", 10);

Tâches

  1. Ajouter une table “user(email, pseudo, password)” dans le base de données.
  2. Créer une classe UserDataMapper et une interface UserDirectory qui permet de récupérer une liste d’utilisateur et un utilisateur à partir de son nom, d’ajouter un nouvel utilisateur et de vérifier le mot de passe d’un utilisateur.

  3. Ajouter un menu permettant d’afficher un formulaire d’authentification et un formulaire d’inscription. Le formulaire d’inscription permet à un visiteur de créer un compte. Lors de la création du compte, l’utilisateur est invité à saisir un son adresse de courriel, un pseudonyme qui sera affiché avec les messages et un mot de passe. Le nom d’utilisateur est l’adresse de courriel.

  4. Modifiez l’application de telle sorte que les utilisateurs non authentifié peuvent voir les messages, mais que seuls les utilisateurs authentifiés peuvent en ajoutez de nouveau.