Le Guide API ReST | Marmicode
  • Le Guide API ReST par Marmicode
  • API ReST
    • L'Ecosystème Moderne
    • Le Besoin
    • Re.S.T. : REpresentational State Transfer
    • Les 5 règles et ½ de l’API ReST
    • Le Modèle de Maturité de Richardson
    • H.A.T.E.O.A.S. & Resource Linking
    • Avis Subjectif sur H.A.T.E.O.A.S. et le Semantic Web
    • ReST over HTTP
    • HTTP & CRUD
    • ReSTful donc Stateless
    • Pragmatisme, Idéologie et ReSTafarians
  • Conventions & Bonnes Pratiques
    • Nommage
    • Base URL
    • Media Type
    • Versioning
    • Propriété “id”
    • Polymorphisme
    • Datetime
    • Ressource d'Association
    • Pourquoi Appliquer ces Bonnes Pratiques
    • Zalando ReSTful API Guidelines
  • Les Outils
    • Swagger
    • OpenAPI Visual Editors
    • IDE Plugins
    • Postman
    • Insomnia
    • Fake & Sandbox
    • JSON Generator
    • Pact
  • Sécurité des APIs ReST
    • OWASP Top 10
    • Authentification et Session Management
    • Autorisation et Gestion des Permissions
    • Validation, Canonicalization, Escaping & Sanitization
    • Cookies are EVIL
    • C.O.R.S.
    • C.S.R.F.
    • C.S.R.F. & Media Type
    • C.S.R.F. Mitigation
    • C.S.R.F. & "Resource Linking"
    • J.O.S.E.
      • J.W.K.
      • J.W.S.
      • J.W.E.
    • J.W.T.
      • Description et Fonctionnement de JWT
      • Usages et Avantages
      • Utilisation de JWT pour l’Authentification
      • JWT, Authentification, Sessions et Risques Sécurité
      • Recommandations JWT
    • OAuth 2
      • OAuth 2 Roles
      • OAuth 2 Abstract Flow
      • OAuth 2 Authorization Code Flow
      • OAuth 2 Implicit Flow
      • OAuth 2 Resource Owner Password Credentials Flow
      • OAuth 2 Client Credentials
      • OAuth 2 Registration
      • OAuth 2 Risques & Recommandations
      • OAuth 2 Substitution Attack
    • OpenID Connect
      • Terminologie
      • Quoi de Neuf ?
      • OpenID Connect Flows
      • Que Faire ?
  • Autres Spécifications
    • JSON API
    • H.A.L.
    • JSON LD
    • Les Autres Initiatives
    • So What?
  • Quelques Liens & Ressources
  • Stay Tuned
    • 📝Blog
    • 🐦Twitter
    • 📬Newsletter
Propulsé par GitBook
Sur cette page
  • De quoi avons-nous besoin ?
  • Session management ?
  • Authentification
  • Identification
  • Logout et révocation
  • Mécanismes d’authentification
  • Session Management côté client
  1. Sécurité des APIs ReST

Authentification et Session Management

De quoi avons-nous besoin ?

Session management ?

Nope ! L’API ReST doit être Stateless !

Si des informations liées à la session doivent être maintenues, celles-ci doivent être gérées par le client.

Les données persistées par l’API ReST sont associées à des ressources.

Rien n’interdit l’expiration d’une ressource : GET /carts/1234 => 404 Not Found

Ne schtroumpfez pas !SMURF /smurf-api/sessions/current

Authentification

Idéalement, il nous faudrait un mécanisme d’authentification même si les données de l’API sont publiques.

Identification

L'identification n'est implémentée que si réellement nécessaire.

L’authentification et l’identification sont des notions distinctes. Il est possible d’authentifier un utilisateur sans l’identifier. Il est également possible d’identifier un utilisateur sans l’authentifier mais nous n’aurions aucune garantie de l’identité.

Logout et révocation

Le logout peut provenir d’une autre source que l’utilisateur final.

Les "tokens" d’authentification ne doivent pas être transmis dans l’URL. GET /users/123?token=asdf....

L’authentification "basic-auth" ne doit pas être utilisée.

Les tokens doivent être transmis dans le header Authorization

Authorization: Bearer xxxxxx, Extra yyyyy

Mécanismes d’authentification

Nous parcourerons plus tard les différents mécanismes d’authentification envisageables.

Globalement (modulo quelques étapes), la plupart des mécanismes d’authentification fonctionnent ainsi :

  1. Le service d’authentification fournit un token unique au client.

  2. Le client transmet ce token aux APIs ReST du fournisseur de service.

  3. Le fournisseur de service déduit les autorisations d’accès en fonction de ce token.

Session Management côté client

Le cas le plus complexe est celui où le client est un browser.

Si vous souhaitez persister des données dans le browser afin que l’utilisateur puisse retrouver le même contexte en changeant de fenêtre ou après un refresh :

  • Evitez absolument l’utilisation des cookies ne serait-ce que pour les raisons suivantes :

    • Ce n’est pas leur rôle.

    • Vous ne voulez pas envoyer toutes ces données au backend à chaque requête.

    • Cookies are EVIL !

  • IndexedDB et localStorage sont là pour ça.

  • Problème 😱

    • Jetez un coup d’oeil au contenu de vos storages après logout ou fermeture du browser, vous serez surpris de découvrir ce qu’on y retrouve.

  • Secure Storage

    • en attendant une solution in-the-browser, il est recommandé de chiffrer les données stockées localement avec une clé temporaire et unique pour chaque client transmise par l’API ReST,

PrécédentOWASP Top 10SuivantAutorisation et Gestion des Permissions

Dernière mise à jour il y a 6 ans

L'IndexedDB et le localStorage n’ont pas de notion d’expiration sauf sur Firefox : .

,

ou encore mieux, en stockant la clé via l'API browser webauthn quand celle-ci sera globalement disponible.

https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory/open
https://github.com/jas-/crypt.io
https://developers.google.com/web/updates/2018/05/webauthn