Cette session est réservée aux membres.

Abonnez-vous ou connectez-vous pour regarder toutes les sessions GoSec.

S'abonner Connexion

Cet enregistrement n'est pas encore disponible.

How to Design Single Page Apps with a BFF to make API calls Securely and Prevent Token Hijacking

Télécharger les ressources

À propos de cette session

Paul Figura, architecte en chef chez Indigo Consulting et vétéran de la gestion des identités et des accès, explique pourquoi les applications monopages qui stockent naïvement leurs jetons OAuth dans des cookies sont vulnérables : un script injecté par XSS peut lire ce cookie et rejouer le jeton contre toute API qui fait confiance au même émetteur, aux mêmes portées et à la même audience, scénario fréquent puisque les équipes recopient la configuration d'une autre. Il présente le patron backend-for-frontend (BFF), inventé chez SoundCloud en 2015, où l'application ne reçoit jamais le jeton brut : le BFF complète lui-même le flux OAuth par code d'autorisation, chiffre le jeton dans un cookie opaque ou le fait correspondre à un identifiant de session, et ne le déchiffre qu'au moment de transmettre l'appel à l'API réelle. Une démonstration en direct avec ForgeRock Identity Gateway montre qu'un jeton volé échoue contre les API protégées une fois le BFF en place, alors qu'une API publique reste accessible. Il termine avec des mesures complémentaires : portées OAuth, audiences non partagées, stockage en mémoire volatile, en précisant qu'un BFF seul n'empêche pas un script XSS de rejouer un cookie BFF volé, lacune que la spécification DPoP, non ratifiée, vise à combler.

À retenir

  • Ne jamais stocker un jeton d'accès OAuth brut dans un cookie de navigateur ou le stockage local d'une application monopage; un script injecté par XSS peut le lire et le rejouer contre toute API qui lui fait confiance.
  • Placer un backend-for-frontend (BFF) entre l'application monopage et les API : le laisser compléter le flux OAuth par code d'autorisation et remettre au navigateur un jeton chiffré ou opaque plutôt que le vrai.
  • Toujours valider les jetons du côté de l'API aussi (émetteur, expiration, audience, portées); un BFF ne dispense pas de cette vérification, et un cookie BFF volé peut encore être rejoué à travers le BFF lui-même.
  • Éviter de partager les mêmes portées et audiences OAuth entre API distinctes; copier la configuration d'une autre équipe est la façon la plus courante qu'un jeton volé finisse par donner accès à des points de terminaison réservés aux administrateurs.
  • Suivre l'évolution de la spécification DPoP (pas encore ratifiée), la solution à plus long terme contre le rejeu d'un cookie BFF par le même script malveillant qui l'a volé.

Conférenciers

Paul Figura
Paul Figura
Chief Architect · Indigo Consulting

Hello

Ressources

Mots-clés

Autres sessions GoSec 2023

Aussi de Paul Figura

Sur le même thème

Ce site est enregistré sur wpml.org comme site de développement. Passez à une clé de site de production pour remove this banner.