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.
Utilizzo
Sezione intitolata “Utilizzo”Aggiungere l’autenticazione al tuo sito React
Sezione intitolata “Aggiungere l’autenticazione al tuo sito React”Puoi aggiungere l’autenticazione al tuo sito React in due modi:
- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)
nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - ts#react-website#auth
- Compila i parametri richiesti
- Clicca su
Generate
pnpm nx g @aws/nx-plugin:ts#react-website#auth
yarn nx g @aws/nx-plugin:ts#react-website#auth
npx nx g @aws/nx-plugin:ts#react-website#auth
bunx nx g @aws/nx-plugin:ts#react-website#auth
Puoi anche eseguire una prova per vedere quali file verrebbero modificati
pnpm nx g @aws/nx-plugin:ts#react-website#auth --dry-run
yarn nx g @aws/nx-plugin:ts#react-website#auth --dry-run
npx nx g @aws/nx-plugin:ts#react-website#auth --dry-run
bunx nx g @aws/nx-plugin:ts#react-website#auth --dry-run
Opzioni
Sezione intitolata “Opzioni”Parametro | Tipo | Predefinito | Descrizione |
---|---|---|---|
project Obbligatorio | string | - | The root directory of the React website. |
cognitoDomain Obbligatorio | string | - | The cognito domain prefix to use |
allowSignup | boolean | Whether to allow self-signup | |
iacProvider | string | Inherit | The preferred IaC provider. By default this is inherited from your initial selection. |
Output del Generatore
Sezione intitolata “Output del Generatore”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
Infrastruttura
Sezione intitolata “Infrastruttura”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
Directorypackages/common/terraform
Directorysrc
Directoryapp/ Moduli Terraform per l’infrastruttura specifica di un progetto/generatore
- …
Directorycore/ Moduli generici riutilizzati dai moduli in
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
Directorypackages/common/terraform/src
Directorycore
Directoryuser-identity
- main.tf Modulo wrapper per la configurazione dell’identità
Directoryidentity
- identity.tf Infrastruttura principale dell’identità inclusi Cognito User Pool e Identity Pool
Directoryadd-callback-url
- add-callback-url.tf Modulo per aggiungere URL di callback ai client esistenti del user pool
Utilizzo dell’Infrastruttura
Sezione intitolata “Utilizzo dell’Infrastruttura”Dovrai aggiungere l’infrastruttura per l’identità utente al tuo stack, dichiarandola prima del sito web:
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.
Dovrai aggiungere il modulo per l’identità utente e assicurarti che il tuo sito web dipenda da esso:
# Distribuisci prima l'identità utente per aggiungerla alla configurazione runtimemodule "user_identity" { source = "../../common/terraform/src/core/user-identity"}
# Distribuisci il sito web dopo l'identità per includere la configurazione runtimemodule "my_website" { source = "../../common/terraform/src/app/static-websites/my-website"
providers = { aws.us_east_1 = aws.us_east_1 }
# Assicura che l'identità sia distribuita prima depends_on = [module.user_identity]}
Il modulo per l’identità utente aggiunge automaticamente la necessaria Configurazione Runtime per garantire che il tuo sito possa puntare al corretto Cognito User Pool per l’autenticazione.
Concessione Accesso agli Utenti Autenticati
Sezione intitolata “Concessione Accesso agli Utenti Autenticati”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à:
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'); }}
module "user_identity" { source = "../../common/terraform/src/core/user-identity"}
module "my_api" { source = "../../common/terraform/src/app/apis/my-api"}
# Aggiungi permessi per gli utenti autenticati di invocare Fast APIresource "aws_iam_role_policy" "authenticated_fast_api_invoke" { name = "authenticated-user-invoke-my-api" role = module.user_identity.authenticated_role_name
policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "execute-api:Invoke" ] Resource = "${module.my_api.api_execution_arn}/*" } ] })}