

# Configurar um autorizador do Lambda para o API Gateway
<a name="configure-api-gateway-lambda-authorization"></a>

Depois de criar uma função do Lambda, configure-a como um autorizador para a API. Em seguida, configure o método para invocar o autorizador do Lambda e determinar se um chamador pode invocar o método. É possível criar uma função do Lambda na mesma conta em que você criou a API ou em uma conta diferente.

Você pode testar o autorizador do Lambda usando as ferramentas integradas no console do API Gateway ou usando o [Postman](https://www.postman.com/). Consulte instruções sobre como usar o Postman para testar a função do autorizador do Lambda em [Chamar uma API com um autorizador do Lambda do API Gateway](call-api-with-api-gateway-lambda-authorization.md).

## Configurar um autorizador do Lambda (console)
<a name="configure-api-gateway-lambda-authorization-with-console"></a>

 O procedimento a seguir mostra como criar um autorizador do Lambda no console da API REST do API Gateway. Para saber mais sobre os diferentes tipos de autorizador do Lambda, consulte [Como escolher um tipo de autorizador do Lambda](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-choose). 

------
#### [ REQUEST authorizer ]

**Como configurar um autorizador `REQUEST` do Lambda**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha uma API e selecione **Autorizadores**. 

1. Selecione **Criar autorizador**. 

1. Em **Nome do autorizador**, insira um nome para o autorizador.

1. Em **Tipo de autorizador**, selecione **Lambda**. 

1. Em **Função do Lambda**, selecione a Região da AWS onde você criou a função do Lambda do autorizador e, depois, insira o nome da função.

1. Mantenha o campo **Função Lambda de invocação** em branco para permitir que o console da API REST do API Gateway defina uma política baseada em recursos. A política concede permissões ao API Gateway para invocar a função do autorizador do Lambda. Você também pode optar por inserir o nome de um perfil do IAM para permitir que o API Gateway invoque a função do autorizador do Lambda. Consulte um exemplo de função em [Criar uma função do IAM que pode ser assumida](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies). 

1. Em **Carga de evento do Lambda**, escolha **Solicitar**.

1. Em **Tipo de origem de identidade**, selecione um tipo de parâmetro. Os tipos de parâmetros com suporte são `Header`, `Query string`, `Stage variable` e `Context`. Para adicionar mais origens de identidade, escolha **Adicionar parâmetro**. 

1. Para armazenar em cache a política de autorização gerada pelo autorizador, mantenha **Armazenamento em cache de autorização** ativado. Quando o armazenamento de políticas em cache está habilitado, é possível modificar o valor de **TTL**. A definição de **TTL** como zero desabilita o armazenamento em cache de políticas.

   Se você habilitar o armazenamento em cache, o autorizador deverá retornar uma política que seja aplicável a todos os métodos em uma API. Para aplicar uma política específica do método, use as variáveis de contexto `$context.path` e `$context.httpMethod`.

1. Selecione **Criar autorizador**.

------
#### [ TOKEN authorizer ]

**Como configurar um autorizador `TOKEN` do Lambda**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha uma API e selecione **Autorizadores**. 

1. Selecione **Criar autorizador**. 

1. Em **Nome do autorizador**, insira um nome para o autorizador.

1. Em **Tipo de autorizador**, selecione **Lambda**. 

1. Em **Função do Lambda**, selecione a Região da AWS onde você criou a função do Lambda do autorizador e, depois, insira o nome da função.

1. Mantenha o campo **Função Lambda de invocação** em branco para permitir que o console da API REST do API Gateway defina uma política baseada em recursos. A política concede permissões ao API Gateway para invocar a função do autorizador do Lambda. Você também pode optar por inserir o nome de um perfil do IAM para permitir que o API Gateway invoque a função do autorizador do Lambda. Consulte um exemplo de função em [Criar uma função do IAM que pode ser assumida](integrating-api-with-aws-services-lambda.md#api-as-lambda-proxy-setup-iam-role-policies). 

1. Em **Carga de evento do Lambda**, escolha **Token**.

1. Em **Origem do token**, insira o nome do cabeçalho que contém o token de autorização. O chamador deve incluir um cabeçalho desse nome para enviar o token de autorização ao autorizador do Lambda.

1. (Opcional) Em **Validação do token**, insira uma instrução RegEx. O API Gateway executa a validação inicial do token de entrada em relação a esta expressão e invoca o autorizador mediante a validação com êxito.

1. Para armazenar em cache a política de autorização gerada pelo autorizador, mantenha **Armazenamento em cache de autorização** ativado. Quando o armazenamento em cache de políticas está habilitado, o nome de cabeçalho especificado em **Origem do token** se torna a chave de cache. Quando o armazenamento de políticas em cache está habilitado, é possível modificar o valor de **TTL**. A definição de **TTL** como zero desabilita o armazenamento em cache de políticas. 

   Se você habilitar o armazenamento em cache, o autorizador deverá retornar uma política que seja aplicável a todos os métodos em uma API. Para aplicar uma política específica do método, desative **Armazenamento em cache de autorização**.

1. Selecione **Criar autorizador**.

------

Depois de criar o autorizador do Lambda, é possível testá-lo. O procedimento a seguir mostra como testar o autorizador do Lambda.

------
#### [ REQUEST authorizer ]

**Como testar um autorizador `REQUEST` do Lambda**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Selecione o nome do autorizador.

1. Em **Testar autorizador**, insira um valor para a fonte de identidades.

   Se você estiver usando o [Exemplo de função do Lambda do autorizador `REQUEST`](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-request-lambda-function-create), faça o seguinte:

   1. Selecione **Cabeçalho** e insira **headerValue1**; depois, escolha **Adicionar parâmetro**.

   1. Em **Tipo de origem de identidade**, selecione **String de consulta**, insira **queryValue1** e escolha **Adicionar parâmetro**.

   1. Em **Tipo de origem de identidade**, selecione **Variável de estágio** e insira **stageValue1**.

   Você não pode modificar as variáveis de contexto para a invocação do teste, mas pode modificar o modelo de evento de teste do **Autorizador do API Gateway** para a função do Lambda. Em seguida, você pode testar a função de autorizador do Lambda com variáveis de contexto modificadas. Para saber mais, consulte [Testing Lambda functions in the console](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) no *Guia do desenvolvedor do AWS Lambda*.

1. Escolha **Testar autorizador**.

------
#### [ TOKEN authorizer ]

**Como testar um autorizador `TOKEN` do Lambda**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Selecione o nome do autorizador.

1. Em **Testar autorizador**, insira um valor para o token.

   Se você estiver usando o [Exemplo de função do Lambda do autorizador `TOKEN`](apigateway-use-lambda-authorizer.md#api-gateway-lambda-authorizer-token-lambda-function-create), faça o seguinte:

   1. Em **authorizationToken**, insira **allow**.

1. Escolha **Testar autorizador**.

    Se o autorizador do Lambda negar com sucesso uma solicitação no ambiente de teste, o teste responderá com uma resposta HTTP `200 OK`. No entanto, fora do ambiente de teste, o API Gateway retorna uma resposta HTTP `403 Forbidden` e ocorre uma falha na solicitação do método.

------

## Configurar um autorizador do Lambda (AWS CLI)
<a name="configure-api-gateway-lambda-authorization-cli"></a>

O comando [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) mostra como criar um autorizador do Lambda usando a AWS CLI.

------
#### [ REQUEST authorizer ]

O comando [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) indicado abaixo cria um autorizador `REQUEST` e usa o cabeçalho `Authorizer` e a variável de contexto `accountId` como fontes de identidade:

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Request_Custom_Authorizer' \
    --type REQUEST \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization,context.accountId' \
    --authorizer-result-ttl-in-seconds 300
```

------
#### [ TOKEN authorizer ]

O comando [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-authorizer.html) indicado abaixo cria um autorizador `TOKEN` e usa o cabeçalho `Authorization` como fonte de identidade:

```
aws apigateway create-authorizer \
    --rest-api-id 1234123412 \
    --name 'First_Token_Custom_Authorizer' \
    --type TOKEN \
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:customAuthFunction/invocations' \
    --identity-source 'method.request.header.Authorization' \
    --authorizer-result-ttl-in-seconds 300
```

------

Depois de criar o autorizador do Lambda, é possível testá-lo. O comando [test-invoke-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) indicado abaixo testa o autorizador do Lambda:

```
aws apigateway test-invoke-authorizer --rest-api-id 1234123412 \
   --authorizer-id efg1234 \
   --headers Authorization='Value'
```

## Configurar um método para usar um autorizador do Lambda (console)
<a name="configure-api-gateway-lambda-authorization-method-console"></a>

Depois de configurar o autorizador do Lambda, anexe-o a um método para a API. Se seu autorizador usa o armazenamento em cache de autorização, atualize a política para controlar o acesso ao método adicional.

**Para configurar um método de API para usar um autorizador do Lambda**

1. Faça login no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Selecione uma API.

1. Selecione **Recursos** e escolha um novo método ou um já existente.

1. Na guia **Solicitação de método**, em **Configurações de solicitação de método**, escolha **Editar**. 

1. Em **Autorizador**, no menu suspenso, selecione o autorizador do Lambda que você acabou de criar. 

1.  (Opcional) Se você quiser passar o token de autorização para o back-end, escolha **Cabeçalhos de solicitação HTTP**. Escolha **Adicionar cabeçalho** e adicione o nome do cabeçalho de autorização. Em **Nome**, insira um nome de cabeçalho que corresponda ao nome de **Origem do token** especificado quando você criou o autorizador do Lambda para a API. Esta etapa não se aplica a autorizadores `REQUEST`. 

1. Escolha **Salvar**.

1. Escolha **Deploy API (Implantar API)** para implantar a API em um estágio. Para um autorizador `REQUEST` que usa variáveis de estágio, você também deve definir as variáveis de estágio necessárias e especificar os respectivos valores enquanto estiver na página **Estágio**.

## Configurar um método para usar um autorizador do Lambda (AWS CLI)
<a name="configure-api-gateway-lambda-authorization-method-cli"></a>

Depois de configurar o autorizador do Lambda, anexe-o a um método para a API. Você pode criar um método ou usar uma operação de patch para anexar um autorizador a um método existente. Se seu autorizador usa o armazenamento em cache de autorização, atualize a política para controlar o acesso ao método adicional.

O comando [put-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-method.html) indicado abaixo cria um método que usa um autorizador do Lambda:

```
aws apigateway put-method --rest-api-id 1234123412 \
  --resource-id a1b2c3 \
  --http-method PUT \
  --authorization-type CUSTOM \
  --authorizer-id efg1234
```

O comando [update-method](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-method.html) indicado abaixo atualiza um método existente para usar um autorizador do Lambda:

```
aws apigateway update-method \
    --rest-api-id 1234123412 \
    --resource-id a1b2c3 \
    --http-method PUT \
    --patch-operations op="replace",path="/authorizationType",value="CUSTOM" op="replace",path="/authorizerId",value="efg1234"
```