Definizione del trigger Lambda di una richiesta di autenticazione - 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à.

Definizione del trigger Lambda di una richiesta di autenticazione

Trigger Lambda di richieste
Definizione di una richiesta di autenticazione

Amazon Cognito richiama questo trigger per avviare il flusso di autenticazione personalizzato.

La richiesta per questo trigger Lambda include session. Il parametro session è una matrice contenente tutte le sfide a cui l'utente viene sottoposto nel processo di autenticazione in corso. La richiesta include anche il risultato corrispondente. La matrice session archivia i dettagli della sfida (ChallengeResult) in ordine cronologico. La richiesta session[0] rappresenta la prima sfida che l'utente riceve.

Puoi fare in modo che Amazon Cognito verifichi le password degli utenti prima di emettere le tue richieste personalizzate. Tutti i trigger Lambda associati alla categoria Autenticazione delle quote del tasso di richiesta verranno eseguiti quando si esegue l'autenticazione SRP in un flusso di richiesta personalizzato. Ecco una panoramica del processo:

  1. La tua app avvia la procedura di accesso chiamando InitiateAuth o AdminInitiateAuth con la mappatura AuthParameters. I parametri devono includere CHALLENGE_NAME: SRP_A, e i valori per SRP_A e USERNAME.

  2. Amazon Cognito invoca il tuo trigger Lambda define auth challenge con una sessione iniziale contenente challengeName: SRP_A e challengeResult: true.

  3. Dopo aver ricevuto questi input, la funzione Lambda risponde con challengeName: PASSWORD_VERIFIER, issueTokens: false, failAuthentication: false.

  4. Se la verifica della password ha esito positivo, Amazon Cognito richiama nuovamente la funzione Lambda con una nuova sessione contenente challengeName: PASSWORD_VERIFIER e challengeResult: true.

  5. La funzione Lambda avvia le tue sifde personalizzate rispondendo con challengeName: CUSTOM_CHALLENGE, issueTokens: false e failAuthentication: false. Se non desideri avviare il flusso di autenticazione personalizzato con la verifica della password, è possibile avviare l'accesso con la mappa AuthParameters che include CHALLENGE_NAME: CUSTOM_CHALLENGE.

  6. Il loop di sfide si ripete finché non viene data risposta a tutte le sfide.

Parametri del trigger Lambda di definizione delle richieste di autenticazione

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei parametri comuni aggiunti da Amazon Cognito a tutte le richieste.

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean } }

Parametri di richiesta di definizione sfida di autenticazione

Quando Amazon Cognito richiama la tua funzione Lambda, fornisce i seguenti parametri:

userAttributes

Una o più coppie nome-valore che rappresentano gli attributi utente.

userNotFound

Valore booleano che viene popolato da Amazon Cognito quando PreventUserExistenceErrors è impostato su ENABLED per il client del bacino d'utenza. Un valore true indica che l'ID utente (nome utente, indirizzo e-mail e altri dettagli) non corrisponde ad alcun utente esistente. Quando PreventUserExistenceErrors è impostato su ENABLED, il servizio non informa l'app riguardo a utenti inesistenti. Raccomandiamo che le tue funzioni Lambda mantengano la stessa esperienza utente e tengano conto della latenza. In questo modo, l'intermediario non può rilevare comportamenti diversi quando l'utente esiste o non esiste.

session

Una matrice di elementi ChallengeResult. Ognuna contiene i seguenti elementi:

challengeName

Uno dei seguenti tipi di richieste: CUSTOM_CHALLENGE, SRP_A, PASSWORD_VERIFIER, SMS_MFA, DEVICE_SRP_AUTH, DEVICE_PASSWORD_VERIFIER o ADMIN_NO_SRP_AUTH.

Quando la funzione Definisci la sfida di autenticazione genera una sfida PASSWORD_VERIFIER per un utente che ha impostato l'autenticazione a più fattori, viene completata da Amazon Cognito con una sfida SMS_MFA. Nella funzione, includi la gestione degli eventi di input da sfide SMS_MFA. Non è necessario richiamare la sfida SMS_MFA dalla funzione Definisci la sfida di autenticazione.

Importante

Quando la funzione determina se un utente ha completato l'autenticazione ed è necessario emettere token, controlla sempre challengeName nella funzione Definisci la sfida di autenticazione e verifica che corrisponda al valore previsto.

challengeResult

Imposta su true se l'utente ha completato con successo la sfida o altrimenti su false.

challengeMetaData

Il tuo nome per la sfida personalizzata. Usato solo se challengeName è CUSTOM_CHALLENGE.

clientMetadata

Una o più coppie chiave-valore che è possibile fornire come input personalizzato alla funzione Lambda specificata per il trigger di definizione di una richiesta di autenticazione. Puoi trasmettere questi dati alla funzione Lambda utilizzando il parametro ClientMetadata nelle operazioni API AdminRespondToAuthChallenge e RespondToAuthChallenge. La richiesta che richiama la funzione define auth challenge non include i dati trasmessi al parametro ClientMetadata nelle operazioni API AdminInitiateAuth e InitiateAuth.

Parametri di risposta di definizione sfida di autenticazione

Nella risposta, puoi restituire la prossima fase del processo di autenticazione.

challengeName

Una stringa che include il nome della sfida successiva. Se desideri presentare una nuova sfida al tuo utente, specifica qui il nome della sfida.

issueTokens

Se stabilisci che l'utente abbia completato abbastanza sfide per essere autenticato, imposta su true. Se l'utente non ha soddisfatto i criteri delle sfide, imposta su false.

failAuthentication

Se desideri terminare l'attuale processo di autenticazione, imposta su true. Per continuare il processo di autenticazione corrente, imposta su false.

Definizione di un esempio di una richiesta di autenticazione

Questo esempio definisce una serie di sfide per l'autenticazione e rilascia token solo se l'utente completa correttamente tutte le sfide.

Node.js
const handler = async (event) => { if ( event.request.session.length == 1 && event.request.session[0].challengeName == "SRP_A" ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "PASSWORD_VERIFIER"; } else if ( event.request.session.length == 2 && event.request.session[1].challengeName == "PASSWORD_VERIFIER" && event.request.session[1].challengeResult == true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length == 3 && event.request.session[2].challengeName == "CUSTOM_CHALLENGE" && event.request.session[2].challengeResult == true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length == 4 && event.request.session[3].challengeName == "CUSTOM_CHALLENGE" && event.request.session[3].challengeResult == true ) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } return event; }; export { handler }