Gerenciar a expiração e o armazenamento em cache do token do grupo de usuários - Amazon Cognito

Gerenciar a expiração e o armazenamento em cache do token do grupo de usuários

Sua aplicação deve concluir com êxito uma das solicitações a seguir sempre que você quiser obter um novo token web JSON (JWT).

  • Solicite as credenciais do cliente ou a concessão do código de autorização do Endpoint de token.

  • Solicite uma concessão implícita de sua UI hospedada.

  • Autentique um usuário local em uma solicitação de API do Amazon Cognito, como InitiateAuth.

Você pode configurar o grupo de usuários para definir que os tokens expirem em minutos, horas ou dias. Para garantir a performance e a disponibilidade da aplicação, use os tokens do Amazon Cognito por cerca 75% da vida útil do token, e só então recupere novos tokens. Uma solução de cache que você cria para a aplicação mantém os tokens disponíveis e evita a rejeição de solicitações do Amazon Cognito quando a taxa de solicitação é muito alta. Uma aplicação do lado do cliente deve armazenar tokens em um cache de memória. Uma aplicação do lado do servidor pode adicionar um mecanismo de cache criptografado para armazenar tokens.

Quando o grupo de usuários gera um alto volume de atividade de usuário ou de máquina para máquina, você pode encontrar os limites definidos pelo Amazon Cognito referentes ao número de solicitações de tokens que você pode fazer. Para reduzir o número de solicitações realizadas aos endpoints do Amazon Cognito, você pode armazenar e reutilizar dados de autenticação com segurança ou implementar recuos exponenciais e novas tentativas.

Os dados de autenticação originam-se de duas classes de endpoints. Os endpoints do OAuth 2.0 do Amazon Cognito incluem o endpoint de token, que fornece as credenciais de cliente e as solicitações de código de autorização da UI hospedada. Os endpoints de serviço respondem a solicitações da API de grupos de usuários, como InitiateAuth e RespondToAuthChallenge. Cada tipo de solicitação tem seu próprio limite. Para obter mais informações sobre limites, consulte Cotas no Amazon Cognito.

Armazenar tokens de acesso de máquina para máquina em cache com o Amazon API Gateway

Com o armazenamento em cache de tokens do API Gateway, a aplicação pode reduzir a escala horizontalmente em resposta a eventos maiores do que a cota de taxa de solicitação padrão dos endpoints OAuth do Amazon Cognito.

Um diagrama de um API Gateway que mantém um cache de tokens de acesso para M2M. O proxy da API processa a solicitação de token e retorna um token em cache se já houver um válido.

É possível armazenar os tokens de acesso em cache para que a aplicação solicite apenas um novo token de acesso se o token armazenado em cache expirar. Do contrário, o armazenamento do endpoint em cache retornará um token do cache. Isso evita uma chamada adicional para um endpoint da API do Amazon Cognito. Quando você usa o Amazon API Gateway como um proxy para o Endpoint de token, a API responde à maioria das solicitações que, de outra forma, contribuiriam para sua cota de solicitações, evitando solicitações malsucedidas em decorrência da limitação da taxa.

A solução baseada no API Gateway a seguir oferece uma implementação de cache de tokens de baixa latência e pouco uso de código/nenhum código. As APIs do API Gateway são criptografadas em trânsito e, opcionalmente, em repouso. Um cache do API Gateway é ideal para a concessão de credenciais de cliente do OAuth 2.0, um tipo de concessão frequentemente de alto volume que produz tokens de acesso para autorizar sessões de máquina para máquina e de microsserviço. Em uma circunstância como um aumento de tráfego que faz com que a escala de seus microsserviços aumente horizontalmente, vários sistemas podem acabar usando as mesmas credenciais de cliente em um volume que excede o limite da taxa de solicitação da AWS de seu grupo de usuários ou do cliente da aplicação. Para preservar a disponibilidade e a baixa latência da aplicação, uma solução de armazenamento em cache é a prática recomendada nesses cenários.

Nessa solução, você define um cache na API a fim armazenar um token de acesso separado para cada combinação de escopos do OAuth e cliente da aplicação que você deseja solicitar na aplicação. Quando a aplicação faz uma solicitação correspondente à chave de cache, a API responde com um token de acesso que o Amazon Cognito emitiu para a primeira solicitação correspondente à chave de cache. Quando a duração da chave de cache expira, a API encaminha a solicitação ao endpoint do token e armazena em cache um novo token de acesso.

nota

A duração da chave de cache deve ser menor do que a duração do token de acesso do cliente da aplicação.

A chave de cache é uma combinação dos escopos do OAuth que você solicita no parâmetro de URL scope e do cabeçalho Authorization na solicitação. O cabeçalho Authorization contém o ID do cliente da aplicação e o respectivo segredo. Você não precisa implementar lógica adicional na aplicação para implementar essa solução. Você só deve atualizar sua configuração para alterar o caminho para o endpoint do token do grupo de usuários.

Você também pode implementar o armazenamento em cache de tokens com o ElastiCache (Redis OSS). Para um controle detalhado com políticas do AWS Identity and Access Management (IAM), considere um cache do Amazon DynamoDB.

nota

O armazenamento em cache no API Gateway está sujeito a um custo adicional. Para obter mais detalhes, consulte a definição de preço.

Como configurar um proxy de armazenamento em cache com o API Gateway

  1. Abra o console do API Gateway e crie uma API REST.

  2. Em Resources (Recursos), crie um método POST.

    1. Selecione o integration type (tipo de integração) HTTP.

    2. Selecione Use HTTP proxy integration (Usar integração de proxy HTTP).

    3. Digite um Endpoint URL (URL de endpoint) do https://<your user pool domain>/oauth2/token.

  3. Em Resources (Recursos), configure a chave de cache.

    1. Edite a Method request (Solicitação de método) do método POST.

    2. Defina o parâmetro scope e o cabeçalho Authorization como sua chave de armazenamento em cache.

      1. Adicione uma string de consulta aos URL query string parameters (parâmetros de string de consulta de URL) e selecione Caching (Armazenamento em cache) para a string scope.

      2. Adicione um cabeçalho aos HTTP request headers (Cabeçalhos de solicitação HTTP) e selecione Caching (Armazenamento em cache) para o cabeçalho Authorization.

  4. Em Stages (Estágios), configure o armazenamento em cache.

    1. Selecione o estágio que deseja modificar.

    2. Em Settings (Configurações), selecione Enable API cache (Habilitar cache da API).

    3. Selecione uma Cache capacity (Capacidade de cache).

    4. Selecione uma Vida útil (TTL) do cache de pelo menos 3.600 segundos.

    5. Desmarque a caixa de seleção Exigir autorização.

  5. Em Stages (Estágios), anote o Invoke URL (URL de invocação).

  6. Atualize a aplicação para solicitações de token POST para o Invoke URL (URL de invocação) de sua API em vez do endpoint /oauth2/token do grupo de usuários.