Ir al contenido

Autenticación de Sitios Web con React

El generador de Autenticación para Sitio Web React añade autenticación a tu sitio web React usando Amazon Cognito.

Este generador configura la infraestructura CDK o Terraform para crear un User Pool de Cognito y un Identity Pool asociado, así como una interfaz de usuario alojada para manejar flujos de inicio de sesión y su integración con tu sitio web React.

Puedes agregar autenticación a tu sitio web React de dos formas:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#website#auth
  5. Complete los parámetros requeridos
    • Haga clic en Generate
    ParámetroTipoPredeterminadoDescripción
    project Requeridostring-El directorio raíz del sitio web.
    cognitoDomain string-El prefijo del dominio de Cognito a utilizar. Si se omite, se deriva un valor del scope de npm y el nombre del proyecto del sitio web.
    allowSignup booleanSi se permite el auto-registro
    iac inherit | cdk | terraforminheritEl proveedor de IaC preferido. Por defecto, se hereda de tu selección inicial.
    preferInstallDependencies booleantrueSi se prefiere instalar las dependencias después de que se ejecute el generador. Establece en false para diferir la instalación cuando se ejecutan múltiples generadores en lote (la instalación aún se ejecuta si es necesario para que los generadores subsiguientes puedan calcular el grafo de proyectos de Nx); instala una vez al final.

    Encontrarás los siguientes cambios en tu sitio web React:

    • Directoriosrc
      • Directoriocomponents
        • DirectorioCognitoAuth
          • index.tsx Componente principal de autenticación
      • main.tsx Actualizado para instrumentar el componente CognitoAuth

    Dado que este generador proporciona infraestructura como código basada en tu proveedor de iacProvider seleccionado, creará un proyecto en packages/common que incluye los constructos CDK o módulos de Terraform correspondientes.

    El proyecto común de infraestructura como código tiene la siguiente estructura:

    • Directoriopackages/common/constructs
      • Directoriosrc
        • Directorioapp/ Constructos para infraestructura específica de un proyecto/generador
        • Directoriocore/ Constructos genéricos reutilizados por los constructos en app
        • index.ts Punto de entrada que exporta los constructos de app
      • project.json Objetivos de compilación y configuración del proyecto

    También encontrarás el siguiente código de infraestructura generado según el iacProvider seleccionado:

    • Directoriopackages/common/constructs/src
      • Directoriocore
        • user-identity.ts Constructo que define el user pool y identity pool

    Este generador añade un user pool de Amazon Cognito (para inicio de sesión) y un identity pool (para federar usuarios autenticados a credenciales IAM con alcance limitado) a la arquitectura existente de sitio web estático:

    Web BrowserCognito(User + Identity Pool)Scoped IAMCredentialsAuthenticatedAWS Resourceswaf Sign in IAM/Cognito

    El User Pool se crea en el plan de funciones Plus de Cognito con protección contra amenazas configurada en modo AUDIT para autenticación estándar. En modo auditoría, Cognito asigna un nivel de riesgo a cada inicio de sesión y registra la evaluación en CloudWatch sin bloquear a los usuarios.

    Una vez que hayas observado las evaluaciones de riesgo para tus usuarios, puedes cambiar a la aplicación de función completa para responder automáticamente a actividades riesgosas (por ejemplo, requerir MFA o bloquear el inicio de sesión):

    Establece standardThreatProtectionMode a StandardThreatProtectionMode.FULL_FUNCTION en packages/common/constructs/src/core/user-identity.ts.

    Por defecto, el User Pool está asociado con una Web ACL de AWS WAFv2 usando los grupos de reglas administradas AWSManagedRulesCommonRuleSet y AWSManagedRulesKnownBadInputsRuleSet. Puedes desactivar esto si deseas administrar tu propia Web ACL o no requieres una:

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

    Necesitarás agregar la infraestructura de identidad de usuario a tu stack, declarándola antes que el sitio 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');
    }
    }

    El constructo UserIdentity agrega automáticamente la Configuración en tiempo de ejecución necesaria para que tu sitio web pueda apuntar al Cognito User Pool correcto para autenticación.

    Para permitir que usuarios autenticados realicen ciertas acciones, como otorgar permisos para invocar una API, puedes agregar políticas IAM al rol autenticado del 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');
    }
    }