

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 pré-autenticação
<a name="user-pool-lambda-pre-authentication"></a>

O Amazon Cognito invoca esse acionador quando um usuário tenta fazer login, de forma que você possa criar uma validação personalizada que realize ações preparatórias. Por exemplo, você pode negar a solicitação de autenticação ou registrar os dados da sessão em um sistema externo.

**nota**  
Esse acionador do Lambda não é ativado quando um usuário não existe, a menos que a configuração `PreventUserExistenceErrors` de um cliente de aplicação do grupo de usuários esteja definida como `ENABLED`. A renovação de uma sessão de autenticação existente também não ativa esse acionador.

**Topics**
+ [Visão geral do fluxo](#user-pool-lambda-pre-authentication-1)
+ [Parâmetros do acionador do Lambda de pré-autenticação](#cognito-user-pools-lambda-trigger-syntax-pre-auth)
+ [Exemplo de pré-autenticação](#aws-lambda-triggers-pre-authentication-example)

## Visão geral do fluxo
<a name="user-pool-lambda-pre-authentication-1"></a>

![\[Acionador do Lambda de pré-autenticação: fluxo de cliente\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-pre-authentication-1.png)


A solicitação inclui dados de validação do cliente dos valores `ClientMetadata` que a aplicação transmite para as operações de API `InitiateAuth` e `AdminInitiateAuth` do grupo de usuários.

Para obter mais informações, consulte [Um exemplo de sessão de autenticação](authentication.md#amazon-cognito-user-pools-authentication-flow).

## Parâmetros do acionador do Lambda de pré-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth"></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",
            . . .
        },
        "validationData": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {}
}
```

------

### Parâmetros de solicitação de pré-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-request"></a>

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

**userNotFound**  
Quando você define `PreventUserExistenceErrors` como `ENABLED` para o cliente do grupo de usuários, o Amazon Cognito preenche esse booleano.

**validationData**  
Um ou mais pares de chave-valor que contêm os dados de validação na solicitação de login do usuário. Para passar esses dados para sua função Lambda, use o ClientMetadata parâmetro nas ações [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)e da [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)API.

### Parâmetros de resposta de pré-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-response"></a>

O Amazon Cognito não processa nenhuma informação adicionada que sua função retorna na resposta. Sua função pode retornar um erro para rejeitar a tentativa de login ou usar operações de API para consultar e modificar seus recursos.

## Exemplo de pré-autenticação
<a name="aws-lambda-triggers-pre-authentication-example"></a>

Essa função de exemplo impede que usuários façam login em seu grupo de usuários com um cliente de aplicação específico. Como a função do Lambda de pré-autenticação não invoca quando o usuário já tem uma sessão, essa função só impede *novas* sessões com o ID do cliente da aplicação que você deseja bloquear.

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

```
const handler = async (event) => {
  if (
    event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked"
  ) {
    throw new Error("Cannot authenticate users from this user pool app client");
  }

  return event;
};

export { handler };
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    if event['callerContext']['clientId'] == "<user pool app client id to be blocked>":
        raise Exception("Cannot authenticate users from this user pool app client")

    # Return to Amazon Cognito
    return event
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código: 

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

```
{
    "callerContext": {
        "clientId": "<user pool app client id to be blocked>"
    },
    "response": {}
}
```

------