Trabalhar com dispositivos de usuários no grupo de usuários - Amazon Cognito

Trabalhar com dispositivos de usuários no grupo de usuários

Ao fazer login de usuários de grupos de usuários locais com a API de grupos de usuários do Amazon Cognito, é possível associar os logs de atividades dos usuários, provenientes da proteção contra ameaças, a cada um dos dispositivos e, opcionalmente, permitir que os usuários ignorem a autenticação multifator (MFA) se estiverem em um dispositivo confiável. O Amazon Cognito inclui uma chave de dispositivo na resposta a qualquer login que ainda não inclua informações do dispositivo. A chave do dispositivo está no formato Region_UUID. Com uma chave de dispositivo, uma biblioteca de senha remota segura (SRP) e um grupo de usuários que permita a autenticação do dispositivo, é possível solicitar que os usuários da aplicação confiem no dispositivo atual e não solicitem mais um código de MFA no login.

Como configurar dispositivos memorizados

Com os grupos de usuários do Amazon Cognito, é possível associar cada um dos dispositivos dos usuários a um identificador de dispositivo exclusivo: uma chave de dispositivo. Ao apresentar a chave do dispositivo e realizar a autenticação do dispositivo no login, é possível configurar a aplicação com um fluxo de autenticação de dispositivo confiável. Nesse fluxo, a aplicação pode apresentar aos usuários a opção de fazer login sem MFA em outro momento, conforme os requisitos de segurança da aplicação ou as preferências dos usuários. Ao final desse período, a aplicação deve alterar o status do dispositivo para não memorizado e o usuário deve fazer login com MFA até confirmar que deseja memorizar um dispositivo. Por exemplo, a aplicação pode solicitar que seus usuários confiem em um dispositivo por 30, 60 ou 90 dias. Você pode armazenar essa data em um atributo personalizado e, nessa data, alterar o status de memorização do dispositivo. Em seguida, é necessário solicitar novamente ao usuário que envie um código de MFA e configure o dispositivo para que seja novamente memorizado após a autenticação bem-sucedida.

  1. Os dispositivos memorizados podem substituir a MFA somente em grupos de usuários com a MFA ativa.

Quando o usuário faz login com um dispositivo memorizado, é necessário realizar uma autenticação adicional do dispositivo durante o fluxo de autenticação. Para obter mais informações, consulte Fazer login com um dispositivo.

Configure o grupo de usuários para memorizar os dispositivos no menu Fazer login do grupo de usuários, em Monitoramento de dispositivos. Ao configurar a funcionalidade de dispositivos memorizados por meio do console do Amazon Cognito, você terá três opções: Always (Sempre), User Opt-In (Usuário opta por) e No (Não).

Não memorizar

O grupo de usuários não solicita que os usuários se lembrem dos dispositivos ao fazerem login.

Sempre memorizar

Quando a aplicação confirma o dispositivo de um usuário, o grupo de usuários sempre se lembra do dispositivo e não retorna desafios de MFA em futuros logins bem-sucedidos do dispositivo.

Opção do usuário

Quando a aplicação confirma o dispositivo de um usuário, o grupo de usuários não suprime automaticamente os desafios de MFA. É necessário solicitar que o usuário escolha se deseja memorizar o dispositivo.

Ao selecionar Sempre memorizar ou Opção do usuário, o Amazon Cognito gera uma chave e um segredo de identificação do dispositivo toda vez que um usuário faz login em um dispositivo não identificado. A chave do dispositivo é o identificador inicial que a aplicação envia ao grupo de usuários quando o usuário realiza a autenticação do dispositivo.

Com cada dispositivo de usuário confirmado, seja lembrado automaticamente ou por opção, é possível usar a chave e o segredo do identificador do dispositivo para autenticar um dispositivo em cada login de usuário.

Também é possível definir as configurações de dispositivos memorizados para o grupo de usuários em uma solicitação de API CreateUserPool ou UpdateUserPool. Para obter mais informações, consulte a propriedade DeviceConfiguration.

A API de grupos de usuários do Amazon Cognito tem operações adicionais para dispositivos memorizados.

  1. ListDevices e AdminListDevices geram uma lista das chaves do dispositivo e dos respectivos metadados para um usuário.

  2. GetDevice e AdminGetDevice geram a chave do dispositivo e os metadados de um único dispositivo.

  3. UpdateDeviceStatus e AdminUpdateDeviceStatus definem o dispositivo de um usuário como memorizado ou não memorizado.

  4. ForgetDevice e AdminForgetDevice removem do perfil o dispositivo confirmado de um usuário.

As operações de API com nomes que começam com Admin são para uso em aplicações do lado do servidor e devem ser autorizadas com credenciais do IAM. Para obter mais informações, consulte Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado.

Obter uma chave do dispositivo

Sempre que o usuário faz login com a API de grupos de usuários e não inclui uma chave do dispositivo nos parâmetros de autenticação como DEVICE_KEY, o Amazon Cognito gera uma nova chave do dispositivo na resposta. Na aplicação pública do lado do cliente, coloque a chave do dispositivo no armazenamento da aplicação para que você possa incluí-la em futuras solicitações. Na aplicação confidencial do lado do servidor, defina um cookie do navegador ou outro token do lado do cliente com a chave do dispositivo do usuário.

Para que o usuário possa fazer login com o dispositivo confiável, a aplicação deve confirmar a chave do dispositivo e fornecer informações adicionais. Gere uma solicitação ConfirmDevice para o Amazon Cognito que confirme o dispositivo do usuário com a chave do dispositivo, um nome amigável, um verificador de senha e um salt. Se você configurou o grupo de usuários para autenticação opcional de dispositivos, o Amazon Cognito responderá à solicitação ConfirmDevice pedindo que o usuário escolha se deseja memorizar o dispositivo atual. Responda com a seleção do usuário em uma solicitação UpdateDeviceStatus.

Ao confirmar o dispositivo do usuário, mas não o configurar como memorizado, o Amazon Cognito armazena a associação, mas prossegue com o login que não é do dispositivo quando você fornece a respectiva chave. Os dispositivos podem gerar logs úteis para a segurança e solução de problemas do usuário. Um dispositivo confirmado, mas não memorizado, não utiliza o recurso de login, e sim o de logs de monitoramento de segurança. Ao ativar a proteção contra ameaças para o cliente da aplicação e codificar uma impressão digital do dispositivo na solicitação, o Amazon Cognito associa os eventos do usuário ao dispositivo confirmado.

Como obter uma nova chave do dispositivo
  1. Inicie a sessão de login do usuário com uma solicitação de API InitiateAuth.

  2. Responda a todos os desafios de autenticação com RespondToAuthChallenge até receber tokens web JSON (JWTs) que marquem a sessão de login do usuário como concluída.

  3. Na aplicação, registre os valores que o Amazon Cognito gera em NewDeviceMetadata na resposta RespondToAuthChallenge ou InitiateAuth: DeviceGroupKey e DeviceKey.

  4. Gere um novo segredo de SRP para o usuário: um salt e um verificador de senha. Essa função está disponível em SDKs que fornecem bibliotecas de SRP.

  5. Solicite ao usuário um nome de dispositivo ou gere um com base nas características do dispositivo do usuário.

  6. Forneça o token de acesso, a chave do dispositivo, o nome do dispositivo e o segredo de SRP do usuário em uma solicitação de API ConfirmDevice. Se o grupo de usuários estiver definido como Sempre memorizar os dispositivos, o registro do usuário estará concluído.

  7. Se o Amazon Cognito respondeu a ConfirmDevice com "UserConfirmationNecessary": true, solicite que o usuário escolha se gostaria de memorizar o dispositivo. Se o usuário afirmar que quer memorizar o dispositivo, gere uma solicitação de API UpdateDeviceStatus com o token de acesso do usuário, a chave do dispositivo e "DeviceRememberedStatus": "remembered".

  8. Se você instruiu o Amazon Cognito a memorizar o dispositivo, na próxima vez em que ele fizer login, em vez de um desafio de MFA, será apresentado um desafio DEVICE_SRP_AUTH.

Fazer login com um dispositivo

Depois que o dispositivo de um usuário é configurado para ser memorizado, o Amazon Cognito não exige mais que ele envie um código de MFA ao fazer login com a mesma chave do dispositivo. A autenticação do dispositivo substitui apenas o desafio da autenticação MFA por um desafio de autenticação do dispositivo. Não é possível conectar os usuários somente com a autenticação do dispositivo. O usuário deve primeiro concluir a autenticação com a senha ou um desafio personalizado. Veja a seguir o processo de autenticação de um usuário em um dispositivo memorizado.

Para realizar a autenticação do dispositivo em um fluxo que use acionadores do Lambda de desafio de autenticação personalizada, transmita um parâmetro DEVICE_KEY na solicitação de API InitiateAuth. Depois que o usuário passar por todos os desafios e o desafio CUSTOM_CHALLENGE gerar um valor issueTokens de true, o Amazon Cognito vai gerar um desafio DEVICE_SRP_AUTH final.

Como fazer login com um dispositivo
  1. Recupere a chave do dispositivo do usuário do armazenamento do cliente.

  2. Inicie a sessão de login do usuário com uma solicitação de API InitiateAuth. Selecione um AuthFlow de USER_SRP_AUTH, REFRESH_TOKEN_AUTH, USER_PASSWORD_AUTH ou CUSTOM_AUTH. Em AuthParameters, adicione a chave do dispositivo do usuário ao parâmetro DEVICE_KEY e inclua os outros parâmetros necessários para o fluxo de login selecionado.

    1. Também é possível transmitir DEVICE_KEY nos parâmetros de uma resposta PASSWORD_VERIFIER a um desafio de autenticação.

  3. Forneça as respostas do desafio até receber um desafio DEVICE_SRP_AUTH na resposta.

  4. Em uma solicitação de API RespondToAuthChallenge, envie um ChallengeName de DEVICE_SRP_AUTH e parâmetros para USERNAME, DEVICE_KEY e SRP_A.

  5. O Amazon Cognito responde com um desafio DEVICE_PASSWORD_VERIFIER. Essa resposta ao desafio inclui valores para SECRET_BLOCK e SRP_B.

  6. Com a biblioteca de SRP, gere e envie os parâmetros PASSWORD_CLAIM_SIGNATURE, PASSWORD_CLAIM_SECRET_BLOCK, TIMESTAMP, USERNAME e DEVICE_KEY. Envie-os em uma solicitação RespondToAuthChallenge adicional.

  7. Complete os desafios adicionais até receber os JWTs do usuário.

O pseudocódigo a seguir demonstra como calcular valores para a resposta DEVICE_PASSWORD_VERIFIER ao desafio. Para autenticação SRP com um dispositivo, gere um novo segredo de SRP para o usuário: uma nova senha de alta entropia DeviceSecret, um salt e o verificador de senha associado. Esses valores são distintos da senha, do salt e do verificador usados para a autenticação SRP do usuário. Eles são usados somente para autenticação do dispositivo e são armazenados somente no dispositivo. As funções para gerar os segredos de SRP para os dispositivos dos usuários estão disponíveis nas bibliotecas de SRP que estão disponíveis em vários SDKs.

PASSWORD_CLAIM_SECRET_BLOCK = SECRET_BLOCK TIMESTAMP = "Tue May 7 00:09:40 UTC 2025" k = SHA256(N || g) as a non-negative integer in big-endian u = SHA256(SRP_A || SRP_B) as a non-negative integer in big-endian x = SHA256(salt || SHA256(DeviceGroupKey || DeviceKey || ":" || DeviceSecret)) as a non-negative integer in big-endian S_USER = (SRP_B - k * g^x)^(a + u * x) % N K_USER = HKDF_HMAC_SHA256(salt=u, ikm=S_USER, info="Caldera Derived Key", length=16 bytes) PASSWORD_CLAIM_SIGNATURE = Base64(HMAC_SHA256(key=K_USER, message=(DeviceGroupKey || DeviceKey || PASSWORD_CLAIM_SECRET_BLOCK || TIMESTAMP)))

Visualizar, atualizar e esquecer dispositivos

Com a API do Amazon Cognito, é possível implementar os recursos a seguir na aplicação.

  1. Exibir informações sobre o dispositivo atual do usuário.

  2. Exiba uma lista de todos os dispositivos do usuário.

  3. Esqueça um dispositivo.

  4. Atualize o estado memorizado do dispositivo.

Os tokens de acesso que autorizam as solicitações de API nas descrições a seguir devem incluir o escopo aws.cognito.signin.user.admin. O Amazon Cognito adiciona uma reivindicação desse escopo a todos os tokens de acesso que você gera com a API de grupos de usuários do Amazon Cognito. Os IdPs de terceiros devem gerenciar separadamente os dispositivos e a MFA para os usuários que se autenticam no Amazon Cognito. No login gerenciado, é possível solicitar o escopo aws.cognito.signin.user.admin, mas o login gerenciado adiciona automaticamente as informações do dispositivo a logs de usuário de segurança avançados e não oferece a possibilidade de memorizar os dispositivos.

Exibir informações sobre um dispositivo

É possível consultar informações sobre o dispositivo de um usuário para determinar se ele ainda está em uso. Por exemplo, convém desativar dispositivos memorizados depois que eles não tiverem feito login por 90 dias.

  • Para exibir as informações do dispositivo do usuário em uma aplicação cliente pública, envie a chave de acesso e a chave do dispositivo do usuário em uma solicitação de API GetDevice.

  • Para exibir as informações do dispositivo do usuário em uma aplicação cliente confidencial, assine uma solicitação de API AdminGetDevice com credenciais AWS e envie o nome do usuário, a chave do dispositivo e o grupo de usuários do usuário.

Exibir uma lista de todos os dispositivos do usuário.

É possível exibir uma lista de todos os dispositivos do usuário e as respectivas propriedades. Por exemplo, convém verificar se o dispositivo atual corresponde a um dispositivo memorizado.

  • Em uma aplicação cliente pública, envie o token de acesso do usuário em uma solicitação de API ListDevices.

  • Em uma aplicação cliente confidencial, assine uma solicitação de API AdminListDevices com credenciais AWS e envie o nome do usuário e o grupo de usuários.

Esquecer um dispositivo

É possível excluir a chave do dispositivo de um usuário. Convém fazer isso ao constatar que o usuário não usa mais um dispositivo ou ao detectar atividades incomuns e solicitar que um usuário conclua a MFA novamente. Para registrar novamente o dispositivo em um momento posterior, é necessário gerar e armazenar uma nova chave do dispositivo.

  • Em uma aplicação cliente pública, envie a chave do dispositivo e o token de acesso do usuário em uma solicitação de API ForgetDevice.

  • Em uma aplicação cliente confidencial, envie a chave do dispositivo e o token de acesso do usuário em uma solicitação de API AdminForgetDevice.