Activité Authentification 2

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

Démarrage

Récupérer le projet

Lancez Visual Studio Code et connectez-vous à la machine virtuelle de développement. Ouvrez une fenêtre de terminal intégré, rendez-vous dans le répertoire project et lancez la commande ci-après pour récupérer le projet.

1
git clone https://gitlab.epai-ict.ch/m133/activities/guestbook-authentication.git

Lancez la commande code -r guestbook-authentication pour ouvrir le projet dans la fenêtre courante. Ouvrez ensuite une nouvelle fenêtre de terminal intégré et rendez-vous dans le répertoire data pour créez la base de données (supprimez la base de données existante si néssaire).

1
2
3
4
cd data
mysql -u root -pepai123 -e 'drop database guestbook_auth;'
mysql -u root -pepai123 < guestbook_auth.sql
mysql -u root -pepai123 < test-data.sql

Tâches

Effectuez ces tâches l’une après l’autre, ne les commencez pas toutes en même temps :

  1. Implémenter la méthode validate de la classe SqlUserDataMapper pour vérifier le mot de passe non chiffré.

  2. Implémentez le chiffrement du mot de passe en utilisant la classe BCrypt dans la méthode addUser de la classe SqlUserDataMapper.

  3. Modifiez la méthode validate de la classe SqlUserDataMapper pour valider le mot de passe avec la classe BCrypt.

  4. Le chef de projet n’aime pas le fait d’avoir le formulaire de connexion et le formulaire d’inscription sur la même page. Il vous demande de modifier l’application pour que ces formulaires apparaissent sur des pages distinctes, une pour la connexion (accessible depuis le menu) et une pour l’inscription d’un nouvel utilisateur accessible grâce à un lien qui se trouve sur la page de connexion.

  5. Réalisez une page qui permet d’afficher la liste des utilisateurs. L’URI de la page est : /users.

  6. Réalisez une page qui permet d’afficher les détails d’un utilisateur. L’URI de la page d’un utilisateur est : /users/:userid:userid est l’identifiant de l’utilisateur. Par exemple /users/1 est l’URI de la page de l’utilisateur 1 et /users/2 est l’URI de la page de l’utilisateur 2. Avec Javalin, si le chemin du handler est “/user/:userid” alors la valeur de :userid est accessible dans le handler avec la méthode ctx.pathParam(“userid”).

  7. Modifiez la page qui permet d’afficher la liste d’utilisateurs de telle sorte qu’en cliquant sur un item de la liste, la page de détail de l’utilisateur correspondant s’affiche.

  8. Modifiez votre code pour ajouter un bouton qui permet de supprimer l’utilisateur sur la page de détail.

  9. Enfin, modifiez votre code pour que seuls les administrateurs aient accès à ces deux pages (vous devez pour cela modifier la classe User et UserDirectory, ainsi que la table user dans la base de données, pour y ajouter un attribut «rôle»).