Salta ai contenuti

Autenticazione del Sito Web React

Il generatore di autenticazione per React Website aggiunge l’autenticazione al tuo sito React utilizzando Amazon Cognito.

Questo generatore configura l’infrastruttura CDK o Terraform per creare un Cognito User Pool e un Identity Pool associato, oltre a un’interfaccia utente ospitata per gestire i flussi di login degli utenti e la sua integrazione con il tuo sito React.

Puoi aggiungere l’autenticazione al tuo sito React in due modi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#website#auth
  5. Compila i parametri richiesti
    • Clicca su Generate
    ParametroTipoPredefinitoDescrizione
    project Obbligatoriostring-La directory radice del sito web.
    cognitoDomain string-Il prefisso del dominio Cognito da utilizzare. Se omesso, viene derivato un valore dallo scope npm e dal nome del progetto del sito web.
    allowSignup booleanSe consentire l'auto-registrazione
    iac inherit | cdk | terraforminheritIl provider IaC preferito. Per impostazione predefinita viene ereditato dalla selezione iniziale.
    preferInstallDependencies booleantrueSe preferire l'installazione delle dipendenze dopo l'esecuzione del generatore. Impostare su false per rimandare l'installazione quando si eseguono più generatori in batch (l'installazione viene comunque eseguita se necessaria affinché i generatori successivi possano calcolare il grafo dei progetti Nx); installare una volta alla fine.

    Troverai le seguenti modifiche nel tuo sito React:

    • Directorysrc
      • Directorycomponents
        • DirectoryCognitoAuth
          • index.tsx Componente principale per l’autenticazione
      • main.tsx Aggiornato per integrare il componente CognitoAuth

    Poiché questo generatore fornisce infrastruttura come codice basata sul tuo iacProvider selezionato, creerà un progetto in packages/common che include i relativi costrutti CDK o moduli Terraform.

    Il progetto comune di infrastruttura come codice è strutturato come segue:

    • Directorypackages/common/constructs
      • Directorysrc
        • Directoryapp/ Construct per l’infrastruttura specifica di un progetto/generatore
        • Directorycore/ Construct generici riutilizzati dai construct in app
        • index.ts Punto di ingresso che esporta i construct da app
      • project.json Target di build e configurazione del progetto

    Troverai anche il seguente codice infrastrutturale generato in base al iacProvider selezionato:

    • Directorypackages/common/constructs/src
      • Directorycore
        • user-identity.ts Construct che definisce il user pool e identity pool

    Questo generatore aggiunge un user pool Amazon Cognito (per l’accesso) e un identity pool (per federare gli utenti autenticati a credenziali IAM con ambito limitato) all’architettura esistente del sito web statico:

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

    Il User Pool viene creato sul piano funzionalità Plus di Cognito con la protezione dalle minacce impostata in modalità AUDIT per l’autenticazione standard. In modalità audit, Cognito assegna un livello di rischio a ogni accesso e registra la valutazione in CloudWatch senza bloccare gli utenti.

    Una volta osservate le valutazioni del rischio per i tuoi utenti, puoi passare all’applicazione completa per rispondere automaticamente alle attività rischiose (ad esempio richiedendo MFA o bloccando l’accesso):

    Imposta standardThreatProtectionMode su StandardThreatProtectionMode.FULL_FUNCTION in packages/common/constructs/src/core/user-identity.ts.

    Per impostazione predefinita, il User Pool è associato a un AWS WAFv2 Web ACL utilizzando i gruppi di regole gestite AWSManagedRulesCommonRuleSet e AWSManagedRulesKnownBadInputsRuleSet. Puoi disabilitarlo se desideri gestire il tuo Web ACL o se non ne hai bisogno:

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

    Dovrai aggiungere l’infrastruttura per l’identità utente al tuo stack, dichiarandola prima del sito web:

    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');
    }
    }

    Il construct UserIdentity aggiunge automaticamente la necessaria Configurazione Runtime per garantire che il tuo sito possa puntare al corretto Cognito User Pool per l’autenticazione.

    Per concedere agli utenti autenticati l’accesso a determinate azioni, come concedere permessi per invocare un’API, puoi aggiungere dichiarazioni di policy IAM al ruolo autenticato del pool di identità:

    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');
    }
    }