

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 antes da geração do token
<a name="user-pool-lambda-pre-token-generation"></a>

Como o Amazon Cognito invoca esse acionador antes da geração do token, é possível personalizar as declarações em tokens do grupo de usuários. Com os **Recursos básicos** da primeira versão ou `V1_0` do evento de acionamento de geração pré-token, é possível personalizar o token de identidade (ID). Em grupos de usuários com o plano de recursos Essentials ou Plus, você pode gerar a versão dois ou o evento `V2_0` acionador com personalização do token de acesso e a versão três ou o evento `V3_0` acionador com personalização do token de acesso para concessões de credenciais de cliente machine-to-machine (M2M).

O Amazon Cognito envia um evento `V1_0` como uma solicitação à sua função com dados que seriam gravados no token do ID. Um evento `V2_0` ou `V3_0` é uma solicitação única com os dados que o Amazon Cognito gravaria nos tokens de identidade e de acesso. Para personalizar os dois tokens é necessário atualizar a função para usar a versão dois ou três do acionador e enviar dados aos dois tokens na mesma resposta.

O Amazon Cognito aplica respostas de eventos da versão dois aos tokens de acesso da autenticação do usuário, em que um usuário humano apresentou credenciais ao seu grupo de usuários. As respostas de eventos da versão três se aplicam aos tokens de acesso da autenticação do usuário e da autenticação da máquina, em que sistemas automatizados autorizam solicitações de token de acesso com segredos do cliente de aplicação. Além das circunstâncias dos tokens de acesso resultantes, os eventos das versões dois e três são idênticos.

Esse acionador do Lambda pode adicionar, remover e modificar algumas declarações em tokens de identidade e de acesso antes que o Amazon Cognito as emita para a aplicação. Para usar esse recurso, associe uma função do Lambda no console de grupos de usuários do Amazon Cognito ou atualize a `LambdaConfig` do grupo de usuários por meio da AWS Command Line Interface (AWS CLI).

## Versões de eventos
<a name="user-pool-lambda-pre-token-generation-event-versions"></a>

Seu grupo de usuários pode fornecer diferentes versões de um evento de acionador de pré-geração de token para sua função do Lambda. Um acionador `V1_0` fornece os parâmetros para modificação dos tokens de ID. Um acionador `V2_0` ou `V3_0` fornece parâmetros para o seguinte:

1. As funções de um acionador `V1_0`.

1. A capacidade de personalizar os tokens de acesso.

1. A capacidade de transmitir tipos de dados complexos para valores de reivindicação de ID e token de acesso:
   + String
   + Número
   + Booleano
   + Conjuntos de strings, números, booleanos ou uma combinação de qualquer um desses
   + JSON

**nota**  
No token de ID, você pode preencher objetos complexos com os valores das reivindicações, exceto para `phone_number_verified`, `email_verified`, `updated_at` e `address`.

Os grupos de usuários entregam eventos `V1_0` por padrão. Para configurar seu grupo de usuários para enviar um evento `V2_0`, escolha uma **versão do evento de acionador** da **personalização de recursos básicos \$1 token de acesso para identidades de usuários** ao configurar seu acionador no console do Amazon Cognito. Para produzir eventos `V3_0`, escolha ****Recursos básicos \$1 personalização de token de acesso para identidades de usuários e máquinas****. Você também pode definir o valor de `LambdaVersion` nos [LambdaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-LambdaConfig)parâmetros em uma solicitação de [CreateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)API [UpdateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)ou de uma solicitação. As versões um, dois e três do evento estão disponíveis nos planos de recursos **Essentials** e **Plus**. As operações M2M para eventos da versão três têm uma estrutura de preços separada da fórmula de usuários ativos mensais (MAU). Para mais informações, consulte [Preços do Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

**nota**  
Grupos de usuários que estavam operacionais com a opção **Recursos de segurança avançados** em ou antes de 22 de novembro de 2024 às 18:00 GMT e que permanecem no nível de recursos **Lite** têm acesso às versões um e dois do evento do acionador de pré-geração de tokens. Grupos de usuários nesse nível legado *sem* recursos avançados de segurança têm acesso à primeira versão do evento. A versão três está disponível *somente* no Essentials e Plus.

## Referência de reivindicações e escopos
<a name="user-pool-lambda-pre-token-generation-excluded-claims"></a>

O Amazon Cognito limita as declarações e os escopos que você pode adicionar, modificar ou suprimir em tokens de acesso e identidade. A tabela a seguir descreve as declarações que sua função do Lambda pode ou não modificar e os parâmetros do evento de acionamento que afetam a presença ou o valor da reivindicação.


| Reivindicar | Tipo de token padrão | Pode adicionar? | Pode modificar? | Pode suprimir? | Parâmetro do evento: adicionar ou modificar | Parâmetro do evento: suprimir | Tipo de identidade | Versões do evento | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Qualquer reivindicação que não esteja no esquema de token do grupo de usuários | Nenhum | Sim | Sim | N/D | claimsToAddOrOverride | claimsToSuppress | Usuário, máquina [1](#cognito-pretoken-machine-ids-tier-note) | Tudo [2](#cognito-pretoken-id-access-versions-note) | 
| scope | Acesso | Sim | Sim | Sim | scopesToAdd | scopesToSuppress | Usuário, máquina [1](#cognito-pretoken-machine-ids-tier-note) | v2\$10, v3\$10 | 
| cognito:groups | ID, Acesso | Sim | Sim | Sim | groupsToOverride | claimsToSuppress | Usuário | Tudo [2](#cognito-pretoken-id-access-versions-note) | 
| cognito:preferred\$1role | ID | Sim | Sim | Sim | preferredRole | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Usuário | Todos | 
| cognito:roles | ID | Sim | Sim | Sim | iamRolesToOverride | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Usuário | Todos | 
| cognito:username | ID | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| Qualquer outra reivindicação com um prefixo cognito: | Nenhum | Não | Não | Não | N/D | N/D | N/D | N/D | 
| username | Acesso | Não | Não | Não | N/D | N/D | Usuário | v2\$10, v3\$10 | 
| sub | ID, Acesso | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| Atributo OIDC padrão | ID | Sim | Sim | Sim | claimsToAddOrOverride | claimsToSuppress | Usuário | Todos | 
| Atributo custom: | ID | Sim | Sim | Sim | claimsToAddOrOverride | claimsToSuppress | Usuário | Todos | 
| Atributo dev: | ID | Não | Não | Sim | N/D | claimsToSuppress | Usuário | Todos | 
| identities | ID | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| aud[4](#cognito-pretoken-aud-note) | ID | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| client\$1id | Acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| event\$1id | Acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| device\$1key | Acesso | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| version | Acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| acr | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| amr | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| at\$1hash | ID | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| auth\$1time | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| azp | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| exp | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| iat | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| iss | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| jti | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| nbf | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| nonce | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| origin\$1jti | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| token\$1use | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 

 1 Os tokens de acesso para identidades de máquinas só estão disponíveis com o evento de entrada do acionador `v3_0`. A versão três do evento só está disponível nos níveis de recursos **Essentials** e **Plus**. Grupos de usuários no nível **Lite** podem receber eventos `v1_0`. Grupos de usuários no nível **Lite** com recursos avançados de segurança podem receber eventos `v1_0` e `v2_0`.

2 Configure seu acionador de pré-geração de tokens para a versão do evento `v1_0` somente para token de ID, `v2_0` para token de ID e de acesso, `v3_0` para token de ID e de acesso com recursos para identidades de máquina.

3 Para suprimir as reivindicações `cognito:preferred_role` e `cognito:roles`, adicione `cognito:groups` a `claimsToSuppress`.

 4 É possível adicionar uma reivindicação `aud` aos tokens de acesso, mas o valor deve corresponder ao ID do cliente da aplicação da sessão atual. É possível gerar o ID do cliente no evento de solicitação de `event.callerContext.clientId`.

## Personalizar o token de identidade
<a name="user-pool-lambda-pre-token-generation-idtoken"></a>

Com todas as versões de eventos do acionador do Lambda de pré-geração de tokens, é possível personalizar o conteúdo de um token de identidade (ID) do grupo de usuários. O token de ID fornece atributos de usuário de uma fonte de identidade confiável para login em uma aplicação web ou móvel. Para obter mais informações sobre tokens, consulte [Como entender o token de identidade (ID)](amazon-cognito-user-pools-using-the-id-token.md).

Os usos do gatilho do Lambda de pré-geração de tokens com um token de ID incluem os seguintes:
+ Fazer uma alteração em runtime no perfil do IAM que o usuário solicita de um banco de identidades.
+ Adicionar atributos do usuário de uma fonte externa.
+ Adicionar ou substituir valores de atributos de usuário existentes.
+ Suprimir a divulgação de atributos do usuário que, devido aos escopos autorizados do usuário e ao acesso de leitura aos atributos concedido ao cliente da aplicação, seriam transmitidos à aplicação.

## Personalizar o token de acesso
<a name="user-pool-lambda-pre-token-generation-accesstoken"></a>

Com as versões dois e três de eventos do acionador do Lambda de pré-geração de tokens, é possível personalizar o conteúdo de um token de acesso do grupo de usuários. O token de acesso autoriza os usuários a recuperar informações de recursos protegidos por acesso, como operações de API autorizadas por tokens do Amazon Cognito e de terceiros. APIs Para autorização machine-to-machine (M2M) com concessão de credenciais de cliente, o Amazon Cognito só invoca o gatilho de pré-geração de token quando seu grupo de usuários está configurado para um evento da versão três (). `V3_0` Para obter mais informações sobre tokens de acesso, consulte [Como entender o token de acesso](amazon-cognito-user-pools-using-the-access-token.md).

Os usos do gatilho do Lambda de pré-geração de tokens com um token de acesso incluem os seguintes:
+ Adicionar ou suprimir os escopos na reivindicação `scope`. Por exemplo, é possível adicionar escopos a um token de acesso gerado pela autenticação da API de grupos de usuários do Amazon Cognito, que atribui apenas o escopo `aws.cognito.signin.user.admin`.
+ Alterar a associação de um usuário em grupos de usuários.
+ Adicione declarações que ainda não estão presentes em um token de acesso do Amazon Cognito.
+ Suprimir a divulgação de declarações que, de outra forma, seriam transmitidas à aplicação.

Para oferecer compatibilidade com a personalização do acesso no grupo de usuários, é necessário configurar o grupo de usuários para gerar uma versão atualizada da solicitação de gatilho. Atualize o grupo de usuários conforme mostrado no procedimento a seguir.

------
#### [ Console de gerenciamento da AWS ]

**Como oferecer compatibilidade com a personalização do token de acesso em um gatilho do Lambda de pré-geração do tokens**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Selecione o menu **Extensões** e localize os **Acionadores do Lambda**.

1. Adicione ou edite um **Acionador de geração de pré-token**.

1. Selecione uma função do Lambda em **Atribuir função do Lambda**. 

1. Escolha uma **Versão do evento do acionador** de **Recursos básicos \$1 personalização do token de acesso para identidades de usuário** ou **Recursos básicos \$1 personalização do token de acesso para identidades de usuário e de máquinas**. Essa configuração atualiza os parâmetros de solicitação que o Amazon Cognito envia à função para incluir campos para personalização do token de acesso.

------
#### [ User pools API ]

**Como oferecer compatibilidade com a personalização do token de acesso em um gatilho do Lambda de pré-geração do tokens**

Gere uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou. Você deve especificar um valor para todos os parâmetros que não deseja definir como padrão. Para obter mais informações, consulte [Como atualizar a configuração do grupo de usuários e do cliente da aplicação](cognito-user-pool-updating.md).

Inclua o conteúdo a seguir no parâmetro `LambdaVersion` da solicitação. Um valor `LambdaVersion` de `V2_0` faz com que o grupo de usuários adicione parâmetros para tokens de acesso, além de aplicar alterações a eles. Um valor `LambdaVersion` de `V3_0` produz o mesmo evento que `V2_0`, mas faz com que seu grupo de usuários *também* aplique alterações aos tokens de acesso M2M. Para invocar uma versão de função específica, use o ARN de uma função do Lambda com uma versão da função como o valor de `LambdaArn`.

```
"PreTokenGenerationConfig": { 
   "LambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction",
   "LambdaVersion": "V3_0"
},
```

------

**Metadados do cliente para credenciais do cliente machine-to-machine (M2M)**  
Você pode transmitir [metadados do cliente](cognito-user-pools-working-with-lambda-triggers.md#working-with-lambda-trigger-client-metadata) em solicitações de M2M. Os metadados do cliente são informações adicionais de um usuário ou ambiente de aplicação que podem contribuir para os resultados de um [Acionador do Lambda antes da geração do token](#user-pool-lambda-pre-token-generation). Em operações de autenticação com um usuário principal, você pode passar metadados do cliente para o gatilho de pré-geração de token no corpo das solicitações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)de [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Como as aplicações conduzem o fluxo de geração de tokens de acesso para M2M com solicitações diretas ao [Endpoint de token](token-endpoint.md), elas têm um modelo diferente. No corpo POST das solicitações de token para credenciais do cliente, transmita um parâmetro `aws_client_metadata` com o objeto de metadados do cliente codificado em URL (`x-www-form-urlencoded`) para string. Para ver um exemplo de solicitação, consulte [Credenciais do cliente com autorização básicaCredenciais do cliente com autorização do corpo POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body). Veja a seguir um exemplo de parâmetro que transmite os pares de chave-valor `{"environment": "dev", "language": "en-US"}`.

```
aws_client_metadata=%7B%22environment%22%3A%20%22dev%22,%20%22language%22%3A%20%22en-US%22%7D
```

**Mais atributos**
+ [Como personalizar tokens de acesso nos grupos de usuários do Amazon Cognito](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

**Topics**
+ [Versões de eventos](#user-pool-lambda-pre-token-generation-event-versions)
+ [Referência de reivindicações e escopos](#user-pool-lambda-pre-token-generation-excluded-claims)
+ [Personalizar o token de identidade](#user-pool-lambda-pre-token-generation-idtoken)
+ [Personalizar o token de acesso](#user-pool-lambda-pre-token-generation-accesstoken)
+ [Fontes do acionador do Lambda antes da geração do token](#user-pool-lambda-pre-token-generation-trigger-source)
+ [Parâmetros do acionador do Lambda antes da geração do token](#cognito-user-pools-lambda-trigger-syntax-pre-token-generation)
+ [Exemplo da segunda versão do evento de acionamento pré-token: adicionar e suprimir declarações, escopos e grupos](#aws-lambda-triggers-pre-token-generation-example-version-2-overview)
+ [Exemplo de evento de geração pré-token da versão dois: adicionar reivindicações com objetos complexos](#aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects)
+ [Exemplo da primeira versão do evento de geração pré-token: adicionar uma nova declaração e suprimir uma declaração existente](#aws-lambda-triggers-pre-token-generation-version-1-add-claim)
+ [Exemplo da primeira versão do evento de geração pré-token: modificar a associação do grupo do usuário](#aws-lambda-triggers-pre-token-generation-version-1-change-group)

## Fontes do acionador do Lambda antes da geração do token
<a name="user-pool-lambda-pre-token-generation-trigger-source"></a>


| Valor de triggerSource | Event | 
| --- | --- | 
| TokenGeneration\$1HostedAuth | Chamado durante a autenticação na página de login do login gerenciado no Amazon Cognito. | 
| TokenGeneration\$1Authentication | Chamado depois de os fluxos de autenticação de usuário concluírem. | 
| TokenGeneration\$1NewPasswordChallenge | Chamado após o usuário ser criado por um admin. Este fluxo é chamado quando o usuário tiver que alterar uma senha temporária. | 
| TokenGeneration\$1ClientCredentials | Chamado após a concessão de credenciais de um cliente M2M. Seu grupo de usuários só envia esse evento quando sua versão do evento éV3\$10. | 
| TokenGeneration\$1AuthenticateDevice | Chamado no final da autenticação do dispositivo de um usuário. | 
| TokenGeneration\$1RefreshTokens | Chamado quando um usuário tenta atualizar a identidade e acessar tokens. | 

## Parâmetros do acionador do Lambda antes da geração do token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation"></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. Ao adicionar um gatilho do Lambda de pré-geração de tokens ao grupo de usuários, é possível selecionar uma versão do gatilho. Essa versão determina se o Amazon Cognito transmite uma solicitação para a função do Lambda com parâmetros adicionais para personalização do token de acesso.

------
#### [ Version one ]

O token da versão um pode definir a associação ao grupo, perfis do IAM e novas reivindicações em tokens de ID. As substituições de associação ao grupo também se aplicam à reivindicação `cognito:groups` em tokens de acesso.

```
{
    "request": {
        "userAttributes": {"string": "string"},
        "groupConfiguration": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
        },
        "clientMetadata": {"string": "string"}
    },
    "response": {
        "claimsOverrideDetails": {
            "claimsToAddOrOverride": {"string": "string"},
            "claimsToSuppress": [
                "string",
                "string"
            ],
            "groupOverrideDetails": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
            }
        }
    }
}
```

------
#### [ Versions two and three ]

Os eventos de solicitação das versões dois e três adicionam campos que personalizam o token de acesso. Os grupos de usuários aplicam alterações dos eventos da versão três aos tokens de acesso para identidades de máquinas. Essas versões também adicionam suporte para tipos de dados `claimsToOverride` complexos no objeto de resposta. Sua função do Lambda pode retornar os seguintes tipos de dados no valor de `claimsToOverride`:
+ String
+ Número
+ Booleano
+ Conjuntos de strings, números, booleanos ou uma combinação de qualquer um desses
+ JSON

```
{
    "request": {
        "userAttributes": {
            "string": "string"
        },
        "scopes": ["string", "string"],
        "groupConfiguration": {
            "groupsToOverride": ["string", "string"],
            "iamRolesToOverride": ["string", "string"],
            "preferredRole": "string"
        },
        "clientMetadata": {
            "string": "string"
        }
    },
    "response": {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"],
                "scopesToAdd": ["string", "string"],
                "scopesToSuppress": ["string", "string"]
            },
            "groupOverrideDetails": {
                "groupsToOverride": ["string", "string"],
                "iamRolesToOverride": ["string", "string"],
                "preferredRole": "string"
            }
        }
    }
}
```

------

### Parâmetros de solicitação antes da geração do token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-request"></a>


| Name (Nome) | Description | Versão mínima do evento de gatilho | 
| --- |--- |--- |
| userAttributes |  Os atributos do seu perfil de usuário no grupo de usuários.  | 1 | 
| groupConfiguration |  O objeto de entrada que contém a configuração atual do grupo. O objeto inclui `groupsToOverride`, `iamRolesToOverride` e `preferredRole`.  | 1 | 
| groupsToOverride |  Os [grupos de usuários](cognito-user-pools-user-groups.md#cognito-user-pools-user-groups.title) dos quais seu usuário é membro.  | 1 | 
| iamRolesToSubstituir |  Você pode associar um grupo de grupos de usuários a uma função AWS Identity and Access Management (IAM). Esse elemento é uma lista de todos os perfis do IAM dos grupos dos quais seu usuário é membro.  | 1 | 
| preferredRole |  É possível definir uma [precedência](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups.title) para grupos de usuários. Esse elemento contém o nome do perfil do IAM do grupo com a maior precedência no elemento `groupsToOverride`.  | 1 | 
| clientMetadata |  Um ou mais pares de chave-valor que você pode especificar e fornecer como entrada personalizada à função do Lambda para o acionador antes da geração do token. Para passar esses dados para sua função Lambda, use o ClientMetadata parâmetro nas operaçõ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. O Amazon Cognito não inclui dados do `ClientMetadata` parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de pré-geração de token.  | 1 | 
| escopos |  Escopos de token de acesso. Os escopos presentes em um token de acesso são os escopos padrão e personalizados do grupo de usuários que o usuário solicitou e que você autorizou o cliente da aplicação a emitir.  | 2 | 

### Parâmetros de resposta antes da geração do token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-response"></a>


| Name (Nome) | Description | Versão mínima do evento de gatilho | 
| --- |--- |--- |
| claimsOverrideDetails | Um contêiner para todos os elementos em um evento de acionamento V1\$10. | 1 | 
| claimsAndScopeOverrideDetails |  Um contêiner para todos os elementos em um evento de acionamento `V2_0` ou `V3_0`.  | 2 | 
| idTokenGeneration |  As declarações que você deseja substituir, adicionar ou suprimir no token de ID do usuário. Esses valores de personalização do token pai para ID aparecem somente na versão 2 e posteriores do evento, mas os elementos filhos aparecem nos eventos da versão 1.  | 2 | 
| accessTokenGeneration |  As declarações e os escopos que você deseja substituir, adicionar ou suprimir no token de acesso do usuário. Esse pai dos valores de personalização do token de acesso aparece somente na versão 2 e posteriores do evento.  | 2 | 
| claimsToAddOrOverride |  Um mapa de uma ou mais declarações e os respectivos valores que você deseja adicionar ou modificar. Para declarações relacionadas a grupos, use `groupOverrideDetails`. Na versão 2 e posteriores do evento, esse elemento aparece em `accessTokenGeneration` e `idTokenGeneration`.  | 1 [*](#cognito-pretoken-complex-objects-note) | 
| claimsToSuppress |  Uma lista de declarações que o Amazon Cognito deve suprimir. Se sua função suprime e substitui um valor de solicitação, o Amazon Cognito suprime a solicitação. Na versão 2 e posteriores do evento, esse elemento aparece em `accessTokenGeneration` e `idTokenGeneration`.  | 1 | 
| groupOverrideDetails |  O objeto de saída que contém a configuração atual do grupo. O objeto inclui `groupsToOverride`, `iamRolesToOverride` e `preferredRole`. A função substitui o objeto `groupOverrideDetails` pelo objeto fornecido. Se você fornecer um objeto nulo ou vazio na resposta, o Amazon Cognito suprimirá os grupos. Para manter a mesma configuração de grupo existente, copie o valor do objeto `groupConfiguration` da solicitação no objeto `groupOverrideDetails` na resposta. Depois, transmita-o de volta para o serviço. O ID do Amazon Cognito e os tokens de acesso contêm a declaração `cognito:groups`. O objeto `groupOverrideDetails` substitui a declaração `cognito:groups` em tokens de acesso e em tokens de ID. As substituições de grupo são as únicas alterações ao token de acesso que os eventos da versão 1 podem fazer.  | 1 | 
| scopesToAdd |  Uma lista de escopos que você deseja adicionar à reivindicação `scope` no token de acesso do usuário. Não é possível adicionar valores de escopo que contenham um ou mais caracteres de espaço em branco.  | 2 | 
| scopesToSuppress |  Uma lista de escopos que você deseja remover da reivindicação `scope` no token de acesso do usuário.  | 2 | 

 \$1 Objetos de resposta aos eventos da versão um podem retornar strings. Objetos de resposta aos eventos das versões dois e três podem retornar [objetos complexos](#user-pool-lambda-pre-token-generation-event-versions).

## Exemplo da segunda versão do evento de acionamento pré-token: adicionar e suprimir declarações, escopos e grupos
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-overview"></a>

Este exemplo faz as seguintes modificações nos tokens de um usuário.

1. Define `family_name` como `Doe` no token de ID.

1. Impede que as declarações `email` e `phone_number` apareçam no token de ID.

1. Define a declaração `cognito:roles` do token de ID como `"arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB"`.

1. Define a declaração `cognito:preferred_role` do token de ID como `arn:aws:iam::123456789012:role/sns_caller`.

1. Adiciona os escopos `openid`, `email` e `solar-system-data/asteroids.add` ao token de acesso.

1. Suprime o escopo `phone_number` e `aws.cognito.signin.user.admin` do token de acesso. A remoção de `phone_number` impede a recuperação do número de telefone do usuário em `userInfo`. A remoção de `aws.cognito.signin.user.admin` impede que as solicitações de API pelo usuário leiam e modifiquem seu próprio perfil com a API de grupos de usuários do Amazon Cognito.
**nota**  
A remoção de `phone_number` dos escopos só impedirá a recuperação do número de telefone de um usuário se os escopos restantes no token de acesso incluírem `openid` e pelo menos mais um escopo padrão. Para obter mais informações, consulte [Sobre escopos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes).

1. Define a declaração `cognito:groups` do token de ID e de acesso como `"new-group-A","new-group-B","new-group-C"`.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {
  event.response = {
    "claimsAndScopeOverrideDetails": {
      "idTokenGeneration": {
        "claimsToAddOrOverride": {
          "family_name": "Doe"
        },
        "claimsToSuppress": [
          "email",
          "phone_number"
        ]
      },
      "accessTokenGeneration": {
        "scopesToAdd": [
          "openid",
          "email",
          "solar-system-data/asteroids.add"
        ],
        "scopesToSuppress": [
          "phone_number",
          "aws.cognito.signin.user.admin"
        ]
      },
      "groupOverrideDetails": {
        "groupsToOverride": [
          "new-group-A",
          "new-group-B",
          "new-group-C"
        ],
        "iamRolesToOverride": [
          "arn:aws:iam::123456789012:role/new_roleA",
          "arn:aws:iam::123456789012:role/new_roleB",
          "arn:aws:iam::123456789012:role/new_roleC"
        ],
        "preferredRole": "arn:aws:iam::123456789012:role/new_role",
      }
    }
  };
  // Return to Amazon Cognito
  context.done(null, 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 ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_Authentication",
    "region": "us-east-1",
    "userPoolId": "us-east-1_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED",
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "family_name": "Zoe",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1", "arn:aws:iam::123456789012:role/sns_caller2", "arn:aws:iam::123456789012:role/sns_caller3"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin", "openid", "email", "phone"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Exemplo de evento de geração pré-token da versão dois: adicionar reivindicações com objetos complexos
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects"></a>

Este exemplo faz as seguintes modificações nos tokens de um usuário.

1. Adiciona reivindicações dos tipos número, string, booleano e JSON ao token de ID. Essa é a única alteração que os eventos de acionador da versão dois disponibilizam para o token de ID.

1. Adiciona reivindicações dos tipos número, string, booleano e JSON ao token de acesso.

1. Adiciona três escopos ao token de acesso.

1. Suprime a reivindicação `email` nos tokens de ID e acesso.

1. Suprime o escopo `aws.cognito.signin.user.admin` no token de acesso.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {

    var scopes = ["MyAPI.read", "MyAPI.write", "MyAPI.admin"]
    var claims = {}
    claims["aud"]= event.callerContext.clientId;
    claims["booleanTest"] = false;
    claims["longTest"] = 9223372036854775807;
    claims["exponentTest"] = 1.7976931348623157E308;
    claims["ArrayTest"] = ["test", 9223372036854775807, 1.7976931348623157E308, true];
    claims["longStringTest"] = "\{\
        \"first_json_block\": \{\
            \"key_A\": \"value_A\",\
            \"key_B\": \"value_B\"\
        \},\
        \"second_json_block\": \{\
            \"key_C\": \{\
                \"subkey_D\": [\
                    \"value_D\",\
                    \"value_E\"\
                ],\
                \"subkey_F\": \"value_F\"\
            \},\
            \"key_G\": \"value_G\"\
        \}\
    \}";
    claims["jsonTest"] = {
    	"first_json_block": {
    		"key_A": "value_A",
    		"key_B": "value_B"
    	},
    	"second_json_block": {
    		"key_C": {
    			"subkey_D": [
    				"value_D",
    				"value_E"
    			],
    			"subkey_F": "value_F"
    		},
    		"key_G": "value_G"
    	}
    };
    event.response = {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"],
                "scopesToAdd": scopes,
                "scopesToSuppress": ["aws.cognito.signin.user.admin"]
            }
        }
    };
    console.info("EVENT response\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v, 2))
    console.info("EVENT response size\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v).length)
    // Return to Amazon Cognito
    context.done(null, 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 ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_HostedAuth",
    "region": "us-west-2",
    "userPoolId": "us-west-2_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED"
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller1"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin",
            "phone",
            "openid",
            "profile",
            "email"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Exemplo da primeira versão do evento de geração pré-token: adicionar uma nova declaração e suprimir uma declaração existente
<a name="aws-lambda-triggers-pre-token-generation-version-1-add-claim"></a>

Esse exemplo usa um evento de gatilho 1 de versão com uma função do Lambda de pré-geração de tokens para adicionar uma nova declaração e suprimir uma existente.

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

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      claimsToAddOrOverride: {
        my_first_attribute: "first_value",
        my_second_attribute: "second_value",
      },
      claimsToSuppress: ["email"],
    },
  };

  return event;
};

export { handler };
```

------

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: como o código de exemplo não processa nenhum parâmetro de solicitação, você pode usar um evento de teste com uma solicitação vazia. Para obter mais informações sobre parâmetros de solicitação comuns, consulte [Evento de acionador do Lambda do grupo de usuários](cognito-user-pools-working-with-lambda-triggers.md#cognito-user-pools-lambda-trigger-event-parameter-shared).

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

```
{
  "request": {},
  "response": {}
}
```

------

## Exemplo da primeira versão do evento de geração pré-token: modificar a associação do grupo do usuário
<a name="aws-lambda-triggers-pre-token-generation-version-1-change-group"></a>

Esse exemplo usa o evento de gatilho 1 de versão com uma função do Lambda de pré-geração de tokens para modificar a associação do grupo do usuário.

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

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      groupOverrideDetails: {
        groupsToOverride: ["group-A", "group-B", "group-C"],
        iamRolesToOverride: [
          "arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA",
          "arn:aws:iam::XXXXXXXXX:role/sns_callerB",
          "arn:aws:iam::XXXXXXXXXX:role/sns_callerC",
        ],
        preferredRole: "arn:aws:iam::XXXXXXXXXXX:role/sns_caller",
      },
    },
  };

  return event;
};

export { handler };
```

------

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 ]

```
{
  "request": {},
  "response": {}
}
```

------