

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Desencadenador de Lambda Antes de la autenticación
<a name="user-pool-lambda-pre-authentication"></a>

Amazon Cognito invoca a este desencadenador cuando un usuario intenta iniciar sesión, lo que le permite crear una validación personalizada que realiza acciones preparatorias. Por ejemplo, puede denegar la solicitud de autenticación o registrar los datos de sesión en un sistema externo.

**nota**  
Este desencadenador de Lambda no se activa cuando un usuario no existe, a menos que el ajuste `PreventUserExistenceErrors` de un cliente de aplicación en un grupo de usuarios se haya establecido en `ENABLED`. La renovación de una sesión de autenticación existente tampoco activa este desencadenador.

**Topics**
+ [Información general sobre flujos](#user-pool-lambda-pre-authentication-1)
+ [Parámetros del desencadenador de Lambda de preautenticación](#cognito-user-pools-lambda-trigger-syntax-pre-auth)
+ [Ejemplo invocación Antes de la autenticación](#aws-lambda-triggers-pre-authentication-example)

## Información general sobre flujos
<a name="user-pool-lambda-pre-authentication-1"></a>

![\[Desencadenador de Lambda de preautenticación: flujo del cliente\]](http://docs.aws.amazon.com/es_es/cognito/latest/developerguide/images/lambda-pre-authentication-1.png)


La solicitud contiene datos de validación del cliente de los valores `ClientMetadata` transferidos por la aplicación a las operaciones de la API `InitiateAuth` y `AdminInitiateAuth` del grupo de usuarios.

Para obtener más información, consulte [Un ejemplo de sesión de autenticación](authentication.md#amazon-cognito-user-pools-authentication-flow).

## Parámetros del desencadenador de Lambda de preautenticación
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth"></a>

La solicitud que Amazon Cognito envía a esta función de Lambda es una combinación de los parámetros que se indican a continuación y los [parámetros comunes](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que Amazon Cognito agrega a todas las solicitudes.

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

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "validationData": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {}
}
```

------

### Parámetros de la solicitud Antes de la autenticación
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-request"></a>

**userAttributes**  
Uno o varios pares de nombre-valor que representan atributos de usuario.

**userNotFound**  
Al establecer `PreventUserExistenceErrors` en `ENABLED` para el cliente del grupo de usuarios, Amazon Cognito rellena este booleano.

**validationData**  
Uno o varios pares de clave-valor que contienen los datos de validación de la solicitud de inicio de sesión del usuario. Para pasar estos datos a la función Lambda, utilice el ClientMetadata parámetro en las acciones [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)y de la [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)API.

### Parámetros de la respuesta Antes de la autenticación
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-response"></a>

Amazon Cognito no procesa ninguna información adicional que su función devuelva en la respuesta. La función puede devolver un error para rechazar el intento de inicio de sesión o utilizar operaciones de la API para consultar y modificar los recursos.

## Ejemplo invocación Antes de la autenticación
<a name="aws-lambda-triggers-pre-authentication-example"></a>

Esta función de ejemplo impide que los usuarios inicien sesión en el grupo de usuarios con un cliente de aplicación específico. Como la función de Lambda de autenticación previa no se invoca cuando el usuario tiene una sesión existente, esta función solo impide sesiones *nuevas* con el ID de cliente de la aplicación que desea 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
```

------

Amazon Cognito transfiere la información del evento a la función de Lambda. A continuación, la función devuelve el mismo objeto de evento a Amazon Cognito con los cambios en la respuesta. En la consola de Lambda puede configurar un evento de prueba con los datos relevantes para el desencadenador de Lambda. El siguiente es un evento de prueba para este código de ejemplo: 

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

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

------