Dev back-end
Project server d'API
Le serveur
- Technologie: libre
- Port: 1337
- Protocol: HTTP
- Type d'API: REST
Service
Description du service via Postman :
Un environnement de développement DOIT comprendre la possibilité d'utiliser un débogueur.
Voir les fichiers README.md des projets précédents pour configurer le celui de VSCode
- Le débogueur (debugger) est un outil permettant d'interrompre un
programme en cours d'exécution,
et d'inspecter voire de modifier les valeurs.
- On manipule généralement le débogueur via l'environnement de
développement intégré (EDI), par
ex. VSCode, IntelliJ, Eclipse. Il existe aussi des interfaces en ligne de commande qui peuvent
être utiliser pour l'automatisation ou le développement d'outillage supplémentaire.
- On place générale un "breakpoint" pour indiquer la ligne où on
souhaite une interruption en
cliquant dans la goutière gauche du code source.
- Il est nécessaire de lancer le programme en mode debug. Cette procédure varie selon les
programmes et les EDI. Chercher dans la documentation du langage et de l'EDI.
Persistance des identifiants
https://questionsecu.fr/hachez-salez-poivrez/
- Hasher (bcrypt)
- pour empêcher le vol de mot de passe clair
- Saler individuellement avec une valeur associée à chaque utilisateur
- pour empêcher le
bruteforce précalculé
- Poivrer avec une valeur secrète globale
- pour donner du fil à retordre au pirate
- Exercice: Lier une base de données (MySQL ou PostGre) et créer une table
user(id, login,
password)
- Exercice: Modifier la fonction d'inscription pour inscrire l'utilisateur en base de donnée en
sécurisant son mot de passe
- Exercice: Modifier la fonction de connexion pour vérifier les données depuis la base de
données
Utilisation d'un jeton de session
Mise en place
- Créer une table
token(id, id_user, expiration)
- Créer une fonction
createToken(user:User, durationInMinutes:Float):String
qui
enregistre en base un jeton pour l'utilisateur
- Créer une fonction
fromToken(token:String):User
qui retrouve en base l'utilisateur
associé à un jeton
- Modifier la fonction de connexion pour créer et transmettre un jeton en cookie de session
Persister les données de jeu
- Créer une colonne
data
dans la table user
- Créer un service
/save
qui nécessite le jeton de session en cookie et prends du
JSON en body.
- Créer un service
/load
qui nécessite le jeton de session en cookie et retourne du
JSON en body.
- Modifier tous vos services pour retourner des codes HTTP adaptés
- 200 (ok),
- 400 (expected values were not provided or wrongly typed),
- 401 (not authenticated, missing session token, token expired),
- 403 (authenticated but wrong permission),
- 500 (unexpected error)
Ouvrir un canal websocket
Faire un chat
- Ajouter un endpoint /ws qui accepte les connexions websocket.
- Créer un client en page web.
- Modifier le code serveur pour qu'il renvoie tous les messages à tous les utilisateurs connects.
Sécuriser le chat
- Ajouter un endpoint authentifié
/wsTicket
qui créer un ticket, l'enregistre en mémoire et le retourne en réponse.
- Le ticket est un jeton unique, il est généré aléatoirement, et est associé à un
utilisateur.
- Stocker le ticket en mémoire (pas en BDD).
- Modifier le handler du serveur websocket pour fermer la connexion si le premier message n'est pas un ticket valide.
- Si le ticket est valide, autoriser les autres messages et détruire le ticket.
- Le message du ticket ne devra pas être envoyé aux autres connectés.
- Si le premier message n'est pas un ticket valide, renvoyer le message "Ticket erroné, obtenir un autre ticket auprès du serveur"
- Obtenir un ticket via Postman et envoyer ce ticket comme premier message pour se connecter.