Flusso di autenticazione del bacino d'utenza - Amazon Cognito

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à.

Flusso di autenticazione del bacino d'utenza

Amazon Cognito include diversi metodi per autenticare gli utenti. Tutti i pool di utenti, indipendentemente dal fatto che dispongano o meno di un dominio, possono autenticare gli utenti nei pool di utenti. API Se aggiungi un dominio al pool di utenti, puoi utilizzare gli endpoint del pool di utenti. I pool di utenti API supportano una varietà di modelli di autorizzazione e flussi di API richieste.

Per verificare l'identità degli utenti, Amazon Cognito supporta i flussi di autenticazione che integrano nuovi tipi di richieste, in aggiunta alle password. L'autenticazione di Amazon Cognito richiede in genere l'implementazione di due API operazioni nel seguente ordine:

Public authentication

InitiateAuthe non RespondToAuthChallenge sono autenticati APIs per l'uso con client di app pubbliche lato client.

Server-side authentication

AdminInitiateAuthe AdminRespondToAuthChallenge richiedono IAM credenziali e sono adatti per client di app riservate lato server.

L'autenticazione di un utente viene effettuata rispondendo a richieste successive fino a che l'autenticazione non riesce o Amazon Cognito emette token per l'utente. Puoi ripetere questi passaggi con Amazon Cognito, in un processo che include richieste di autenticazione di tipo diverso, per supportare qualsiasi flusso di autenticazione personalizzato.

Authentication flow diagram showing user, mobile/web app, and user pool interactions for token issuance.

In genere, l'app genera una richiesta di raccolta di informazioni dall'utente e invia tali informazioni in una API richiesta ad Amazon Cognito. Prendi in considerazione un InitiateAuth flusso in un pool di utenti in cui hai configurato l'utente con l'autenticazione a più fattori (). MFA

  1. L'app richiede all'utente il nome utente e password.

  2. Il nome utente e la password vengono inclusi come parametri in InitiateAuth.

  3. Amazon Cognito restituisce una verifica SMS_MFA e un identificatore di sessione.

  4. L'app richiede all'utente di immettere il MFA codice dal telefono.

  5. Includere il codice e l'identificatore di sessione nella richiesta RespondToAuthChallenge.

A seconda delle caratteristiche del pool di utenti, è possibile dover rispondere a diverse verifiche InitiateAuth prima che l'app recuperi i token da Amazon Cognito. Amazon Cognito include una stringa di sessione nella risposta a ciascuna richiesta. Per combinare API le tue richieste in un flusso di autenticazione, includi la stringa di sessione contenuta nella risposta alla richiesta precedente in ogni richiesta successiva. Per impostazione predefinita, gli utenti hanno a disposizione tre minuti per completare ogni verifica prima della scadenza della stringa della sessione. Per modificare questo periodo, modificare il client dell'app Authentication flow session duration (Durata della sessione del flusso di autenticazione). La procedura seguente descrive come modificare questa impostazione nella configurazione del client dell'app.

Nota

Le impostazioni della durata della sessione del flusso di autenticazione si applicano all'autenticazione con i pool di utenti di Amazon Cognito. API L'interfaccia utente ospitata di Amazon Cognito imposta la durata della sessione su 3 minuti per l'autenticazione a più fattori e su 8 minuti per i codici di reimpostazione della password.

Amazon Cognito console
Configurare la durata della sessione del flusso di autenticazione dell'app client (AWS Management Console)
  1. Nella scheda App integration (Integrazione app) del pool di utenti, seleziona il nome del client dell'app nel container App clients and analytics (Client di app e analisi dei dati).

  2. Scegli Modifica nel container Informazioni sul client dell'app.

  3. Modifica il valore della durata della sessione del flusso di autenticazione sulla durata di validità desiderata, in minuti, per SMS MFA i codici. Ciò modifica anche il tempo che ogni utente ha a disposizione per completare qualsiasi richiesta di autenticazione nel client dell'app.

  4. Seleziona Salvataggio delle modifiche.

Amazon Cognito API
Per configurare la durata della sessione del flusso di autenticazione del client dell'app (Amazon CognitoAPI)
  1. Prepara una richiesta UpdateUserPoolClient con le impostazioni di un pool di utenti esistente in base a una richiesta DescribeUserPoolClient. La richiesta UpdateUserPoolClient deve includere tutte le proprietà client dell'app esistenti.

  2. Imposta il valore in base AuthSessionValidity alla durata di validità desiderata, in minuti, per SMS MFA i codici. Ciò modifica anche il tempo che ogni utente ha a disposizione per completare qualsiasi richiesta di autenticazione nel client dell'app.

Per ulteriori informazioni sui client di app, consulta Client dell'app pool di utenti.

Puoi utilizzare i AWS Lambda trigger per personalizzare il modo in cui gli utenti effettuano l'autenticazione. Questi trigger generano e verificano le proprie richieste come parte del flusso di autenticazione.

Inoltre puoi utilizzare il flusso di autenticazione amministratore per server back-end protetti. Con il flusso di autenticazione per la migrazione degli utenti, tale migrazione è possibile senza richiedere agli utenti di reimpostare le password.

Comportamento di blocco di Amazon Cognito in caso di tentativi di accesso non riusciti

Dopo cinque tentativi falliti di accesso non autenticati o IAM autenticati con una password, Amazon Cognito blocca l'utente per un secondo. La durata del blocco quindi raddoppia dopo ogni ulteriore tentativo non riuscito, fino a un massimo di circa 15 minuti. I tentativi effettuati durante un periodo di blocco generano un'eccezione Password attempts exceeded e non influiscono sulla durata dei periodi di blocco successivi. Per un numero cumulativo di tentativi di accesso non riusciti n, ad esclusione delle eccezioni Password attempts exceeded, Amazon Cognito blocca l'utente per 2^(n-5) secondi. Per ripristinare lo stato iniziale n=0 del blocco, l'utente deve effettuare un accesso riuscito dopo la scadenza del periodo di blocco oppure non deve iniziare alcun tentativo di accesso per 15 minuti consecutivi in qualsiasi momento dopo il blocco. Questo comportamento è soggetto a modifiche. Questo comportamento non si applica alle sfide personalizzate a meno che non eseguano anche l'autenticazione basata su password.

Flusso di autenticazione lato client

Il seguente processo funziona per le app utente lato client che crei con o con. AWS AmplifyAWS SDKs

  1. L'utente inserisce il nome utente e la password nell'app.

  2. L'app richiama l'InitiateAuthoperazione con il nome utente dell'utente e i dettagli di Secure Remote Password (SRP).

    Questa API operazione restituisce i parametri di autenticazione.

    Nota

    L'app genera SRP dettagli con le SRP funzionalità di Amazon Cognito integrate. AWS SDKs

  3. L'app chiama l'operazione RespondToAuthChallenge. Se la chiamata va a buon fine, Amazon Cognito restituisce i token dell'utente e il flusso di autenticazione è completo.

    Se Amazon Cognito richiede un ulteriore fattore di autenticazione, la chiamata a RespondToAuthChallenge non restituisce token. Invece, la chiamata restituisce una sessione.

  4. Se RespondToAuthChallenge restituisce una sessione, l'app chiama RespondToAuthChallenge nuovamente, questa volta con la sessione e la risposta alla sfida (ad esempio, MFA codice).

Flusso di autenticazione lato server

Se non disponi di un'app utente, ma utilizzi un'app di backend o lato server sicura Java, Ruby o Node.js, puoi utilizzare l'app autenticata lato server per API i pool di utenti di Amazon Cognito.

Per le app lato server, l'autenticazione dei bacini d'utenza è analoga a quella per le app lato client, con le seguenti eccezioni:

  • L'app lato server richiama l'operazione (anziché). AdminInitiateAuth API InitiateAuth Questa operazione richiede AWS credenziali con autorizzazioni che includono e. cognito-idp:AdminInitiateAuth cognito-idp:AdminRespondToAuthChallenge Questa operazione restituisce i parametri di autenticazione richiesti.

  • Dopo che l'app sul lato server ha i parametri di autenticazione, chiama l'AdminRespondToAuthChallengeAPIoperazione (anziché). RespondToAuthChallenge L'AdminRespondToAuthChallengeAPIoperazione ha esito positivo solo quando si forniscono le credenziali. AWS

Per ulteriori informazioni sulla firma delle API richieste Amazon Cognito con AWS credenziali, consulta il processo di firma Signature Version 4 nella AWS Guida generale.

Le AdminRespondToAuthChallenge API operazioni AdminInitiateAuth and non possono accettare credenziali username-and-password utente per l'accesso da amministratore, a meno che tu non le abiliti esplicitamente a farlo in uno dei seguenti modi:

  • Include ALLOW_ADMIN_USER_PASSWORD_AUTH (precedentemente noto come ADMIN_NO_SRP_AUTH) nel parametro ExplicitAuthFlow quando chiami CreateUserPoolClient o UpdateUserPoolClient.

  • Aggiungi ALLOW_ADMIN_USER_PASSWORD_AUTH all'elenco dei flussi di autenticazione per il client dell'app. Configura i client di app nella scheda App integration (Integrazione app) del bacino d'utenza, sotto App clients and analytics (Client di app e analisi). Per ulteriori informazioni, consulta Client dell'app pool di utenti.

Flusso di autenticazione personalizzato

I pool di utenti di Amazon Cognito consentono inoltre di utilizzare flussi di autenticazione personalizzati, che possono aiutarti a creare un modello di autenticazione basato su sfida/risposta utilizzando i trigger. AWS Lambda

Nota

Non puoi utilizzare le funzionalità di sicurezza avanzate per le credenziali compromesse e l'autenticazione adattiva con flussi di autenticazione personalizzati. Per ulteriori informazioni, consulta Aggiunta di sicurezza avanzata a un bacino d'utenza.

Il flusso di autenticazione personalizzato permette cicli personalizzati di richieste e risposte per soddisfare diversi requisiti. Il flusso inizia con una chiamata all'InitiateAuthAPIoperazione che indica il tipo di autenticazione da utilizzare e fornisce eventuali parametri di autenticazione iniziali. Amazon Cognito risponde alla chiamata InitiateAuth con uno dei seguenti tipi di informazione:

  • Una sfida all'utente, insieme a una sessione e parametri.

  • Un errore se l'utente non si autentica correttamente.

  • Token ID, di accesso e di aggiornamento, se i parametri forniti nella chiamata InitiateAuth sono sufficienti per l'accesso dell'utente. (In genere l'utente o l'app devono prima rispondere a una sfida, ma è il tuo codice personalizzato a decidere se è il caso.)

Se Amazon Cognito risponde alla chiamata InitiateAuth con una sfida, l'app raccoglierà più input e chiamerà l'operazione RespondToAuthChallenge. Questa chiamata fornisce le risposte alla sfida e restituisce la sessione. Amazon Cognito risponde alla chiamata RespondToAuthChallenge in modo simile alla chiamata InitiateAuth. Se l'utente ha effettuato l'accesso, Amazon Cognito fornisce i token, se non ha effettuato l'accesso, Amazon Cognito restituisce un'altra sfida o un errore. Se Amazon Cognito restituisce un'altra sfida, la sequenza si ripete: l'app chiama RespondToAuthChallenge fino a quando l'utente non riesce a effettuare l'accesso o non viene restituito un errore. Per maggiori dettagli sulle RespondToAuthChallenge API operazioni InitiateAuth e, consulta la APIdocumentazione.

Flusso di autenticazione integrato e sfide

Amazon Cognito contiene ChallengeName valori AuthFlow e funzionalità integrate che consentono a un flusso di autenticazione standard di convalidare nome utente e password tramite il protocollo Secure Remote Password ()SRP. AWS SDKsHanno un supporto integrato per questi flussi con Amazon Cognito.

Il flusso inizia inviando USER_SRP_AUTH come AuthFlow a InitiateAuth. Dovrai inviare anche i valori USERNAME e SRP_A in AuthParameters. Se la chiamata InitiateAuth ha esito positivo, la risposta include PASSWORD_VERIFIER come ChallengeName e SRP_B nei parametri di sfida. L'app chiama quindi RespondToAuthChallenge con PASSWORD_VERIFIER ChallengeName e i parametri necessari in ChallengeResponses. Se la chiamata a RespondToAuthChallenge ha esito positivo e l'utente effettua l'accesso, Amazon Cognito emette token. Se hai attivato l'autenticazione a più fattori (MFA) per l'utente, Amazon Cognito restituisce ChallengeName il valore di. SMS_MFA L'app può fornire il codice necessario tramite un'altra chiamata a RespondToAuthChallenge.

Flusso di autenticazione personalizzato e sfide

Un'app è in grado di avviare un flusso di autenticazione chiamando InitiateAuth con CUSTOM_AUTH come Authflow. Nel caso di un flusso di autenticazione personalizzato, tre trigger Lambda controllano le sfide e la verifica delle risposte.

  • Il trigger Lambda DefineAuthChallenge usa come input una matrice di sessioni di sfide e risposte precedenti. Quindi genera il nome della sfida successiva e i booleani che indicano se l'utente è autenticato e deve ricevere i token o meno. Questo trigger Lambda è una macchina a stati che controlla il percorso dell'utente attraverso le richieste.

  • Il trigger Lambda CreateAuthChallenge utilizza il nome di una sfida come input e genera la sfida e i parametri per valutare la risposta. Quando DefineAuthChallenge restituisce CUSTOM_CHALLENGE come sfida sucessiva, il flusso di autenticazione chiama CreateAuthChallenge. Il trigger Lambda CreateAuthChallenge passa il tipo di sfida successiva nel parametro di metadati della richiesta.

  • La funzione Lambda VerifyAuthChallengeResponse valuta la risposta e restituisce un valore booleano per indicare se la risposta era valida.

Un flusso di autenticazione personalizzato può anche utilizzare una combinazione di sfide integrate, come SRP la verifica e MFA l'autenticazione della password. SMS Può utilizzare sfide personalizzate come CAPTCHA domande segrete.

Utilizza SRP la verifica della password nel flusso di autenticazione personalizzato

Se desideri includerla SRP in un flusso di autenticazione personalizzato, devi iniziare conSRP.

  • Per avviare SRP la verifica della password in un flusso personalizzato, l'app chiama InitiateAuth con CUSTOM_AUTH as. Authflow Nella AuthParameters mappa, la richiesta proveniente dall'app include SRP_A: (il valore SRP A) eCHALLENGE_NAME: SRP_A.

  • Il flusso CUSTOM_AUTH richiama il trigger Lambda DefineAuthChallenge con una sessione iniziale di challengeName: SRP_A e challengeResult: true. La tua funzione Lambda risponde con challengeName: PASSWORD_VERIFIER, issueTokens: false e failAuthentication: false.

  • L'app deve quindi chiamare RespondToAuthChallenge with challengeName: PASSWORD_VERIFIER e gli altri parametri richiesti SRP nella challengeResponses mappa.

  • Se Amazon Cognito verifica la password, RespondToAuthChallenge richiama il trigger Lambda DefineAuthChallenge con una seconda sessione di challengeName: PASSWORD_VERIFIER e challengeResult: true. A quel punto, il trigger DefineAuthChallenge Lambda risponde con challengeName: CUSTOM_CHALLENGE per avviare la richiesta personalizzata.

  • Se MFA è abilitato per un utente, dopo che Amazon Cognito ha verificato la password, all'utente viene chiesto di effettuare la configurazione o l'accesso. MFA

Nota

La pagina Web di accesso ospitata di Amazon Cognito non può attivare i Trigger Lambda di richieste di autenticazione personalizzate.

Per ulteriori informazioni sui trigger lambda, compreso il codice di esempio, consulta Personalizzazione di flussi di lavoro di bacini d'utenza con trigger Lambda.

Flusso di autenticazione amministratore

La migliore pratica per l'autenticazione consiste nell'utilizzare le API operazioni descritte in SRP per la verifica della Flusso di autenticazione personalizzato password. AWS SDKsUtilizzano questo approccio e questo approccio li aiuta a utilizzarloSRP. Tuttavia, se si desidera evitare SRP i calcoli, è disponibile un set alternativo di API operazioni di amministrazione per i server di backend sicuri. Per queste implementazioni di amministrazione back-end, utilizza AdminInitiateAuth al posto di InitiateAuth. Inoltre, utilizza AdminRespondToAuthChallenge al posto di RespondToAuthChallenge. Poiché è possibile inviare la password come testo semplice, non è necessario eseguire SRP calcoli quando si utilizzano queste operazioni. Ecco un esempio:

AdminInitiateAuth Request { "AuthFlow":"ADMIN_USER_PASSWORD_AUTH", "AuthParameters":{ "USERNAME":"<username>", "PASSWORD":"<password>" }, "ClientId":"<clientId>", "UserPoolId":"<userPoolId>" }

Queste operazioni API di autenticazione di amministrazione richiedono credenziali per gli sviluppatori e utilizzano il processo di firma di AWS Signature Version 4 (SigV4). Queste operazioni sono disponibili in versione standard AWS SDKs, incluso Node.js, utile per le funzioni Lambda. Per utilizzare queste operazioni e fare loro accettare le password in testo normale, è necessario attivarle per l'app nella console. In alternativa, puoi passare ADMIN_USER_PASSWORD_AUTH per il parametro ExplicitAuthFlow nelle chiamate a CreateUserPoolClient o UpdateUserPoolClient. Le operazioni InitiateAuth e RespondToAuthChallenge non accettano ADMIN_USER_PASSWORD_AUTH AuthFlow.

Nella risposta di AdminInitiateAuth ChallengeParameters, l'attributo USER_ID_FOR_SRP, se presente, contiene il nome utente reale dell'utente e non un alias (come l'indirizzo e-mail o il numero di telefono). Nella chiamata a AdminRespondToAuthChallenge, in ChallengeResponses, è necessario passare questo nome utente nel parametro USERNAME.

Nota

Dato che le implementazioni di amministrazione di back-end utilizzano il flusso di autenticazione di amministrazione, il flusso non supporta il tracciamento dei dispositivi. Quando abiliti il tracciamento dei dispositivi, l'autenticazione di amministrazione avviene correttamente, ma le chiamate per aggiornare i token di accesso non andranno a buon fine.

Flusso di autenticazione per la migrazione degli utenti

Il trigger Lambda per la migrazione degli utenti aiuta a migrare gli utenti da un sistema legacy di gestione degli utenti al bacino d'utenza. Se scegli il flusso di autenticazione USER_PASSWORD_AUTH, gli utenti non dovranno reimpostare le password durante la migrazione. Questo flusso invia le password degli utenti al servizio tramite una SSL connessione crittografata durante l'autenticazione.

Dopo aver migrato tutti gli utenti, passa ai flussi a un flusso più sicuro. SRP Il SRP flusso non invia alcuna password sulla rete.

Per ulteriori informazioni sui trigger Lambda, consulta Personalizzazione di flussi di lavoro di bacini d'utenza con trigger Lambda.

Per ulteriori informazioni sulla migrazione degli utenti con un trigger Lambda, consulta Importazione di utenti in bacini d'utenza con un trigger Lambda di migrazione utenti.