

# Saída de um autorizador do Lambda para o API Gateway
<a name="api-gateway-lambda-authorizer-output"></a>

A saída da função de autorizador do Lambda é um objeto em forma de dicionário, que deve incluir o identificador principal (`principalId`) e um documento de política (`policyDocument`) que contém uma lista de instruções da política. A saída também pode incluir um mapa `context` contendo pares de chave/valor. Se a API usar um plano de uso (o [https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apiKeySource](https://docs.aws.amazon.com/apigateway/latest/api/API_RestApi.html#apiKeySource) é definido como `AUTHORIZER`), a função de autorizador do Lambda deve retornar uma das chaves de API do plano de uso como o valor de propriedade `usageIdentifierKey`.

Veja a seguir um exemplo dessa saída. 

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

****  

```
{
  "principalId": "yyyyyyyy", 
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
  "context": {
    "stringKey": "value",
    "numberKey": "1",
    "booleanKey": "true"
  },
  "usageIdentifierKey": "{api-key}"
}
```

------

 Aqui, uma declaração de política especifica se o serviço de execução do API Gateway deve ter permissão ou não (`Effect`) para invocar (`Action`) o método de API especificado (`Resource`). Talvez seja necessário controlar o acesso a vários recursos com base no seu autorizador. Você pode usar um caractere curinga (`*`) para especificar um tipo de recurso (método). Para obter informações sobre como configurar políticas válidas para chamar uma API, consulte [Referência de instrução de políticas do IAM para executar a API no API Gateway](api-gateway-control-access-using-iam-policies-to-invoke-api.md#api-gateway-calling-api-permissions). 

Para o ARN de um método habilitado para autorização, por exemplo, `arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]`, o tamanho máximo é de 1600 bytes. Os valores de parâmetros de caminho, cujo tamanho é determinado em tempo de execução, podem fazer com que o comprimento do ARN exceda o limite. Quando isso acontecer, o cliente da API receberá uma resposta `414 Request URI too long`. 

Além disso, o Nome de recurso da Amazon (ARN) do recurso, como mostrado na saída da declaração de política pelo autorizador, atualmente está limitado a 512 caracteres. Por esse motivo, você não deve usar o URI com um token de JWT de um tamanho significativo em um URI de solicitação. Em vez disso, você pode passar o token de JWT com segurança em um cabeçalho de solicitação.

 Você pode acessar o valor `principalId` em um modelo de mapeamento usando a variável `$context.authorizer.principalId`. Isso é útil quando você deseja passar o valor para o backend. Para obter mais informações, consulte [Variáveis de contexto para transformações de dados](api-gateway-mapping-template-reference.md#context-variable-reference). 

 Você pode acessar o valor `stringKey`, `numberKey` ou `booleanKey` (por exemplo, `"value"`, `"1"` ou `"true"`) do mapa `context` em um modelo de mapeamento chamando `$context.authorizer.stringKey`, `$context.authorizer.numberKey` ou `$context.authorizer.booleanKey`, respectivamente. Todos os valores retornados são transformados em string. Observe que não é possível definir um objeto JSON ou matriz como um valor válido de qualquer chave no mapa `context`. 

 Você pode usar o mapa `context` para retornar credenciais em cache do autorizador para o backend usando um modelo de mapeamento de solicitação de integração. Isso permite que o backend forneça uma experiência de usuário aprimorada usando as credenciais em cache para reduzir a necessidade de acessar as chaves secretas e abrir o tokens de autorização para cada solicitação. 

 Para a integração de proxy do Lambda, o API Gateway passa o objeto `context` de um autorizador do Lambda diretamente para a função backend do Lambda como parte da entrada `event`. Você pode recuperar os pares de chave-valor `context` na função do Lambda chamando `$event.requestContext.authorizer.key`. 

`{api-key}` significa uma chave de API no plano de uso do estágio da API. Para obter mais informações, consulte [Usar planos e chaves de API para APIs REST no APIs Gateway](api-gateway-api-usage-plans.md).

 Veja a seguir a saída de exemplo do autorizador do Lambda de exemplo. A saída de exemplo contém uma declaração de política para bloquear chamadas (`Deny`) para o método `GET` no estágio `dev` de uma API (`ymy8tbxw7b`) de uma conta da AWS (`123456789012`).

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

****  

```
{
  "principalId": "user",
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Deny",
        "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/"
      }
    ]
  }
}
```

------