Pular para o conteúdo

Autenticação de Website React

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

Este gerador configura a infraestrutura CDK ou Terraform para criar um Cognito User Pool e o Identity Pool associado, bem como uma UI hospedada para lidar com fluxos de login de usuário e sua integração com seu website React.

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

Terminal window
pnpm nx g @aws/nx-plugin:ts#website#auth
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
Terminal window
pnpm nx g @aws/nx-plugin:ts#website#auth --dry-run
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 em seu website React:

  • Directorysrc
    • Directorycomponents
      • DirectoryCognitoAuth
        • index.tsx Main authentication component
    • main.tsx Updated to instrument the CognitoAuth component

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

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

  • Directorypackages/common/constructs
    • Directorysrc
      • Directoryapp/ Constructs for infrastructure specific to a project/generator
      • Directorycore/ Generic constructs which are reused by constructs in app
      • index.ts Entry point exporting constructs from app
    • project.json Project build targets and configuration

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

  • Directorypackages/common/constructs/src
    • Directorycore
      • user-identity.ts Construct which defines the user pool and identity pool

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

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 para o 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 mudar 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, os usuários devem configurar MFA (um código SMS ou uma senha de uso único baseada em tempo) antes de poderem fazer login. Você pode tornar o MFA opcional, desativá-lo completamente ou restringir quais métodos de segundo fator estão disponíveis:

import { Mfa } from 'aws-cdk-lib/aws-cognito';
new UserIdentity(this, 'Identity', {
mfa: Mfa.OPTIONAL,
mfaSecondFactor: { sms: false, otp: true },
});

mfa aceita Mfa.OFF / Mfa.OPTIONAL / Mfa.REQUIRED. mfaSecondFactor.sms e mfaSecondFactor.otp habilitam ou desabilitam cada método de segundo fator independentemente; eles não têm efeito quando mfa é Mfa.OFF. Definir mfa: Mfa.REQUIRED com ambos os métodos desabilitados é rejeitado no momento da síntese, pois ninguém poderia então completar o login.

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 de usuário ao seu 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 aos usuários autenticados acesso para realizar certas ações, como conceder permissões para invocar uma API, você pode adicionar declarações de política 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', {
integrations: MyApi.defaultIntegrations(this).build(),
});
api.grantInvokeAccess(identity.identityPool.authenticatedRole);
new MyWebsite(this, 'MyWebsite');
}
}