diff --git a/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/help.md b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/help.md new file mode 100644 index 0000000..02810c7 --- /dev/null +++ b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/help.md @@ -0,0 +1,3 @@ +- https://stackoverflow.com/questions/43836153/how-to-revoke-client-certificate +https://jamielinux.com/docs/openssl-certificate-authority/certificate-revocation-lists.html +https://gist.github.com/mtigas/952344 diff --git a/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/prepa.md b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/prepa.md new file mode 100644 index 0000000..851b2f6 --- /dev/null +++ b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/prepa.md @@ -0,0 +1,21 @@ +# Préparation + +## Problématiques + +- Quels mécanismes d'authentification sont aujourd'hui communément utilisés pour sécuriser l'accès aux applications distribuées ? +- Quels mécanismes de protection sont possibles pour mitiger les risques d'attaque sur un point d'authentification ? + +## Bibliographie + +### Authentification + +- [REST API authentication schemes](https://payatu.com/authentication-schemes-rest-api/) +- [OWASP - Authentication Cheat Sheet](https://www.owasp.org/index.php/Authentication_Cheat_Sheet) +- [OAuth2 simplifed](https://aaronparecki.com/oauth-2-simplified/) +- [Getting started with JSON Web Token](https://auth0.com/learn/json-web-tokens/) +- [OpenID Connect explained](https://connect2id.com/learn/openid-connect) +- [Amazon Request Signing Scheme](https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) +- [Fonction de hachage cryptographique](https://fr.wikipedia.org/wiki/Fonction_de_hachage_cryptographique) +- [Hashcash - Preuve de travail](https://fr.wikipedia.org/wiki/Hashcash) +- [Nonce](https://fr.wikipedia.org/wiki/Nonce_(cryptographie)) +- [Authentification via certificat SSL client en NodeJS](https://medium.com/@sevcsik/authentication-using-https-client-certificates-3c9d270e8326) diff --git a/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/qcm.md b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/qcm.md new file mode 100644 index 0000000..3bbbd82 --- /dev/null +++ b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/qcm.md @@ -0,0 +1,58 @@ + + +# Authentification et autorisation: QCM + +- **Nom** +- **Prénom** +- **Classe** +- **Date** + +## Consigne + +Pour chaque question, entourer **la ou les bonnes réponses**. + +**Attention**, certaines questions sont volontairement rédigées sous la forme plurielle. Cela n'implique pas forcément qu'il y a plusieurs bonnes réponses. + +## Questions + +### A. Quels sont les inconvénients liés à l'utilisation de modèle d'authentification HTTP `Basic Auth` pour une API REST ? + +1. Il est nécessaire d'utiliser TLS pour en faire un mécanisme d'authentification sécurisé. +2. Il ne permet pas de mettre en place une politique de rotation des secrets efficaces. +3. Il ne permet pas une bonne "montée en charge" de l'infrastructure. + + +### B. Parmi ces propositions, lesquelles sont valides pour faciliter l'usage de "gestionnaire de mots de passe" dans les applications Web ? + +1. Ne pas empêcher le "copier/coller" dans les champs identifiant/mot de passe d'un formulaire de connexion. +2. Ne pas limiter artificiellement la taille des mots des passe. +3. Ajouter l'attribut "allow-autogen" sur les champs <input type="password" /> + +### C. Le modèle de signature des requêtes d'Amazon Web Services se base notamment sur: + +1. Une fonction de hachage cryptographique appliquées sur une partie des attributs de la requête HTTP +2. Le standard JSON Web Token +3. Un identifiant universellement unique par requête + +### D. Un "nonce" est typiquement utilisé pour protéger les points d'authentification des attaques du type: + +1. Attaque par "homme du milieu" +2. Attaque par "force brute" +3. Attaque par rejeu + +### E. L'utilisation de mécanismes de type "preuve de travail" pour protéger un point d'authentification à pour objectif de: + +1. De miner de la crypto-monnaie pour financer le site +2. De forcer chaque utilisateur à fournir un certain temps CPU pour chaque requête afin d'éviter le "spam" +3. + +### F. Le standard OpenID Connect base ses échanges d'informations sur: + +1. Des requêtes HTTP et des données au format JSON + + +### G. diff --git a/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/tp.md b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/tp.md new file mode 100644 index 0000000..a92dfc4 --- /dev/null +++ b/diiage/C3-2_Sécurité_SI/20180119_Authentification_et_autorisation/tp.md @@ -0,0 +1,43 @@ +# 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. || + +
+ +### 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