Aws lambda 缓存授权者响应时获取403

Aws lambda 缓存授权者响应时获取403,aws-lambda,aws-api-gateway,aws-sam,lambda-authorizer,Aws Lambda,Aws Api Gateway,Aws Sam,Lambda Authorizer,我有两个lambda函数(A和B),它们使用相同的LambdaTokenAuthorizer,配置有以下标识 身份: 标题:授权 ValidationExpression:Bearer* 重新授权间隔:30#缓存30秒 第一个和后续请求(对A)已被授权并正确解析,但在缓存授权人响应(从以前对A的请求)之后和期间对B的任何请求都将失败,并显示以下消息: {消息:“用户无权访问此资源”} 这是预期的行为吗?我在文件里找不到关于它的任何东西 默认授权者(顺便问一下,默认缓存300秒)是一个选项还是

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

身份:
标题:授权
ValidationExpression:Bearer*
重新授权间隔:30#缓存30秒
第一个和后续请求(对A)已被授权并正确解析,但在缓存授权人响应(从以前对A的请求)之后和期间对B的任何请求都将失败,并显示以下消息:

{消息:“用户无权访问此资源”}
这是预期的行为吗?我在文件里找不到关于它的任何东西

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

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

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


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

最可能的原因是授权人的输出。您将从授权人处生成一个输出,如下所示-

{
    "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"
        ]
    }
}
请注意上面的资源属性。通过指定Lambda或Lambda B的ARN,您可能非常明确地允许使用Lambda函数(可能是基于某些输入动态生成它)。试着把它改成

"Resource": "*"
因为您对两个不同的Lambda函数使用相同的授权器,并且使用缓存,所以需要确保授权器的输出允许执行两个Lambda函数

是默认授权者(顺便说一下,它由 默认)甚至是选项还是反模式

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

假设授权人是共享的,那么它 不应该缓存响应吗


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

我得到的最佳解释是:如果我有
arn:aws:execute-api:xx-region-1:123456789012:abc/test/GET/lambdaA
arn:aws:execute-api:xx-region-1:123456789012:abc/test/GET/lambdaA>,dab,
Resource
允许两者的值是多少?您可以执行“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 fn使用相同的授权人,您必须始终编辑此列表。我不认为保留it资源有什么问题:“*”。但这取决于你。