Pular para o conteúdo

Autenticação de Website em React

O gerador de Autenticação para Website React adiciona autenticação ao seu site React usando Amazon Cognito.

Este gerador configura a infraestrutura CDK ou Terraform para criar um User Pool do Cognito e um Identity Pool associado, além de uma interface hospedada para gerenciar fluxos de login de usuários e sua integração com seu website React.

Você pode adicionar autenticação ao seu website React de duas formas:

  1. Instale o Nx Console VSCode Plugin se ainda não o fez
  2. Abra o console Nx no VSCode
  3. Clique em Generate (UI) na seção "Common Nx Commands"
  4. Procure por @aws/nx-plugin - ts#website#auth
  5. Preencha os parâmetros obrigatórios
    • Clique em Generate
    ParâmetroTipoPadrãoDescrição
    project Obrigatóriostring-O diretório raiz do website.
    cognitoDomain string-O prefixo do domínio Cognito a ser usado. Se omitido, um valor é derivado do escopo npm e do nome do projeto do website.
    allowSignup booleanSe deve permitir auto-registro
    iac inherit | cdk | terraforminheritO provedor IaC preferido. Por padrão, isso é herdado da sua seleção inicial.
    preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

    Você encontrará as seguintes alterações no seu website React:

    • Directorysrc
      • Directorycomponents
        • DirectoryCognitoAuth
          • index.tsx Componente principal de autenticação
      • main.tsx Atualizado para instrumentar o componente CognitoAuth

    Como este gerador fornece infraestrutura como código com base no iacProvider escolhido, ele criará um projeto em packages/common que inclui os constructs CDK ou módulos Terraform relevantes.

    O projeto comum de infraestrutura como código está estruturado da seguinte forma:

    • Directorypackages/common/constructs
      • Directorysrc
        • Directoryapp/ Constructs para infraestrutura específica de um projeto/gerador
        • Directorycore/ Constructs genéricos reutilizados pelos constructs em app
        • index.ts Ponto de entrada exportando os constructs de app
      • project.json Metas de build e configuração do projeto

    Você também encontrará o seguinte código de infraestrutura gerado com base no iacProvider selecionado:

    • Directorypackages/common/constructs/src
      • Directorycore
        • user-identity.ts Construct que define o user pool e identity pool

    Este gerador adiciona um user pool do Amazon Cognito (para login) e um identity pool (para federar usuários autenticados a credenciais IAM com escopo definido) à arquitetura existente de website estático:

    Web BrowserWAFCognito(User + Identity Pool)Scoped IAMCredentialsAuthenticatedAWS Resources Sign in IAM/Cognito

    O User Pool é criado no plano de recursos Plus do Cognito com proteção contra ameaças definida no modo AUDIT para autenticação padrão. No modo de auditoria, o Cognito atribui um nível de risco a cada login e registra a avaliação no CloudWatch sem bloquear usuários.

    Depois de observar as avaliações de risco para seus usuários, você pode alternar para a aplicação de função completa para responder automaticamente a atividades arriscadas (por exemplo, exigindo MFA ou bloqueando o login):

    Defina standardThreatProtectionMode como StandardThreatProtectionMode.FULL_FUNCTION em packages/common/constructs/src/core/user-identity.ts.

    Por padrão, o User Pool é associado a um AWS WAFv2 Web ACL usando os grupos de regras gerenciadas AWSManagedRulesCommonRuleSet e AWSManagedRulesKnownBadInputsRuleSet. Você pode desabilitar isso se desejar gerenciar seu próprio Web ACL ou não precisar de um:

    new UserIdentity(this, 'Identity', { enableWaf: false });

    Você precisará adicionar a infraestrutura de identidade do usuário à sua stack, declarando-a antes do website:

    packages/infra/src/stacks/application-stack.ts
    import { Stack } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite, UserIdentity } from ':my-scope/common-constructs';
    export class ApplicationStack extends Stack {
    constructor(scope: Construct, id: string) {
    super(scope, id);
    new UserIdentity(this, 'Identity');
    new MyWebsite(this, 'MyWebsite');
    }
    }

    O construct UserIdentity adiciona automaticamente a Configuração de Runtime necessária para garantir que seu website possa apontar para o Cognito User Pool correto para autenticação.

    Para conceder acesso a usuários autenticados para realizar determinadas ações, como conceder permissões para invocar uma API, você pode adicionar políticas IAM à função autenticada do identity pool:

    packages/infra/src/stacks/application-stack.ts
    import { Stack } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite, UserIdentity, MyApi } from ':my-scope/common-constructs';
    export class ApplicationStack extends Stack {
    constructor(scope: Construct, id: string) {
    super(scope, id);
    const identity = new UserIdentity(this, 'Identity');
    const api = new MyApi(this, 'MyApi');
    api.grantInvokeAccess(identity.identityPool.authenticatedRole);
    new MyWebsite(this, 'MyWebsite');
    }
    }