Salida de un autorizador de Lambda de API Gateway
La salida de una función de autorizador de Lambda es un objeto similar a un diccionario que debe incluir el identificador de la entidad principal (principalId
) y un documento de política (policyDocument
) que contenga una lista de instrucciones de política. La salida también puede incluir un mapa context
que contenga pares de clave-valor. Si la API utiliza un plan de uso (apiKeySource
se ha establecido en AUTHORIZER
), la función de autorizador de Lambda debe devolver una de las claves de API del plan de uso como valor de la propiedad usageIdentifierKey
.
A continuación se muestra un ejemplo de esta salida.
{ "principalId": "
yyyyyyyy
", // The principal user identification associated with the token sent by the client. "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}
" }
Aquí, una instrucción de política especifica si se permite o deniega (Effect
) al servicio de ejecución de API Gateway invocar (Action
) el método de API especificado (Resource
). Puede utilizar un carácter comodín (*
) para especificar un tipo de recurso (método). Para obtener información sobre la configuración de políticas válidas para llamar a una API, consulte Referencia de instrucciones de políticas de IAM para ejecutar la API en API Gateway.
En el caso de los ARN del método con autorización habilitada (por ejemplo, arn:aws:execute-api:
), la longitud máxima es de 1600 bytes. Los valores de parámetros de ruta, cuyo tamaño se determina en tiempo de ejecución, pueden provocar que la longitud del ARN supere el límite. Cuando esto ocurra, el cliente de la API recibirá una respuesta {regionId}
:{accountId}
:{apiId}
/{stage}
/{httpVerb}
/[{resource}
/[{child-resources}
]]414 Request URI
too long
.
Además, el ARN de recurso, tal y como se muestra en la instrucción de política de salida que ha realizado el autorizador, está limitado actualmente a 512 caracteres. Por este motivo, no debe utilizar la URI con un token JWT que tenga una longitud considerable en una URI de la solicitud. Puede transferir de manera segura el token JWT en un encabezado de solicitud.
Puede tener acceso al valor principalId
de una plantilla de asignación utilizando la variable $context.authorizer.principalId
. Esto resulta útil si desea transmitir el valor al backend. Para obtener más información, consulte Variables $context para modelos de datos, autorizadores, plantillas de mapeo y registro de acceso de CloudWatch.
Puede obtener acceso al valor de stringKey
, numberKey
o booleanKey
(por ejemplo, "value"
, "1"
o "true"
) del mapa context
en una plantilla de mapeo llamando a $context.authorizer.stringKey
, $context.authorizer.numberKey
o $context.authorizer.booleanKey
, respectivamente. Los valores devueltos se representan en forma de cadena. Observe que no puede establecer un objeto o matriz JSON como un valor válido de ninguna clave en el mapa context
.
Puede utilizar el mapa context
para devolver las credenciales almacenadas en caché del autorizador al backend utilizando una plantilla de mapeo de una solicitud de integración. Esto permite que el backend proporcione una mejor experiencia de usuario mediante la utilización de las credenciales almacenadas en caché para reducir la necesidad de obtener acceso a las claves secretas y abrir los tokens de autorización para cada solicitud.
En el caso de la integración de proxy de Lambda, API Gateway transmite el objeto context
de un autorizador de Lambda directamente a la función de Lambda del backend como parte de la entrada event
. Puede recuperar los pares de clave-valor de context
en la función de Lambda llamando a $event.requestContext.authorizer.
. key
{api-key}
representa una clave de API en el plan de uso de la etapa de API. Para obtener más información, consulte Planes de uso y clave de API para las API de REST en API Gateway .
El siguiente ejemplo muestra la salida del ejemplo de autorizador de Lambda. La salida del ejemplo contiene una instrucción de política para bloquear (Deny
) las llamadas al método GET
para la etapa dev
de una API (ymy8tbxw7b
) de una cuenta de AWS (123456789012
).
{ "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/" } ] } }