DIIAGE: Prépa session 19/01/2018
This commit is contained in:
parent
1b1f48a0e3
commit
bcb396d40c
|
@ -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
|
|
@ -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)
|
|
@ -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 <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.
|
|
@ -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
|
Loading…
Reference in New Issue