

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
<a name="user-pool-lambda-define-auth-challenge"></a>

Il trigger define auth challenge è una funzione Lambda che mantiene la sequenza di sfida in un flusso di autenticazione personalizzato. Dichiara il successo o il fallimento della sequenza di sfida e imposta la sfida successiva se la sequenza non è ancora completa.

![\[Trigger Lambda di richieste\]](http://docs.aws.amazon.com/it_it/cognito/latest/developerguide/images/lambda-challenges1.png)


**Definisci la sfida di autenticazione**  
 Amazon Cognito richiama questo trigger per avviare il [flusso di autenticazione personalizzato](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon-cognito-user-pools-custom-authentication-flow).

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.

**Topics**
+ [Parametri del trigger Lambda di definizione delle richieste di autenticazione](#cognito-user-pools-lambda-trigger-syntax-define-auth-challenge)
+ [Definizione di un esempio di una richiesta di autenticazione](#aws-lambda-triggers-define-auth-challenge-example)

## Parametri del trigger Lambda di definizione delle richieste di autenticazione
<a name="cognito-user-pools-lambda-trigger-syntax-define-auth-challenge"></a>

La richiesta passata da Amazon Cognito a questa funzione Lambda è una combinazione dei parametri seguenti e dei [parametri comuni](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) 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
<a name="cognito-user-pools-lambda-trigger-syntax-define-auth-challenge-request"></a>

 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.

**sessione**  
Una matrice di elementi `ChallengeResult`. Ognuna contiene i seguenti elementi:    
**challengeName**  
Uno dei seguenti tipi di sfida:`CUSTOM_CHALLENGE`,`SRP_A`,`PASSWORD_VERIFIER`,`SMS_MFA`,`EMAIL_OTP`,`SOFTWARE_TOKEN_MFA`, `DEVICE_SRP_AUTH``DEVICE_PASSWORD_VERIFIER`, o`ADMIN_NO_SRP_AUTH`.  
Quando la funzione define auth challenge genera una `PASSWORD_VERIFIER` sfida per un utente che ha configurato l'autenticazione a più fattori, Amazon Cognito la segue con `SMS_MFA` una sfida`EMAIL_OTP`, o. `SOFTWARE_TOKEN_MFA` Queste sono le istruzioni per un codice di autenticazione a più fattori. Nella tua funzione, includi la gestione degli eventi di input e delle `SMS_MFA` sfide`EMAIL_OTP`. `SOFTWARE_TOKEN_MFA` Non è necessario richiamare alcuna sfida MFA nella funzione define auth challenge.  
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. Per passare questi dati alla funzione Lambda, puoi utilizzare il `ClientMetadata` parametro nelle operazioni [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. La richiesta che richiama la funzione define auth challenge non include i dati passati nel ClientMetadata parametro e nelle operazioni API. [AdminInitiateAuth[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)

### Parametri di risposta di definizione sfida di autenticazione
<a name="cognito-user-pools-lambda-trigger-syntax-define-auth-challenge-response"></a>

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
<a name="aws-lambda-triggers-define-auth-challenge-example"></a>

Questo esempio definisce una serie di sfide per l'autenticazione e rilascia token solo se l'utente completa correttamente tutte le sfide. Quando gli utenti completano l'autenticazione SRP con le `PASSWORD_VERIFIER` sfide `SRP_A` e, questa funzione passa loro una risposta `CUSTOM_CHALLENGE` che richiama il trigger create auth challenge. In combinazione con il nostro [esempio di sfida di creazione di autenticazione, questa sequenza fornisce una sfida](user-pool-lambda-create-auth-challenge.md#aws-lambda-triggers-create-auth-challenge-example) CAPTCHA per la sfida tre e una domanda di sicurezza per la sfida quattro.

Dopo che l'utente ha risolto il CAPTCHA e risposto alla domanda di sicurezza, questa funzione conferma che il pool di utenti può emettere token. L'autenticazione SRP non è richiesta; puoi anche impostare il CAPTCHA e la domanda di sicurezza come sfide uno e due. Nel caso in cui la funzione define auth challenge non dichiari le sfide SRP, il successo degli utenti è determinato interamente dalle loro risposte ai prompt personalizzati.

------
#### [ 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 };
```

------