Aller au contenu

Exercice 05 - Authentification avec clé Api

Vous pouvez faire cet exercice à partir de l'api que vous avez développé à l'exercice précédent ou bien débuter un nouveau projet. Si vous recommencez un api, assurez-vous d'avoir au moins une route qui retourne un résultat et que vous pourrez protéger.

1. Création d'un utilisateur

  • Créer une table utilisateurs dans votre base de données. Vous devez avoir minimalement les champs id, nom, courriel, mot_de_passe et cle_api.
  • Créez une route pour ajouter un nouvel utilisateur.
POST /api/users

// Les informations seront dans le corps de la requête
{
    "nom" : "Mathieu",
    "courriel" : "math@cegepvicto.ca",
    "mot_de_passe" : "123patates"
}
  • Avant de créer l'utilisateur, assurez-vous que tous les champs nécessaire sont présent et que le courriel est unique dans la table. Retournez le bon message d'erreur le cas échéant.
  • Utilisez la méthode que vous souhaitez pour générer la clé api.
  • Le mot de passe doit être hashé avec BCrypt avant d'être sauvegarder dans la base de données.
  • La réponse de la requête doit être formaté comme suit.
{
    "message" : "L'utilisateur a été créé",
    "cle_api" : "123456"
}

2. Intergiciel de validation

  • Créez un intergiciel qui va valider que la clé est présente dans l'entête de la requête existe dans la base de donnée. Vous devez utiliser Authorization.
Authorization : "cle_api 123456"
  • Retournez une erreur si la clé n'est pas présente ou si elle est invalide.

3. Protection d'un route

  • Protégez une de vos routes avec l'intergiciel et testez son fonctionnement.

4. Ajout d'une route pour récupérer la clé

  • Ajoutez une route pour permettre à un utilisateur de récupérer sa clé API s'il la oublié. On peut aussi ajouté un paramêtre dans l'url pour demander d'en générer une nouvelle.
GET /api/users/cle?nouvelle=1

// Les informations seront dans le corps de la requête
{
    "courriel" : "math@cegepvicto.ca",
    "mot_de_passe" : "123patates"
}
  • Validez que le courriel et le mot de passe correspondent.
  • Si le paramêtre nouvelle est présent et égale à 1, générez une nouvelle clé.
  • Retourner la nouvelle clé ou l'ancienne à l'utilisateur.
{
    "cle_api" : "654321"
}