gpt4 book ai didi

node.js - API 网关授权者 - IAM 策略不缓存

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:27 25 4
gpt4 key购买 nike

我尝试缓存授权者 lambda 首次验证 JWT token 时返回的 IAM 策略。我已在 API Gateway Authorizer 中启用并将 authorizerResultTtlInSeconds 设置为 3500 秒。但是,我仍然看到请求在缓存时间范围内发送至 Authorizer lambda 函数。

我的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);
}

不知道我错过了什么。任何帮助将不胜感激!

最佳答案

我发现我没有正确测试 API Gateway Authorizer 缓存逻辑。我一直在测试各种场景,发现了两种情况:

  • token 有效时:调用端点时,请求将发送至 Lambda Authorizer,由 Lambda Authorizer 验证/无效 token 。该函数将 IAM 策略返回给 API Gateway 授权方并进行缓存(在本例中 - 58 分 20 秒)。

    Token Source中指定的 header 名称成为缓存键,授权者生成的授权策略成为缓存值。 API网关将检查Token Source中指定的 header 。如果 header 的值与 key 匹配,API Gateway 将不会调用 Lambda Authorizer,而是根据配置的 TTL 检查策略是否有效。

    如果在缓存时间范围内生成新 token ,则会再次调用 Lambda 授权方并缓存该 token 。因此,如果使用这两个 token 调用端点,则不会对 Lambda Authorizer 进行任何调用,因为这些 token 的 IAM 策略已在给定的缓存时间范围内进行缓存,并且会返回响应。

  • token 无效时:例如,如果 token 在 11:00:00AM11:30:00AM30 分钟内有效,并且缓存 TTL 设置为 58 分钟。客户端使用该 token 发出 2 个 API 请求,一个在 11:29:59AM ,另一个在 11:31:3APM - 那么这两个请求都将被接受,尽管第二个请求使用了过期的 token 。这基本上意味着 JWT token 通过缓存 TTL 进行扩展。

关于node.js - API 网关授权者 - IAM 策略不缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60434412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com