User pools, identity pools en JWT's

AWS-beveiliging gebruiken voor developers

Rahul Singh

Technical Product Manager

Cognito is twee services onder één naam

Amazon Cognito

  • Beheerde identiteit voor de gebruikers van je app
  • Eén naam, twee aparte services

Twee vragen staan boven een stippellijn met het label Amazon Cognito. Binnen de grens staan twee blauwe panelen naast elkaar: een user pool, beschreven als je gebruikersdirectory, en een identity pool, beschreven als een credentials-makelaar. Lijnen van beide panelen komen samen in een oranje stippelvak eronder, met de opmerking dat veel apps beide gebruiken.

AWS-beveiliging gebruiken voor developers

Cognito is twee services onder één naam

Amazon Cognito

  • Beheerde identiteit voor de gebruikers van je app
  • Eén naam, twee aparte services

Welke heb je nodig?

  • Aanmelden en profielen: user pool
  • Browser of mobiel dat AWS direct aanroept: identity pool

Twee vragen staan boven een stippellijn met het label Amazon Cognito. Binnen de grens staan twee blauwe panelen naast elkaar: een user pool, beschreven als je gebruikersdirectory, en een identity pool, beschreven als een credentials-makelaar. Lijnen van beide panelen komen samen in een oranje stippelvak eronder, met de opmerking dat veel apps beide gebruiken.

AWS-beveiliging gebruiken voor developers

Een user pool meldt gebruikers aan

Een beheerde gebruikersdirectory

  • Registratie en aanmelden
  • Wachtwoord herstellen
  • Multifactor-authenticatie

Verticale stroom: een app-gebruiker meldt zich aan bij een user pool die de wachtwoorden beheert, en de pool retourneert een doos met een ID-token, een access token en een refresh token

AWS-beveiliging gebruiken voor developers

Een user pool meldt gebruikers aan

Een beheerde gebruikersdirectory

  • Registratie en aanmelden
  • Wachtwoord herstellen
  • Multifactor-authenticatie

 

Bij succes: drie tokens

Verticale stroom: een app-gebruiker meldt zich aan bij een user pool die de wachtwoorden beheert, en de pool retourneert een doos met een ID-token, een access token en een refresh token

AWS-beveiliging gebruiken voor developers

Een user pool meldt gebruikers aan

Een beheerde gebruikersdirectory

  • Registratie en aanmelden
  • Wachtwoord herstellen
  • Multifactor-authenticatie

 

Bij succes: drie tokens

  • ID-token: wie de gebruiker is
  • Access token: wat die mag aanroepen
  • Refresh token: later nieuwe ophalen

Verticale stroom: een app-gebruiker meldt zich aan bij een user pool die de wachtwoorden beheert, en de pool retourneert een doos met een ID-token, een access token en een refresh token

AWS-beveiliging gebruiken voor developers

Een identity pool geeft AWS-inloggegevens uit

Tokens zijn geen inloggegevens

  • Identiteitsbewijs voor je app
  • Geen inloggegevens voor toegang tot AWS-services

 

Identity pools: vertrouwd token erin, inloggegevens eruit

Verticale stroom met dezelfde geometrie als het user pool-diagram: een vertrouwd token wordt aangeboden aan een identity pool, die controleert wie het heeft uitgegeven en AWS-inloggegevens retourneert met de scope van één rol die verlopen

AWS-beveiliging gebruiken voor developers

Een identity pool geeft AWS-inloggegevens uit

Tokens zijn geen inloggegevens

  • Identiteitsbewijs voor je app
  • Geen inloggegevens voor toegang tot AWS-services

 

Identity pools: vertrouwd token erin, inloggegevens eruit

  • Een buildtaak ruilde een OIDC-token in
  • Bewijs dat jij het hebt, ingeruild voor een toegangspas

Verticale stroom met dezelfde geometrie als het user pool-diagram: een vertrouwd token wordt aangeboden aan een identity pool, die controleert wie het heeft uitgegeven en AWS-inloggegevens retourneert met de scope van één rol die verlopen

AWS-beveiliging gebruiken voor developers

Één app, beide onderdelen

Een browser die beide gebruikt

  1. Meld je aan, ontvang een token
  2. Stuur dat token naar je API

Bearer token: wie het heeft, kan het gebruiken

Een verticale stroom. Een browser meldt zich aan bij een user pool, die een token terugstuurt. Dat ene token splitst daarna twee kanten op: links naar je API en rechts naar een identity pool. De identity pool retourneert inloggegevens, en die bereiken S3.

AWS-beveiliging gebruiken voor developers

Één app, beide onderdelen

Een browser die beide gebruikt

  1. Meld je aan, ontvang een token
  2. Stuur dat token naar je API
  3. Ruil datzelfde token in voor inloggegevens

Een verticale stroom. Een browser meldt zich aan bij een user pool, die een token terugstuurt. Dat ene token splitst daarna twee kanten op: links naar je API en rechts naar een identity pool. De identity pool retourneert inloggegevens, en die bereiken S3.

AWS-beveiliging gebruiken voor developers

Één app, beide onderdelen

Een browser die beide gebruikt

  1. Meld je aan, ontvang een token
  2. Stuur dat token naar je API
  3. Ruil datzelfde token in voor inloggegevens
  4. Bereik S3 met die inloggegevens

Tokens naar je code, inloggegevens naar AWS

Een verticale stroom. Een browser meldt zich aan bij een user pool, die een token terugstuurt. Dat ene token splitst daarna twee kanten op: links naar je API en rechts naar een identity pool. De identity pool retourneert inloggegevens, en die bereiken S3.

AWS-beveiliging gebruiken voor developers

Een token is tekst met een handtekening

Drie segmenten verbonden door punten en gelabeld Header, Payload en Signature. Een open hangslot staat op de payload, en een haak onder de eerste twee segmenten toont hoe ver de handtekening reikt.

JWT: JSON Web Token

  • Claims: gelabelde uitspraken over de gebruiker
AWS-beveiliging gebruiken voor developers

Een token is tekst met een handtekening

Drie segmenten verbonden door punten en gelabeld Header, Payload en Signature. Een open hangslot staat op de payload, en een haak onder de eerste twee segmenten toont hoe ver de handtekening reikt.

JWT: JSON Web Token

  • Claims: gelabelde uitspraken over de gebruiker
  • Gecodeerd, niet versleuteld
  • Iedereen kan het lezen en iedereen kan het wijzigen
AWS-beveiliging gebruiken voor developers

Verifieer vóór je leest

Eerst verifiëren

  • JWKS: JSON Web Key Set, de publieke ondertekeningssleutels van de uitgever
  • Handtekening gecontroleerd met die sleutels

Een verticaal poortdiagram. Een token komt aan en passeert vier aangevinkte checks op volgorde: handtekening, uitgever, publiek en vervaldatum. De publieke sleutels van de uitgever voeden de handtekeningcheck van opzij, en pas na de vierde check bereikt het pad een groen vak om de claims te lezen.

AWS-beveiliging gebruiken voor developers

Verifieer vóór je leest

Eerst verifiëren

  • JWKS: JSON Web Key Set, de publieke ondertekeningssleutels van de uitgever
  • Handtekening gecontroleerd met die sleutels

 

Dan drie claims

  • iss: je user pool
  • aud op een ID-token, client_id op een access token
  • exp: nog geldig

Een verticaal poortdiagram. Een token komt aan en passeert vier aangevinkte checks op volgorde: handtekening, uitgever, publiek en vervaldatum. De publieke sleutels van de uitgever voeden de handtekeningcheck van opzij, en pas na de vierde check bereikt het pad een groen vak om de claims te lezen.

AWS-beveiliging gebruiken voor developers

Een geverifieerd token kan toch fout zijn

Twee bijpassende kaarten naast elkaar. De ID-tokenkaart is gemarkeerd als een identity token, toont de client-ID in de audience-claim en vermeldt dat er geen scope is, boven een grijs vak voor wie de gebruiker is. De access token-kaart is gemarkeerd als access token, toont de client-ID in een eigen client identifier-claim en vermeldt dat er een scope is, boven een oranje vak voor wat die mag aanroepen. Een gestippelde strook onder beide kaarten vermeldt dat de Cognito groups-claim in beide tokens staat.

Gecontroleerd, en toch het verkeerde token

AWS-beveiliging gebruiken voor developers

Een geverifieerd token kan toch fout zijn

Twee bijpassende kaarten naast elkaar. De ID-tokenkaart is gemarkeerd als een identity token, toont de client-ID in de audience-claim en vermeldt dat er geen scope is, boven een grijs vak voor wie de gebruiker is. De access token-kaart is gemarkeerd als access token, toont de client-ID in een eigen client identifier-claim en vermeldt dat er een scope is, boven een oranje vak voor wat die mag aanroepen. Een gestippelde strook onder beide kaarten vermeldt dat de Cognito groups-claim in beide tokens staat.

Gecontroleerd, en toch het verkeerde token

token_use zegt welk soort

  • cognito:groups staat op beide soorten en is geen scope

  • scope: wat het token mag aanroepen

  • sub: welke gebruiker, en verandert nooit
  • Identiteit is geen toestemming
AWS-beveiliging gebruiken voor developers

Laten we oefenen!

AWS-beveiliging gebruiken voor developers

Preparing Video For Download...