formations/diiage/C3-2_Sécurité_SI/20180119_Authentification/tp.md

44 lines
2.0 KiB
Markdown
Raw Normal View History

2018-01-17 22:58:53 +01:00
# TP - Implémentation de l'algorithme de génération d'un JWT en NodeJS
## Objectifs
Implémenter **avec la librairie standard** (pas d'installation de modules supplémentaires) de NodeJS un algorithme permettant de générer un [JWT](https://jwt.io/introduction/) valide.
## Environnement technique
- NodeJS LTS (v8.9.4)
## Critères d'évaluation du résultat
| Critères | Bonus |
|----------|-------|
| Le script ne contient pas d'erreur de syntaxe. ||
| Le code est commenté. ||
| Soit un objet et un secret défini préalablement, le script doit afficher sur la sortie standard un JWS valide, vérifiable via [l'outil en ligne de débuggage](https://jwt.io/#debugger) | Le secret et les attributs à encoder dans le JWT sont passable par arguments au script. ||
<div style="page-break-after:always"></div>
### Super bonus (pour les plus rapides/motivés)
Implémenter en installant le module [express](http://expressjs.com/en/starter/installing.html) et [body-parser](https://github.com/expressjs/body-parser) une micro-application web servant les routes suivantes:
#### GET /login
Affiche une simple page avec un formulaire de login/mot de passe. Ceux ci peuvent être en dur dans le code de l'application.
#### POST /login
Route recevant les paramètres `username` et `password` du formulaire précédent et générant un JWT avec les informations d'identification de l'utilisateur (un simple attribut `username` dans le `payload` est suffisant). Le JWT doit être affiché dans la page de réponse.
#### GET /profile?jwt={token}
Route affichant les éléments encodés dans le JWT passé en paramètre. L'absence de JWT valide devrait provoquer des erreurs 401/403 suivant les cas.
## Ressources documentaires
- [Documentation JWT](https://jwt.io/introduction/)
- [NodeJS LTS pour Windows](https://nodejs.org/en/download/)
- [Créer une application NodeJS avec Visual Studio Code sur Windows](https://code.visualstudio.com/docs/runtimes/nodejs)
- [Module `crypto`](https://nodejs.org/dist/latest-v6.x/docs/api/crypto.html) de NodeJS