Como gerenciar a interface do usuário hospedada e o servidor de autorização - Amazon Cognito

Como gerenciar a interface do usuário hospedada e o servidor de autorização

Um grupo de usuários do Amazon Cognito com um domínio é um servidor de autorização compatível com OAuth-2.0 e uma interface de usuário (UI) hospedada pronta para uso para autenticação. O servidor de autorização direciona solicitações de autenticação, emite e gerencia tokens web JSON (JWTs) e fornece informações de atributos do usuário. A interface de usuário hospedada é uma coleção de interfaces da web para atividades básicas de inscrição, login, autenticação multifator e redefinição de senha no grupo de usuários. Também é um hub central para autenticação com os provedores de identidades (IDPs) de terceiros que você associa à aplicação. A aplicação pode invocar a interface de usuário hospedada e os endpoints de autorização quando você quiser autenticar e autorizar usuários. Você pode fazer com que a experiência do usuário da interface hospedada se adapte à sua marca com seu próprio logotipo e personalização de CSS. Para receber mais informações sobre os componentes da interface de usuário hospedada e do servidor de autorização, consulte Referência da interface do usuário hospedada e endpoints do grupo de usuários.

nota

A interface de usuário hospedada do Amazon Cognito não é compatível com a autenticação personalizada com gatilhos do Lambda de desafio de autenticação personalizada.

Como configurar a interface do usuário hospedada com o AWS Amplify

Se você usar o AWS Amplify para adicionar autenticação ao seu aplicativo web ou móvel, poderá configurar sua interface do usuário hospedada usando a interface de linha de comando (CLI) e as bibliotecas no framework do AWS Amplify. Para adicionar autenticação à sua aplicação, use a CLI do AWS Amplify para adicionar a categoria Auth ao seu projeto. Depois, no seu código de cliente, você usa as bibliotecas do AWS Amplify para autenticar usuários com seu grupo de usuários do Amazon Cognito.

Você pode exibir uma interface do usuário hospedada pré-compilada ou federar usuários por meio de um endpoint OAuth 2.0, que faz o redirecionamento para um provedor de login social, como o Facebook, o Google, a Amazon ou a Apple. Depois que um usuário se autentica com êxito com o provedor social, o AWS Amplify criará um novo usuário em seu grupo de usuários, se necessário, e fornecerá o token OIDC do usuário à aplicação.

Os exemplos a seguir mostram como utilizar o AWS Amplify para configurar a interface do usuário hospedada com provedores sociais em sua aplicação.

Como configurar a interface do usuário hospedada com o console do Amazon Cognito

Criar um cliente da aplicação
  1. Acesse o console do Amazon Cognito. Se solicitado, insira suas credenciais da AWS.

  2. Escolha User Pools (Grupos de usuários).

  3. Escolha um grupo de usuários existente na lista ou crie um grupo de usuários.

  4. Selecione a guia App integration (Integração da aplicação).

  5. Em App clients (Clientes da aplicação), selecione Create an app client (Criar um cliente da aplicação).

  6. Selecione um App type (Tipo de aplicação): Public client (Cliente público), Confidential client (Cliente confidencial) ou Other (Outro). Normalmente um Public client (Cliente público) opera a partir dos dispositivos de seus usuários e usa APIs não autenticadas e autenticadas com token. Normalmente um Confidential client (Cliente confidencial) opera a partir de uma aplicação em um servidor central de confiança com segredos do cliente e credenciais de API, e usa cabeçalhos de autorização e credenciais AWS Identity and Access Management para assinar solicitações. Se o seu caso de uso for diferente das configurações predefinidas do cliente da aplicação para um Public client (Cliente público) ou um Confidential client (Cliente confidencial), selecione Other (Outro).

  7. Insira um App client name (Nome do cliente da aplicação).

  8. Selecione os Authentication flows (Fluxos de autenticação) que deseja permitir no cliente da aplicação.

  9. Configure a Authentication flow session duration (Duração da sessão do fluxo de autenticação). Esse é o tempo que os usuários têm para concluir cada desafio de autenticação antes que o token da sessão expire.

  10. (Opcional) Configure a validade do token.

    1. Especifique a Refresh token expiration (Validade do token de atualização) para o cliente da aplicação. O valor padrão é de 30 dias. Você pode alterá-la para qualquer valor entre 1 hora e 10 anos.

    2. Especifique a Access token expiration (Validade do token de acesso) para o cliente da aplicação. O valor padrão é uma hora. Você pode alterá-la para qualquer valor entre 5 minutos e 24 horas.

    3. Especifique ID token expiration (Validade do token de ID) para o cliente da aplicação. O valor padrão é uma hora. Você pode alterá-la para qualquer valor entre 5 minutos e 24 horas.

      Importante

      Se você usar a interface do usuário hospedada e definir o ciclo de vida do token para menos de uma hora, o usuário será capaz de usar tokens com base na duração do cookie de sessão, que atualmente está fixada em uma hora.

  11. Selecione Generate client secret (Gerar segredo do cliente) para que o Amazon Cognito gere um segredo do cliente para você. Normalmente segredos dos clientes são associados a clientes confidenciais.

  12. Escolha se você vai Enable token revocation (Habilitar revogação de token) para esse cliente da aplicação. Isso aumentará o tamanho dos tokens. Para mais informações, consulte Revoking Tokens (Como revogar tokens).

  13. Escolha se você vai Prevent error messages that reveal user existence (Evitar mensagens de erro que revelem a existência do usuário) para esse cliente da aplicação. O Amazon Cognito responderá a solicitações de acesso para usuários inexistentes com uma mensagem genérica informando que o nome de usuário ou a senha estavam incorretos.

  14. (Opcional) Defina as Attribute read and write permissions (Permissões de leitura e gravação de atributos) para esse cliente da aplicação. Seu cliente da aplicação pode ter permissão para leitura e gravação de um subconjunto limitado do esquema de atributos do seu grupo de usuários.

  15. Escolha Create (Criar).

  16. Anote o Client id (ID do cliente). Isso identificará o cliente da aplicação nas solicitações de cadastro e acesso.

Configurar a aplicação
  1. Na guia App integration (Integração da aplicação), selecione o cliente da aplicação em App clients (Clientes da aplicação). Revise suas informações atuais sobre a Hosted UI (interface do usuário hospedada).

  2. Add a callback URL (Adicionar um URL de retorno de chamada) em Allowed callback URL(s) (URL(s) de retorno de chamada permitidos). Um URL de retorno de chamada é para onde o usuário será redirecionado após realizar o acesso com êxito.

  3. Add a sign-out URL (Adicionar um URL de saída) em Allowed sign-out URL(s) (URL(s) de saída permitidos). Um URL de saída é para onde o usuário será redirecionado após sair.

  4. Adicione pelo menos uma das opções listadas da lista de Identity providers (Provedores de identidade).

  5. Em OAuth 2.0 grant types (Tipos de concessões OAuth 2.0), selecione Authorization code grant (Concessão de código de autorização) para retornar um código de autorização que é trocado por tokens do grupo de usuários. Como os tokens nunca são expostos diretamente a um usuário final, é menos provável que eles fiquem comprometidos. No entanto, uma aplicação personalizada é necessário no backend para trocar o código de autorização por tokens do grupo de usuários. Por motivos de segurança, recomendamos que você use o fluxo de concessão de código de autorização juntamente com o Proof key for code Exchange (PKCE) para aplicativos móveis.

  6. Em OAuth 2.0 grant types (Tipos de concessão OAuth 2.0), selecione Implicit grant (Concessão implícita) para que os JSON Web Tokens (JWT) do grupo de usuários sejam retornados para você do Amazon Cognito. Você pode usar esse fluxo quando não houver backend disponível para trocar um código de autorização por tokens. Ele também é útil para depurar tokens.

  7. É possível habilitar tanto as concessões de Authorization code (Código de autorização) quanto de Implicit code (Código implícito) e, em seguida, usar cada concessão conforme necessário. Se nenhuma das concessões Authorization code (Código de autorização) ou Implicit code (Código implícito) forem selecionadas e seu cliente da aplicação tiver um segredo de cliente, você pode habilitar concessões de Client credentials (Credenciais do cliente). Só selecione Client credentials (Credenciais do cliente) se a aplicação precisar solicitar tokens de acesso em nome dela mesma, e não em nome de um usuário.

  8. Selecione os OpenID Connect scopes (Escopos do OpenID Connect) que deseja autorizar para esse cliente da aplicação.

  9. Escolha Salvar alterações.

Configurar um domínio
  1. Acesse a guia App integration (Integração da aplicação) para o seu grupo de usuários.

  2. Ao lado de Domain (Domínio), escolha Action (Ações) e, em seguida, escolha Create custom domain (Criar domínio personalizado) ou Create Cognito domain (Criar domínio do Cognito). Se já tiver configurado um domínio de grupo de usuários, escolha Delete Cognito domain (Excluir domínio do Cognito) ou Delete custom domain (Excluir domínio personalizado) antes de criar seu novo domínio personalizado.

  3. Insira um prefixo de domínio disponível para usar com um Cognito domain (Domínio do Cognito). Para informações sobre como configurar um Domínio personalizado, consulte Uso do próprio domínio para a interface do usuário hospedada

  4. Escolha Criar.

Visualizar a página de login

No console do Amazon Cognito, selecione o botão View Hosted UI (Visualizar UI hospedada) na configuração do cliente da aplicação, em App clients and analytics (Clientes e análise de aplicações), na guia App integration (Integração de aplicações). Esse botão levará você a uma página de login na UI hospedada com os parâmetros básicos a seguir.

  • O ID do cliente da aplicação

  • Uma solicitação de concessão de código de autorização

  • Uma solicitação para todos os escopos que você ativou para o cliente da aplicação atual

  • O primeiro URL de retorno de chamada na lista para o cliente da aplicação atual

O botão View hosted UI (Visualizar UI hospedada) é útil quando você deseja testar as funções básicas da UI hospedada. Você pode personalizar o URL de login com parâmetros adicionais e modificados. Na maioria dos casos, os parâmetros gerados automaticamente do link View hosted UI (Visualizar UI hospedada) não atendem totalmente às necessidades da aplicação. Nesses casos, você precisa personalizar o URL que a aplicação invoca quando faz login dos usuários. Para obter mais informações sobre chaves e valores de parâmetros de login, consulte Referência da interface do usuário hospedada e endpoints do grupo de usuários.

A página da web de acesso da UI hospedada usa o formato de URL a seguir. Este exemplo solicita uma concessão de código de autorização com o parâmetro response_type=code.

https://<your domain>/oauth2/authorize?response_type=code&client_id=<your app client id>&redirect_uri=<your callback url>

É possível recuperar o domínio do grupo de usuários pela guia Integração de aplicações. Na mesma guia, é possível identificar IDs de clientes de aplicação, seus URLs de retorno de chamada, seus escopos permitidos e outras configurações em Análise e clientes de aplicação.

Ao navegar até o endpoint /oauth2/authorize com parâmetros personalizados, o Amazon Cognito redireciona você ao endpoint /oauth2/login ou, se tiver um parâmetro identity_provider ou idp_identifier, ele redireciona você silenciosamente para a página de login de seu IdP. Para ver um exemplo de URL que ignora a UI hospedada, consulte Iniciação de sessão SAML em grupos de usuários do Amazon Cognito.

Exemplo de solicitação de interface de usuário hospedada para uma concessão implícita

Você pode visualizar a página da web de login da interface do usuário hospedada com o URL a seguir para a concessão de código implícita onde response_type=token. Depois de um login bem-sucedido, o Amazon Cognito retorna tokens do grupo de usuários para a barra de endereço do seu navegador da Web.

https://mydomain.us-east-1.amazoncognito.com/authorize?response_type=token&client_id=1example23456789&redirect_uri=https://mydomain.example.com

Os tokens de identidade e acesso aparecem como parâmetros anexados ao URL de redirecionamento.

O URL a seguir é um exemplo de resposta de uma solicitação de concessão implícita.

https://mydomain.example.com/#id_token=eyJraaBcDeF1234567890&access_token=eyJraGhIjKlM1112131415&expires_in=3600&token_type=Bearer

Informações importantes sobre a interface de usuário hospedada e o servidor de autorização

A interface de usuário hospedada e a confirmação de usuários como administradores

Para usuários locais do grupo de usuários, a interface de usuário hospedada funciona melhor quando você configura o grupo de usuários para Permitir que o Cognito envie mensagens automaticamente para verificar e confirmar. Quando você ativa essa configuração, o Amazon Cognito envia uma mensagem com um código de confirmação para os usuários que se cadastram. Em vez disso, quando você confirma os usuários como administradores do grupo de usuários, a interface de usuário hospedada exibe uma mensagem de erro após a inscrição. Nesse estado, o Amazon Cognito criou o usuário, mas não conseguiu enviar uma mensagem de verificação. Você ainda pode confirmar os usuários como administradores, mas eles podem entrar em contato com a central de suporte após encontrarem um erro. Para receber mais informações sobre confirmação administrativa, consulte Permitir que os usuários se inscrevam na aplicação, mas mediante confirmação deles como administradores do grupo de usuários.

Visualizar as alterações na configuração da interface de usuário hospedada

Se as alterações nas páginas da sua interface do usuário hospedada não aparecerem imediatamente, aguarde alguns minutos e atualize a página.

Decodificar tokens do grupo de usuários

Os tokens de grupo de usuários do Amazon Cognito são assinados usando um algoritmo RS256. Você pode decodificar e confirmar tokens do grupo de usuários usando o AWS Lambda. Consulte “Decode and verify Amazon Cognito JWT tokens do Amazon Cognito” (Decodificar e confirmar tokens JWT do Amazon Cognito) no GitHub.

A versão da interface do usuário hospedada e do TLS

A interface do usuário hospedada requer criptografia em trânsito. Os domínios de grupos de usuários fornecidos pelo Amazon Cognito exigem uma versão mínima do TLS 1.2. Os domínios personalizados oferecem suporte, mas não exigem a versão 1.2 do TLS. Como o Amazon Cognito gerencia a configuração da interface do usuário hospedada e dos endpoints do servidor de autorização, você não pode modificar os requisitos de TLS do seu domínio do grupo de usuários.

As políticas de CORS e interface de usuário hospedada

A UI hospedada do Amazon Cognito não comporta políticas de origem de CORS. Uma política de CORS na UI hospedada impede que os usuários transmitam parâmetros de autenticação em suas solicitações. Em vez disso, implemente uma política de CORS no front-end da web da aplicação. O Amazon Cognito retorna um cabeçalho de resposta Access-Control-Allow-Origin: * às solicitações para os endpoints do OAuth a seguir.

Interface do usuário hospedada e cookies do servidor de autorização

Os endpoints do grupo de usuários do Amazon Cognito definem cookies nos navegadores dos usuários. Os cookies seguem os requisitos de alguns navegadores de que os sites não definam cookies de terceiros. Eles têm como escopo apenas os endpoints do seu grupo de usuários e incluem o seguinte:

  • Um cookie XSRF-TOKEN para cada solicitação.

  • Um cookie csrf-state para consistência da sessão quando um usuário é redirecionado.

  • Um cookie de sessão cognito que preserva as tentativas de login bem-sucedidas por uma hora.

No iOS, você pode bloquear todos os cookies. Essa configuração não é compatível com a interface do usuário hospedada. Para trabalhar com usuários que possam ativar essa configuração, crie a autenticação do grupo de usuários em um aplicativo iOS nativo com um SDK da AWS. Nesse cenário, você pode criar seu próprio armazenamento de sessão que não seja baseado em cookies.