Autentique a los usuarios de la aplicación React mediante las interfaces de usuario de Amazon Cognito y AWS Amplify - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Autentique a los usuarios de la aplicación React mediante las interfaces de usuario de Amazon Cognito y AWS Amplify

Daniel Kozhemyako, Amazon Web Services

Resumen

Este patrón muestra cómo añadir capacidades de autenticación a una aplicación React de frontend existente mediante una biblioteca de interfaz de usuario de AWS Amplify y un grupo de usuarios de Amazon Cognito.

El patrón emplea Amazon Cognito para proporcionar autenticación, autorización y administración de usuarios en la aplicación. También utiliza un componente de Amplify UI, una biblioteca de código abierto que amplía las capacidades del desarrollo de la interfaz de AWS Amplify usuario (UI). El componente de interfaz de usuario de Authenticator administra los inicios de sesión y ejecuta el flujo de trabajo conectado a la nube que autentica a los usuarios a través de Amazon Cognito.

Tras implementar este patrón, los usuarios pueden iniciar sesión con cualquiera de las siguientes credenciales:

  • Nombre de usuario y contraseña

  • Proveedores de identidad social, como Apple, Facebook, Google y Amazon

  • Proveedores de identidad empresarial compatibles con SAML 2.0 o con OpenID Connect (OIDC)

nota

Para crear un componente de interfaz de usuario de autenticación personalizado, puede ejecutar el componente de interfaz de usuario de Authenticator en modo sin periféricos.

Requisitos previos y limitaciones

Requisitos previos 

  • Un activo Cuenta de AWS

  • Una aplicación web de React 18.2.0 o posterior

  • Node.js y npm 6.14.4 o posterior, instalados

Limitaciones

  • Este patrón se aplica únicamente a aplicaciones web React.

  • Este patrón emplea un componente de Amplify UI prediseñado. La solución no abarca los pasos necesarios para implementar un componente de interfaz de usuario personalizado.

Versiones de producto

  • Amplify UI 6.1.3 o posterior (Gen 1)

  • Amplify 6.0.16 o posterior (Gen 1)

Arquitectura

Arquitectura de destino

En el siguiente diagrama se muestra una arquitectura que emplea Amazon Cognito para autenticar usuarios en una aplicación web React.

Amazon Cognito autentica a los usuarios de una aplicación web React.

Tools (Herramientas)

Servicios de AWS

  • Amazon Cognito ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.

Otras herramientas

  • Amplify UI es una biblioteca de interfaz de usuario de código abierto que proporciona componentes personalizables que se pueden conectar a la nube.

  • Node.js es un entorno de JavaScript ejecución basado en eventos diseñado para crear aplicaciones de red escalables.

  • npm es un registro de software que se ejecuta en un entorno Node.js y se utiliza para compartir o tomar prestados paquetes y administrar la implementación de paquetes privados.

Prácticas recomendadas

Si está desarrollando una nueva aplicación, le recomendamos que use Amplify Gen 2.

Epics

TareaDescripciónHabilidades requeridas

Cree un grupo de usuarios.

Crear un grupo de usuarios de Amazon Cognito. Configure las opciones de inicio de sesión y los requisitos de seguridad del grupo de usuarios según su caso de uso.

Desarrollador de aplicaciones

Agregar un cliente de aplicación.

Configure un cliente de aplicación para un grupo de usuarios. Este cliente es necesario para que la aplicación interactúe con el grupo de usuarios de Amazon Cognito.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Instale las dependencias.

Para instalar los paquetes aws-amplify y @aws-amplify/ui-react, ejecute el comando siguiente desde el directorio raíz de la aplicación:

npm i @aws-amplify/ui-react aws-amplify
Desarrollador de aplicaciones

Configure el grupo de usuarios.

Según el siguiente ejemplo, cree un archivo aws-exports.js y guárdelo en la carpeta src. El archivo dene tener la información siguiente:

  • Región de AWS en el que se encuentra su grupo de usuarios de Amazon Cognito

  • ID del grupo de usuarios de Amazon Cognito

  • ID de cliente de la aplicación

// replace the user pool region, id, and app client id details const awsmobile = { "aws_project_region": "put_your_region_here", "aws_cognito_region": "put_your_region_here", "aws_user_pools_id": "put_your_user_pool_id_here", "aws_user_pools_web_client_id": "put_your_user_pool_app_id_here" } export default awsmobile;
Desarrollador de aplicaciones

Importe y configure el servicio Amplify.

  1. En el archivo de punto de entrada de la aplicación (por ejemplo, App.js), importe y cargue el archivo aws-exports.js introduciendo las siguientes líneas de código:

    import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports';
  2. Según el siguiente ejemplo, configure el cliente de Amplify mediante el archivo aws-exports.js:

    // Configure Amplify in index file or root file Amplify.configure({ ...awsExports });

    Para más información, consulte Configuración de las categorías de Amplify en la documentación de Amplify.

Desarrollador de aplicaciones

Agregue el componente de interfaz de usuario de Authenticator.

Para mostrar el componente de interfaz de usuario de Authenticator, añada las siguientes líneas de código al archivo de punto de entrada de la aplicación (App.js):

import { Authenticator } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css';
nota

El fragmento de código de ejemplo importa el componente de interfaz de usuario Authenticator y el archivo de Amplify UI styles.css (obligatorio cuando se usan los temas prediseñados del componente).

El componente de interfaz de usuario Authenticator proporciona dos valores de retorno:

  • Detalles del usuario

  • Una función que puede invocarse para cerrar la sesión del usuario

Vea el siguiente ejemplo de componente:

function App() { return ( <Authenticator> {({ signOut, user }) => ( <div> <p>Welcome {user.username}</p> <button onClick={signOut}>Sign out</button> </div> )} </Authenticator> ); }
nota

Para ver un ejemplo de un archivo App.js, consulte la sección de información adicional de este patrón.

Desarrollador de aplicaciones

(Opcional) Recupere la información de la sesión.

Una vez autenticado un usuario, puede recuperar sus datos de sesión del cliente Amplify. Por ejemplo, puede recuperar el token web JSON (JWT) de la sesión de un usuario para autenticar las solicitudes de su sesión en una API de backend.

Consulte el siguiente ejemplo de un encabezado de solicitud que incluye un JWT:

import { fetchAuthSession } from 'aws-amplify/auth'; (await fetchAuthSession()).tokens?.idToken?.toString();
Desarrollador de aplicaciones

Resolución de problemas

ProblemaSolución

Los usuarios nuevos no pueden registrarse en la aplicación.

Asegúrese de que su grupo de usuarios de Amazon Cognito esté configurado para permitir que los usuarios puedan registrarse ellos mismos en el grupo de usuarios.

  • Inicie sesión en la Consola de administración de AWS consola de Amazon Cognito y ábrala.

  • En el panel de navegación izquierdo, elija Grupos de usuarios.

  • Elija su grupo de usuario de la lista.

  • En General Settings (Configuración general), elija Policies (Políticas).

  • Seleccione Permitir que los usuarios se registren por sí mismos.

El componente de autenticación dejó de funcionar después de actualizar de la v5 a la v6.

La categoría Auth ha pasado a un enfoque funcional y ha denominado parámetros en Amplify v6. Ahora debe importar la función APIs directamente desde la aws-amplify/auth ruta. Para más información, consulte Migración de v5 a v6 en la documentación de Amplify.

Recursos relacionados

Información adicional

El archivo App.js debe contener el siguiente código:

import './App.css'; import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports'; import { fetchAuthSession } from 'aws-amplify/auth'; import { Authenticator } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css'; Amplify.configure({ ...awsExports }); let token = (await fetchAuthSession()).tokens?.idToken?.toString(); function App() { return ( <Authenticator> {({ signOut, user }) => ( <div> <p>Welcome {user.username}</p> <p>Your token is: {token}</p> <button onClick={signOut}>Sign out</button> </div> )} </Authenticator> ); } export default App;