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:
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.](images/cognito-user-pool-auth-flow-srp.png)
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
-
L'app richiede all'utente il nome utente e password.
-
Il nome utente e la password vengono inclusi come parametri in
InitiateAuth
. -
Amazon Cognito restituisce una verifica
SMS_MFA
e un identificatore di sessione. -
L'app richiede all'utente di immettere il MFA codice dal telefono.
-
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.
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.
Argomenti
- Flusso di autenticazione lato client
- Flusso di autenticazione lato server
- Flusso di autenticazione personalizzato
- Flusso di autenticazione integrato e sfide
- Flusso di autenticazione personalizzato e sfide
- Utilizza SRP la verifica della password nel flusso di autenticazione personalizzato
- Flusso di autenticazione amministratore
- Flusso di autenticazione per la migrazione degli utenti
Flusso di autenticazione lato client
Il seguente processo funziona per le app utente lato client che crei con o con. AWS AmplifyAWS SDKs
-
L'utente inserisce il nome utente e la password nell'app.
-
L'app richiama l'
InitiateAuth
operazione 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
-
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. -
Se
RespondToAuthChallenge
restituisce una sessione, l'app chiamaRespondToAuthChallenge
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
APIInitiateAuth
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'
AdminRespondToAuthChallenge
APIoperazione (anziché).RespondToAuthChallenge
L'AdminRespondToAuthChallenge
APIoperazione 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 comeADMIN_NO_SRP_AUTH
) nel parametroExplicitAuthFlow
quando chiamiCreateUserPoolClient
oUpdateUserPoolClient
. -
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'InitiateAuth
APIoperazione 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. QuandoDefineAuthChallenge
restituisceCUSTOM_CHALLENGE
come sfida sucessiva, il flusso di autenticazione chiamaCreateAuthChallenge
. Il trigger LambdaCreateAuthChallenge
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
conCUSTOM_AUTH
as.Authflow
NellaAuthParameters
mappa, la richiesta proveniente dall'app includeSRP_A:
(il valore SRP A) eCHALLENGE_NAME: SRP_A
. -
Il flusso
CUSTOM_AUTH
richiama il trigger LambdaDefineAuthChallenge
con una sessione iniziale dichallengeName: SRP_A
echallengeResult: true
. La tua funzione Lambda risponde conchallengeName: PASSWORD_VERIFIER
,issueTokens: false
efailAuthentication: false
. -
L'app deve quindi chiamare
RespondToAuthChallenge
withchallengeName: PASSWORD_VERIFIER
e gli altri parametri richiesti SRP nellachallengeResponses
mappa. -
Se Amazon Cognito verifica la password,
RespondToAuthChallenge
richiama il trigger LambdaDefineAuthChallenge
con una seconda sessione dichallengeName: PASSWORD_VERIFIER
echallengeResult: true
. A quel punto, il triggerDefineAuthChallenge
Lambda risponde conchallengeName: 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.