User pools, identity pools, and JWTs

Usando a segurança da AWS para desenvolvedores

Rahul Singh

Technical Product Manager

Cognito são dois serviços com um nome

Amazon Cognito

  • Identidade gerenciada para os usuários do seu app
  • Um nome, dois serviços separados

Duas perguntas acima de um limite tracejado chamado Amazon Cognito. Dentro dele, dois painéis azuis lado a lado: um user pool descrito como seu diretório de usuários e um identity pool descrito como um corretor de credenciais. Linhas de ambos convergem para uma caixa laranja tracejada abaixo, observando que muitos apps usam ambos.

Usando a segurança da AWS para desenvolvedores

Cognito são dois serviços com um nome

Amazon Cognito

  • Identidade gerenciada para os usuários do seu app
  • Um nome, dois serviços separados

Qual você precisa?

  • Login e perfis de usuário: user pool
  • Browser ou mobile chamando a AWS direto: identity pool

Duas perguntas acima de um limite tracejado chamado Amazon Cognito. Dentro dele, dois painéis azuis lado a lado: um user pool descrito como seu diretório de usuários e um identity pool descrito como um corretor de credenciais. Linhas de ambos convergem para uma caixa laranja tracejada abaixo, observando que muitos apps usam ambos.

Usando a segurança da AWS para desenvolvedores

Um user pool faz o login dos usuários

Um diretório de usuários gerenciado

  • Cadastro e login
  • Redefinição de senha
  • Autenticação multifator

Fluxo vertical: um usuário do app faz login em um user pool que guarda as senhas, e o pool retorna uma caixa com um ID token, um access token e um refresh token

Usando a segurança da AWS para desenvolvedores

Um user pool faz o login dos usuários

Um diretório de usuários gerenciado

  • Cadastro e login
  • Redefinição de senha
  • Autenticação multifator

 

Com sucesso, três tokens

Fluxo vertical: um usuário do app faz login em um user pool que guarda as senhas, e o pool retorna uma caixa com um ID token, um access token e um refresh token

Usando a segurança da AWS para desenvolvedores

Um user pool faz o login dos usuários

Um diretório de usuários gerenciado

  • Cadastro e login
  • Redefinição de senha
  • Autenticação multifator

 

Com sucesso, três tokens

  • ID token: quem é o usuário
  • Access token: o que ele pode chamar
  • Refresh token: pegar novos depois

Fluxo vertical: um usuário do app faz login em um user pool que guarda as senhas, e o pool retorna uma caixa com um ID token, um access token e um refresh token

Usando a segurança da AWS para desenvolvedores

Um identity pool emite credenciais da AWS

Tokens não são credenciais

  • Prova de identidade para o seu app
  • Não são credenciais para acessar serviços AWS

 

Identity pools: token confiável entra, credenciais saem

Fluxo vertical com a mesma geometria do diagrama do user pool: um token confiável é apresentado a um identity pool, que verifica quem o emitiu e retorna credenciais da AWS com escopo para um papel e com expiração

Usando a segurança da AWS para desenvolvedores

Um identity pool emite credenciais da AWS

Tokens não são credenciais

  • Prova de identidade para o seu app
  • Não são credenciais para acessar serviços AWS

 

Identity pools: token confiável entra, credenciais saem

  • Um job de build trocou um token OIDC
  • Prova que você possui, trocada por um crachá

Fluxo vertical com a mesma geometria do diagrama do user pool: um token confiável é apresentado a um identity pool, que verifica quem o emitiu e retorna credenciais da AWS com escopo para um papel e com expiração

Usando a segurança da AWS para desenvolvedores

Um app, as duas partes

Um navegador usando ambos

  1. Faça login e receba um token
  2. Envie esse token para sua API

Bearer token: quem possui, usa

Um fluxo vertical. Um navegador faz login em um user pool, que retorna um token. Esse único token segue por dois caminhos: à esquerda, para sua API; à direita, para um identity pool. O identity pool retorna credenciais, e são essas credenciais que chegam ao S3.

Usando a segurança da AWS para desenvolvedores

Um app, as duas partes

Um navegador usando ambos

  1. Faça login e receba um token
  2. Envie esse token para sua API
  3. Troque esse mesmo token por credenciais

Um fluxo vertical. Um navegador faz login em um user pool, que retorna um token. Esse único token segue por dois caminhos: à esquerda, para sua API; à direita, para um identity pool. O identity pool retorna credenciais, e são essas credenciais que chegam ao S3.

Usando a segurança da AWS para desenvolvedores

Um app, as duas partes

Um navegador usando ambos

  1. Faça login e receba um token
  2. Envie esse token para sua API
  3. Troque esse mesmo token por credenciais
  4. Acesse o S3 com essas credenciais

Tokens para seu código, credenciais para a AWS

Um fluxo vertical. Um navegador faz login em um user pool, que retorna um token. Esse único token segue por dois caminhos: à esquerda, para sua API; à direita, para um identity pool. O identity pool retorna credenciais, e são essas credenciais que chegam ao S3.

Usando a segurança da AWS para desenvolvedores

Um token é texto com uma assinatura

Três segmentos unidos por pontos e rotulados Header, Payload e Signature. Um cadeado aberto fica sobre o payload, e um colchete sob os dois primeiros segmentos mostra até onde a assinatura vai.

JWT: JSON Web Token

  • Claims: declarações rotuladas sobre o usuário
Usando a segurança da AWS para desenvolvedores

Um token é texto com uma assinatura

Três segmentos unidos por pontos e rotulados Header, Payload e Signature. Um cadeado aberto fica sobre o payload, e um colchete sob os dois primeiros segmentos mostra até onde a assinatura vai.

JWT: JSON Web Token

  • Claims: declarações rotuladas sobre o usuário
  • Codificado, não criptografado
  • Qualquer um pode ler e qualquer um pode alterar
Usando a segurança da AWS para desenvolvedores

Verifique antes de ler

A verificação vem primeiro

  • JWKS: JSON Web Key Set, as chaves públicas do emissor
  • Assinatura checada contra essas chaves

Um diagrama de portais em vertical. Um token chega e passa por quatro checagens com tique, em ordem: assinatura, emissor, audiência e expiração. As chaves públicas do emissor alimentam a checagem de assinatura pelo lado, e só depois da quarta checagem o caminho chega a uma caixa verde para ler as claims.

Usando a segurança da AWS para desenvolvedores

Verifique antes de ler

A verificação vem primeiro

  • JWKS: JSON Web Key Set, as chaves públicas do emissor
  • Assinatura checada contra essas chaves

 

Depois, três claims

  • iss: seu user pool
  • aud em um ID token, client_id em um access token
  • exp: ainda válido

Um diagrama de portais em vertical. Um token chega e passa por quatro checagens com tique, em ordem: assinatura, emissor, audiência e expiração. As chaves públicas do emissor alimentam a checagem de assinatura pelo lado, e só depois da quarta checagem o caminho chega a uma caixa verde para ler as claims.

Usando a segurança da AWS para desenvolvedores

Um token verificado ainda pode estar errado

Dois cartões combinados lado a lado. O cartão de ID token é marcado como token de identidade, mostra o client ID no claim de audiência e observa que não carrega escopo, acima de uma caixa cinza para quem é o usuário. O cartão de access token é marcado como token de acesso, mostra o client ID no próprio claim de identificador do cliente e observa que carrega um escopo, acima de uma caixa laranja para o que ele pode chamar. Uma faixa tracejada abaixo de ambos observa que o claim de grupos do Cognito aparece nos dois tokens.

Verificado, e ainda assim o token errado

Usando a segurança da AWS para desenvolvedores

Um token verificado ainda pode estar errado

Dois cartões combinados lado a lado. O cartão de ID token é marcado como token de identidade, mostra o client ID no claim de audiência e observa que não carrega escopo, acima de uma caixa cinza para quem é o usuário. O cartão de access token é marcado como token de acesso, mostra o client ID no próprio claim de identificador do cliente e observa que carrega um escopo, acima de uma caixa laranja para o que ele pode chamar. Uma faixa tracejada abaixo de ambos observa que o claim de grupos do Cognito aparece nos dois tokens.

Verificado, e ainda assim o token errado

token_use diz qual é o tipo

  • cognito:groups vai nos dois tipos e não é um escopo

  • scope: o que o token pode chamar

  • sub: qual usuário, e nunca muda
  • Identidade não é permissão
Usando a segurança da AWS para desenvolvedores

Vamos praticar!

Usando a segurança da AWS para desenvolvedores

Preparing Video For Download...