Aws lambda 缓存授权者响应时获取403
我有两个lambda函数(A和B),它们使用相同的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秒)是一个选项还是
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资源有什么问题:“*”。但这取决于你。