Autentica gli utenti delle applicazioni React esistenti utilizzando l'interfaccia utente di Amazon Cognito e Amplify AWS - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Autentica gli utenti delle applicazioni React esistenti utilizzando l'interfaccia utente di Amazon Cognito e Amplify AWS

Creato da Daniel Kozhemyako () AWS

Ambiente: produzione

Tecnologie: app Web e mobili; Sicurezza, identità, conformità; Produttività aziendale; Analisi

AWSservizi: Amazon Cognito; AWS Amplify; Amazon Connect; Console di gestione AWS

Riepilogo

Questo modello mostra come aggiungere funzionalità di autenticazione a un'applicazione React frontend esistente utilizzando una libreria AWS Amplify UI e un pool di utenti Amazon Cognito.

Il modello utilizza Amazon Cognito per fornire l'autenticazione, l'autorizzazione e la gestione degli utenti per l'applicazione. Utilizza anche un componente di Amplify UI, una libreria open source che estende le funzionalità AWS Amplify di sviluppo dell'interfaccia utente (UI). Il componente Authenticator UI gestisce le sessioni di accesso ed esegue il flusso di lavoro connesso al cloud che autentica gli utenti tramite Amazon Cognito.

Dopo aver implementato questo modello, gli utenti possono accedere utilizzando una delle seguenti credenziali:

  • Nome utente e password

  • Provider di identità social, come Apple, Facebook, Google e Amazon

  • Provider di identità aziendali compatibili con la SAML versione 2.0 o con OpenID Connect () OIDC

Nota: per creare un componente dell'interfaccia utente di autenticazione personalizzato, puoi eseguire il componente dell'interfaccia utente Authenticator in modalità headless.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • Questo modello si applica solo alle applicazioni web React.

  • Questo modello utilizza un componente Amplify UI predefinito. La soluzione non copre i passaggi necessari per implementare un componente dell'interfaccia utente personalizzato.

Versioni del prodotto

  • Amplify UI 6.1.3 o versione successiva (Gen 1)

  • Amplify 6.0.16 o versione successiva (Gen 1)

Architettura

Architettura Target

Il diagramma seguente mostra un'architettura che utilizza Amazon Cognito per autenticare gli utenti per un'applicazione web React.

Amazon Cognito autentica gli utenti per un'applicazione web React.

Strumenti

Servizi AWS

  • Amazon Cognito fornisce autenticazione, autorizzazione e gestione degli utenti per app Web e mobili.

Altri strumenti

  • Amplify UI è una libreria di interfaccia utente open source che fornisce componenti personalizzabili che puoi connettere al cloud.

  • Node.js è un ambiente di JavaScript runtime basato sugli eventi progettato per la creazione di applicazioni di rete scalabili.

  • npm è un registro software che viene eseguito in un ambiente Node.js e viene utilizzato per condividere o prendere in prestito pacchetti e gestire la distribuzione di pacchetti privati.

Best practice

Se stai creando una nuova applicazione, ti consigliamo di utilizzare Amplify Gen 2.

Epiche

AttivitàDescrizioneCompetenze richieste

Crea un pool di utenti.

Crea un pool di utenti Amazon Cognito. Configura le opzioni di accesso e i requisiti di sicurezza del pool di utenti in base al tuo caso d'uso.

Sviluppatore di app

Aggiungi un client per l'app.

Configura un client di app per pool di utenti. Questo client è necessario per consentire all'applicazione di interagire con il pool di utenti di Amazon Cognito.

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Installare le dipendenze.

Per installare i @aws-amplify/ui-react pacchetti aws-amplify and, esegui il seguente comando dalla directory principale dell'applicazione:

npm i @aws-amplify/ui-react aws-amplify
Sviluppatore di app

Configura il pool di utenti.

In base all'esempio seguente, create un aws-exports.js file e salvatelo nella src cartella. Il file deve includere le seguenti informazioni:

  • Regione AWS in cui si trova il tuo pool di utenti Amazon Cognito

  • ID del pool di utenti di Amazon Cognito

  • ID client dell'app

// 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;
Sviluppatore di app

Importa e configura il servizio Amplify.

  1. Nel file del punto di ingresso dell'applicazione (ad esempio,App.js), importate e caricate il aws-exports.js file inserendo le seguenti righe di codice:

    import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports';
  2. In base all'esempio seguente, configura il client Amplify utilizzando il file: aws-exports.js

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

    Per ulteriori informazioni, consulta Configura le categorie Amplify nella documentazione di Amplify.

Sviluppatore di app

Aggiungi il componente Authenticator UI.

Per visualizzare il componente dell'Authenticatorinterfaccia utente, aggiungete le seguenti righe di codice al file del punto di ingresso dell'applicazione ()App.js:

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

Nota: lo snippet di codice di esempio importa il componente Authenticator UI e il file Amplify UI styles.css, necessario quando si utilizzano i temi predefiniti del componente.

Il componente Authenticator UI fornisce due valori restituiti:

  • Dettagli dell'utente

  • Una funzione che può essere invocata per disconnettere l'utente

Vedi il seguente componente di esempio:

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

Nota: per un App.js file di esempio, consulta la sezione Informazioni aggiuntive di questo modello.

Sviluppatore di app

(Facoltativo) Recupera le informazioni sulla sessione.

Dopo l'autenticazione di un utente, puoi recuperare i dati relativi alla sua sessione dal client Amplify. Ad esempio, puoi recuperare il JSON web token (JWT) dalla sessione di un utente in modo da poter autenticare le richieste dalla sua sessione a un backend. API

Guarda il seguente esempio di intestazione di richiesta che include: JWT

import { fetchAuthSession } from 'aws-amplify/auth'; (await fetchAuthSession()).tokens?.idToken?.toString();
Sviluppatore di app

Risoluzione dei problemi

ProblemaSoluzione

I nuovi utenti non possono iscriversi all'applicazione.

Come segue, assicurati che il tuo pool di utenti Amazon Cognito sia configurato per consentire agli utenti di registrarsi per far parte del pool di utenti:

  • Accedi a AWS Management Console, quindi apri la console Amazon Cognito.

  • Nel riquadro di navigazione a sinistra, scegli Pool di utenti.

  • Scegli il tuo pool di utenti dall'elenco.

  • In Impostazioni generali, scegli Politiche.

  • Scegli Consenti agli utenti di registrarsi.

Il componente di autenticazione ha smesso di funzionare dopo l'aggiornamento dalla v5 alla v6.

La Auth categoria è passata a un approccio funzionale e a parametri denominati in Amplify v6. Ora devi importare il funzionale APIs direttamente dal percorso. aws-amplify/auth Per ulteriori informazioni, consulta Migrare dalla v5 alla v6 nella documentazione di Amplify.

Risorse correlate

Informazioni aggiuntive

Il App.js file deve contenere il seguente codice:

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;