

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Acionador do Lambda de criar desafio de autenticação
<a name="user-pool-lambda-create-auth-challenge"></a>

O acionador de desafio create auth é uma função do Lambda que tem os detalhes de cada desafio declarado pelo acionador de desafio define auth. Ele processa o nome do desafio declarado pelo acionador de desafio define auth e retorna um `publicChallengeParameters` que sua aplicação deve apresentar ao usuário. Essa função então fornece ao seu grupo de usuários a resposta para o desafio `privateChallengeParameters`, que seu grupo de usuários passa para o acionador do desafio verify auth. Onde seu acionador de desafio define auth gerencia a sequência de desafios, seu acionador de desafio create auth gerencia o conteúdo do desafio.

![\[Acionadores do Lambda de desafio\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-challenges2.png)


**Criar desafio de autenticação**  
O Amazon Cognito invocará esse acionador depois de **Definir desafio de autenticação** se um desafio personalizado tiver sido especificado como parte do acionador **Definir desafio de autenticação**. Ele cria um [fluxo de autenticação personalizado](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon-cognito-user-pools-custom-authentication-flow).

Esse acionador do Lambda é invocado para criar um desafio a ser apresentado ao usuário. A solicitação deste acionador do Lambda inclui `challengeName` e `session`. O `challengeName` é uma string que representa o nome do próximo desafio a ser apresentado ao usuário. O valor desse atributo é definido no acionador do Lambda Definir desafio de autenticação.

O loop de desafio será repetido até todos os desafios serem respondidos.

**Topics**
+ [Parâmetros do acionador do Lambda de criar desafio de autenticação](#cognito-user-pools-lambda-trigger-syntax-create-auth-challenge)
+ [Exemplo de criar desafio de autenticação](#aws-lambda-triggers-create-auth-challenge-example)

## Parâmetros do acionador do Lambda de criar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "challengeName": "string",
        "session": [
            ChallengeResult,
            . . .
        ],
        "clientMetadata": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {
        "publicChallengeParameters": {
            "string": "string",
            . . .
        },
        "privateChallengeParameters": {
            "string": "string",
            . . .
        },
        "challengeMetadata": "string"
    }
}
```

------

### Parâmetros de solicitação de criar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-request"></a>

**userAttributes**  
Um ou mais pares de nome-valor que representam atributos de usuário.

**userNotFound**  
Este booleano é preenchido quando `PreventUserExistenceErrors` é configurado como `ENABLED` para o cliente de grupo de usuários.

**challengeName**  
O nome do novo desafio.

**sessão**  
O elemento session é uma matriz de elementos `ChallengeResult`, cada um deles contendo os seguintes elementos:    
**challengeName**  
O tipo de desafio. Um destes: `"CUSTOM_CHALLENGE"`, `"PASSWORD_VERIFIER"`, `"SMS_MFA"`, `"DEVICE_SRP_AUTH"`, `"DEVICE_PASSWORD_VERIFIER"`, `"NEW_PASSWORD_REQUIRED"` ou `"ADMIN_NO_SRP_AUTH"`.   
**challengeResult**  
Defina como `true` se o usuário tiver concluído o desafio com êxito; do contrário, defina-o como `false`.  
**challengeMetadata**  
Seu nome para o desafio personalizado. Usado somente se `challengeName` for `"CUSTOM_CHALLENGE"`.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionador de criação do desafio de autenticação. Você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API para passar esses dados para sua função Lambda. A solicitação que invoca a função create auth challenge não inclui dados transmitidos no ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)nas operações da API.

### Parâmetros de resposta de criar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-response"></a>

**publicChallengeParameters**  
Um ou mais pares de chave-valor do aplicativo cliente que serão usados no desafio a ser apresentado ao usuário. Este parâmetro deve conter todas as informações necessárias para apresentar com precisão o desafio ao usuário.

**privateChallengeParameters**  
Esse parâmetro é usado somente pelo acionador do Lambda Verificar resposta do desafio de autenticação. Este parâmetro deve conter todas as informações necessárias para validar a resposta do usuário para o desafio. Em outras palavras, o parâmetro `publicChallengeParameters` contém a pergunta apresentada ao usuário, enquanto `privateChallengeParameters` contém as respostas válidas da pergunta.

**challengeMetadata**  
Seu nome para o desafio personalizado, caso esse seja um desafio personalizado.

## Exemplo de criar desafio de autenticação
<a name="aws-lambda-triggers-create-auth-challenge-example"></a>

Essa função tem dois desafios personalizados que correspondem à sequência de desafios em nosso [exemplo de definição de desafio de autenticação](user-pool-lambda-define-auth-challenge.md#aws-lambda-triggers-define-auth-challenge-example). Os dois primeiros desafios são a autenticação SRP. Para o terceiro desafio, essa função retorna um URL CAPTCHA para sua aplicação na resposta do desafio. Sua aplicação renderiza o CAPTCHA no URL fornecido e retorna a entrada do usuário. O URL da imagem CAPTCHA é adicionado aos parâmetros de desafio público como "`captchaUrl`", e a resposta esperado é adicionada aos parâmetros de desafio privado.

Para o quarto desafio, essa função retorna uma pergunta de segurança. Sua aplicação renderiza a pergunta e solicita que o usuário responda. Depois que os usuários resolverem os dois desafios personalizados, o acionador do de definição de desafio autenticação confirma que seu grupo de usuários pode emitir tokens.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.request.challengeName !== "CUSTOM_CHALLENGE") {
    return event;
  }

  if (event.request.session.length === 2) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.captchaUrl = "url/123.jpg";
    event.response.privateChallengeParameters.answer = "5";
  }

  if (event.request.session.length === 3) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.securityQuestion =
      "Who is your favorite team mascot?";
    event.response.privateChallengeParameters.answer = "Peccy";
  }

  return event;
};

export { handler };
```

------