DIIAGE: Prépa session 19/01/2018

This commit is contained in:
wpetit 2018-01-17 22:58:53 +01:00 committed by Benjamin Bohard
parent 1b1f48a0e3
commit bcb396d40c
4 changed files with 125 additions and 0 deletions

View File

@ -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

View File

@ -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)

View File

@ -0,0 +1,58 @@
<style>
* {
font-size: 0.8em !important;
}
</style>
# 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 &lt;input type="password" /&gt;
### 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.

View File

@ -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. ||
<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