【问题标题】:Getting 403 while the authorizer response is cached [duplicate]在缓存授权方响应时获取 403 [重复]
【发布时间】:2021-02-26 10:50:27
【问题描述】:

我有两个 lambda 函数(A 和 B),它们使用相同的 LambdaTokenAuthorizer,并配置了以下标识

Identity:
    Header: Authorization
    ValidationExpression: Bearer.*
    ReauthorizeEvery: 30 # cache for 30 s

第一个和后续请求(对 A) 已被授权并正确解析,但在授权方响应之后和同时对 B 的任何请求都会被缓存 (从先前对 A 的请求),将失败并显示 403 和以下消息:

{ message: "User is not authorized to access this resource" }

这是预期的行为吗?我在文档中找不到任何关于它的信息。

默认授权者(顺便说一下,默认缓存 300 秒)甚至是一个选项还是反模式?

有没有办法解决这个问题(除了设置ReauthorizeEvery: 0)?

假设如果授权者是共享的,那么它不应该缓存响应是否正确?

编辑:我知道这之前已经“回答”过了,但是文档没有说明缓存是如何工作的。如果请求的资源不同,我希望授权者不会使用缓存。

【问题讨论】:

标签: aws-lambda aws-api-gateway aws-sam lambda-authorizer


【解决方案1】:

最可能的原因是 Authorizer 输出。你会从 Authorizer 生成一个看起来像这样的输出 -

{
    "principalId": "some-id",
    "policyDocument": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": "execute-api:Invoke",
                "Effect": "Allow",
                "Resource": "arn:aws:execute-api:xx-region-1:123456789012:abc/test/GET/lambdaA"
        ]
    }
}

注意上面的 Resource 属性。您可能非常具体地通过指定 Lambda A 或 Lambda B 的 ARN 来允许 Lambda 函数(也许您正在根据某些输入动态生成它)。尝试将其更改为

"Resource": "*"

由于您对两个不同的 Lambda 函数使用相同的 Authorizer,并且您正在使用缓存,因此您需要确保 Authorizer 的输出允许执行这两个 Lambda 函数。

是一个默认授权者(顺便说一下,它被缓存了 300 秒 默认)甚至是一个选项还是反模式?

绝对不是。为多种功能使用通用授权器可减少大量维护开销。使用此方法只需部署一次核心身份验证逻辑的任何更改。

假设如果授权人是共享的,那么它是否正确? 永远不应该缓存响应?

没有。即使授权者是共享的,我们也可以缓存响应。这确保了如果用户通过身份验证访问 ServiceA.FunctionA,他/她可以访问 ServiceA 的任何其他功能,而无需再次检查其身份验证。

【讨论】:

  • 如果我有arn:aws:execute-api:xx-region-1:123456789012:abc/test/GET/lambdaAarn:aws:execute-api:xx-region-1:123456789012:abc/test/GET/lambdaB,那么Resource 允许两者的值是多少?
  • 你可以做"资源": ["arn:aws:execute-api:xx-region-1:123456789012:abc/test/GET/lambdaA", "arn:aws:execute-api :xx-region-1:123456789012:abc/test/GET/lambdaB"]
  • 但是,这意味着如果您要对 10 个不同的 Lambda fns 使用相同的授权方,您始终必须继续编辑此列表。我没有看到保留它的问题资源:“*”。但这取决于你。
猜你喜欢
  • 2021-04-11
  • 2018-05-27
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多