Pools d'utilisateurs, pools d'identités et JWT

Sécurité AWS pour les développeurs

Rahul Singh

Technical Product Manager

Cognito : deux services sous un même nom

Amazon Cognito

  • Identité gérée pour les utilisateurs de votre application
  • Un nom, deux services distincts

Deux questions au-dessus d'une limite en pointillés « Amazon Cognito ». À l'intérieur, deux panneaux bleus côte à côte : un pool d'utilisateurs décrit comme votre annuaire et un pool d'identités décrit comme un courtier d'identifiants. Des lignes partent des deux panneaux vers une boîte orange en pointillés en dessous, indiquant que de nombreuses applications utilisent les deux.

Sécurité AWS pour les développeurs

Cognito : deux services sous un même nom

Amazon Cognito

  • Identité gérée pour les utilisateurs de votre application
  • Un nom, deux services distincts

De quoi avez-vous besoin ?

  • Connexion et profils : pool d'utilisateurs
  • Navigateur ou mobile appelant AWS directement : pool d'identités

Deux questions au-dessus d'une limite en pointillés « Amazon Cognito ». À l'intérieur, deux panneaux bleus côte à côte : un pool d'utilisateurs décrit comme votre annuaire et un pool d'identités décrit comme un courtier d'identifiants. Des lignes partent des deux panneaux vers une boîte orange en pointillés en dessous, indiquant que de nombreuses applications utilisent les deux.

Sécurité AWS pour les développeurs

Un pool d'utilisateurs gère la connexion

Un annuaire d'utilisateurs géré

  • Inscription et connexion
  • Réinitialisation du mot de passe
  • Authentification multifacteur

Flux vertical : un utilisateur d'app se connecte à un pool d'utilisateurs qui détient les mots de passe, et le pool renvoie une boîte contenant un ID token, un access token et un refresh token

Sécurité AWS pour les développeurs

Un pool d'utilisateurs gère la connexion

Un annuaire d'utilisateurs géré

  • Inscription et connexion
  • Réinitialisation du mot de passe
  • Authentification multifacteur

 

En cas de succès, trois jetons

Flux vertical : un utilisateur d'app se connecte à un pool d'utilisateurs qui détient les mots de passe, et le pool renvoie une boîte contenant un ID token, un access token et un refresh token

Sécurité AWS pour les développeurs

Un pool d'utilisateurs gère la connexion

Un annuaire d'utilisateurs géré

  • Inscription et connexion
  • Réinitialisation du mot de passe
  • Authentification multifacteur

 

En cas de succès, trois jetons

  • ID token : qui est l'utilisateur
  • Access token : ce qu'il peut appeler
  • Refresh token : pour en obtenir de nouveaux plus tard

Flux vertical : un utilisateur d'app se connecte à un pool d'utilisateurs qui détient les mots de passe, et le pool renvoie une boîte contenant un ID token, un access token et un refresh token

Sécurité AWS pour les développeurs

Un pool d'identités émet des identifiants AWS

Les jetons ne sont pas des identifiants

  • Une preuve d'identité pour votre application
  • Pas des identifiants pour accéder aux services AWS

 

Pools d'identités : jeton de confiance en entrée, identifiants en sortie

Flux vertical, même géométrie que le schéma du pool d'utilisateurs : un jeton de confiance est présenté à un pool d'identités, qui vérifie l'émetteur et renvoie des identifiants AWS limités à un rôle et expirant

Sécurité AWS pour les développeurs

Un pool d'identités émet des identifiants AWS

Les jetons ne sont pas des identifiants

  • Une preuve d'identité pour votre application
  • Pas des identifiants pour accéder aux services AWS

 

Pools d'identités : jeton de confiance en entrée, identifiants en sortie

  • Un job de build a échangé un jeton OIDC
  • Une preuve que vous détenez, échangée contre un badge d'accès

Flux vertical, même géométrie que le schéma du pool d'utilisateurs : un jeton de confiance est présenté à un pool d'identités, qui vérifie l'émetteur et renvoie des identifiants AWS limités à un rôle et expirant

Sécurité AWS pour les développeurs

Une appli, les deux volets

Un navigateur utilisant les deux

  1. Se connecter, recevoir un jeton
  2. Envoyer ce jeton à votre API

Bearer token : qui le détient l'utilise

Un flux vertical. Un navigateur se connecte à un pool d'utilisateurs, qui renvoie un jeton. Ce jeton unique bifurque : à gauche vers votre API et à droite vers un pool d'identités. Le pool d'identités renvoie des identifiants, et ce sont ces identifiants qui atteignent S3.

Sécurité AWS pour les développeurs

Une appli, les deux volets

Un navigateur utilisant les deux

  1. Se connecter, recevoir un jeton
  2. Envoyer ce jeton à votre API
  3. Échanger ce même jeton contre des identifiants

Un flux vertical. Un navigateur se connecte à un pool d'utilisateurs, qui renvoie un jeton. Ce jeton unique bifurque : à gauche vers votre API et à droite vers un pool d'identités. Le pool d'identités renvoie des identifiants, et ce sont ces identifiants qui atteignent S3.

Sécurité AWS pour les développeurs

Une appli, les deux volets

Un navigateur utilisant les deux

  1. Se connecter, recevoir un jeton
  2. Envoyer ce jeton à votre API
  3. Échanger ce même jeton contre des identifiants
  4. Accéder à S3 avec ces identifiants

Jetons pour votre code, identifiants pour AWS

Un flux vertical. Un navigateur se connecte à un pool d'utilisateurs, qui renvoie un jeton. Ce jeton unique bifurque : à gauche vers votre API et à droite vers un pool d'identités. Le pool d'identités renvoie des identifiants, et ce sont ces identifiants qui atteignent S3.

Sécurité AWS pour les développeurs

Un jeton est un texte signé

Trois segments reliés par des points, étiquetés Header, Payload et Signature. Un cadenas ouvert se trouve sur le payload, et un crochet sous les deux premiers segments montre la portée de la signature.

JWT : JSON Web Token

  • Claims : affirmations étiquetées sur l'utilisateur
Sécurité AWS pour les développeurs

Un jeton est un texte signé

Trois segments reliés par des points, étiquetés Header, Payload et Signature. Un cadenas ouvert se trouve sur le payload, et un crochet sous les deux premiers segments montre la portée de la signature.

JWT : JSON Web Token

  • Claims : affirmations étiquetées sur l'utilisateur
  • Encodé, non chiffré
  • Tout le monde peut le lire et tout le monde peut le modifier
Sécurité AWS pour les développeurs

Vérifier avant de lire

La vérification d'abord

  • JWKS : JSON Web Key Set, clés publiques de signature de l'émetteur
  • Signature vérifiée avec ces clés

Schéma de passage à niveaux. Un jeton arrive et passe quatre vérifications cochées dans l'ordre : signature, émetteur, audience et expiration. Les clés publiques de l'émetteur alimentent la vérification de signature sur le côté, et ce n'est qu'après la quatrième vérif que l'on atteint une boîte verte pour lire les claims.

Sécurité AWS pour les développeurs

Vérifier avant de lire

La vérification d'abord

  • JWKS : JSON Web Key Set, clés publiques de signature de l'émetteur
  • Signature vérifiée avec ces clés

 

Puis trois claims

  • iss : votre pool d'utilisateurs
  • aud sur un ID token, client_id sur un access token
  • exp : encore valide

Schéma de passage à niveaux. Un jeton arrive et passe quatre vérifications cochées dans l'ordre : signature, émetteur, audience et expiration. Les clés publiques de l'émetteur alimentent la vérification de signature sur le côté, et ce n'est qu'après la quatrième vérif que l'on atteint une boîte verte pour lire les claims.

Sécurité AWS pour les développeurs

Un jeton vérifié peut être inadéquat

Deux cartes assorties côte à côte. La carte ID token est marquée comme jeton d'identité, affiche l'ID client dans le claim audience et précise qu'elle ne porte pas de scope, au-dessus d'un encadré gris « qui est l'utilisateur ». La carte access token est marquée comme jeton d'accès, affiche l'ID client dans son propre claim d'identifiant client, et précise qu'elle porte un scope, au-dessus d'un encadré orange « ce qu'il peut appeler ». Une bande en pointillés sous les deux cartes indique que le claim Cognito groups apparaît dans les deux jetons.

Vérifié, et pourtant le mauvais jeton

Sécurité AWS pour les développeurs

Un jeton vérifié peut être inadéquat

Deux cartes assorties côte à côte. La carte ID token est marquée comme jeton d'identité, affiche l'ID client dans le claim audience et précise qu'elle ne porte pas de scope, au-dessus d'un encadré gris « qui est l'utilisateur ». La carte access token est marquée comme jeton d'accès, affiche l'ID client dans son propre claim d'identifiant client, et précise qu'elle porte un scope, au-dessus d'un encadré orange « ce qu'il peut appeler ». Une bande en pointillés sous les deux cartes indique que le claim Cognito groups apparaît dans les deux jetons.

Vérifié, et pourtant le mauvais jeton

token_use indique le type

  • cognito:groups figure dans les deux types et n'est pas un scope

  • scope : ce que le jeton peut appeler

  • sub : quel utilisateur, et cela ne change jamais
  • L'identité n'est pas une permission
Sécurité AWS pour les développeurs

Passons à la pratique !

Sécurité AWS pour les développeurs

Preparing Video For Download...