API Gateway Authorizer - политика IAM не кэшируется - PullRequest
2 голосов
/ 27 февраля 2020

Я пытаюсь кэшировать политику IAM, возвращаемую лямбда-авторизатором, когда он впервые проверяет токен JWT. Я включил и установил authorizerResultTtlInSeconds на 3500 секунды в API Gateway Authorizer. Тем не менее, я все еще вижу запрос, идущий к лямбда-функции Authorizer в пределах периода кэширования.

Мой node.js скрипт выглядит следующим образом:

const jwt = require('jsonwebtoken');
const jwksClient = require('jwks-rsa');

const keyClient = jwksClient({
    jwksUri: process.env.JWKS_URI
})

const allow = {
    "principalId": "user",
    "policyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": "execute-api:Invoke",
                "Effect": "Allow",
                "Resource": process.env.RESOURCE // RESOURCE = *
            }
        ]
    }
}

const unauthorized = {
    "error": "Unauthorized",
}

//excluded verificationJWTOptions object and getSigningKey function for simplicity
function validateJWTToken(token, callback) {
    jwt.verify(token, getSigningKey, verificationJWTOptions, (error) => {
        if (error) {
            callback(unauthorized)
        } else {
            callback(null, allow)
        }
    })
}

exports.handler = (event, context, callback) => {
    const token = extractTokenFromHeader(event);
    validateJWTToken(token, callback);
}

Не уверен, что мне не хватает , Любая помощь будет высоко ценится!

1 Ответ

1 голос
/ 02 марта 2020

Я обнаружил, что не правильно тестировал логи кэширования API Gateway Authorizer c. Я тестировал различные сценарии ios и нашел здесь два случая:

  • Когда токен действителен: Когда вызывается endpoint, запрос переходит к Lambda Authorizer, который проверяет / делает недействительным токен. Политика IAM возвращается функцией в API Gateway Authorizer и кэшируется (в данном случае - для 58 minutes, 20 seconds).

    Имя заголовка, указанное в Token Source, становится ключом кэша, а политика авторизации, сгенерированная авторизатором, становится значением кэша. Шлюз API проверит заголовок, указанный в Token Source. Если значение заголовка соответствует ключу, API-шлюз не вызовет Lambda Authorizer и вместо этого проверит, действительна ли политика в соответствии с настроенным TTL.

    Если новый токен генерируется в течение периода времени кэширования, то снова выполняется вызов к Lambda Authorizer, и этот токен кэшируется. Таким образом, если конечная точка вызывается с использованием этих двух токенов, то Lambda Authorizer не будет вызываться, поскольку политики IAM для этих токенов уже кэшируются для данного временного интервала кэширования, и ответ возвращается.

  • Когда токен недействителен: Например, если токен действителен для 30 minutes с 11:00:00AM до 11:30:00AM, а кэш TTL установлен на 58 minutes. Клиент делает 2 запроса API, используя этот токен, один в 11:29:59AM, а другой в 11:31:3APM - тогда оба запроса будут приняты, хотя второй использовал токен с истекшим сроком действия. В основном это означает, что JWT token расширяется кешем TTL.

...