无服务器框架忽略 lambda-proxy 设置中的“授权者”块
Posted
技术标签:
【中文标题】无服务器框架忽略 lambda-proxy 设置中的“授权者”块【英文标题】:Serverless Framework ignoring "authorizer" block in lambda-proxy setup 【发布时间】:2020-02-02 02:14:54 【问题描述】:我们有一个serverless.yml
在 APIGateway 中创建一个 lambda 代理。
我已经看到了几种将 cognito 用户池授权器附加到 lambda 代理的方法,但它们都不起作用。在任何情况下,结果都是没有在 Proxy 或 Proxy+ 上设置身份验证。 (如在 API Gateway 控制台中,“Auth”始终读取“NONE”。)
例子:
events:
- http: ANY /
integration: lambda-proxy
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: CognitoUserPoolAuthorizer
- http: ANY proxy+
integration: lambda-proxy
authorizer:
arn: $self:custom.userPools.arnBase/$self:custom.userPools.ids.$self:custom.stage
# The above results in the format: "arn:aws:cognito-idp:us-west-2:<account_id>:userpool/us-west-2_<user_pool_id>"
您可以在上面看到我正在尝试两种不同的方法来完成相同的任务。 (让我们试着把科学扔在墙上,看看有什么能坚持下去。) 这两种方法都记录在不同的地方by the serverless framework,但都没有关于 lambda 代理的记录,所以我不确定是否存在未记录的差异。
在第一种方法中(在资源上使用Ref
),资源被正确创建,但没有附加身份验证到端点。 (我没有在此处包含资源块,因为它按预期工作。)第二种方法具有相同的效果(但没有创建授权者)。
我们的 serverless 框架版本是 1.52,满足this other SO post 中的要求。
我也尝试将integration
设置为lambda
,或者完全不使用该行。结果在所有情况下都是一样的。
我已经通过控制台手动选择授权人来实现此功能,但我们正试图消除这些手动步骤。
我们在这里缺少什么?
【问题讨论】:
【参考方案1】:一目了然,您的serverless.yml
文件的缩进似乎已关闭。您可以使用http
数组项下方的选项卡再试一次吗?
此外,您需要删除方法和路径的简写,而是分别使用它们。下面的 sn-p 应该可以工作:
events:
- http:
method: ANY
path: /
integration: lambda-proxy
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: CognitoUserPoolAuthorizer
- http:
method: ANY
path: /proxy+
integration: lambda-proxy
authorizer:
arn: $self:custom.userPools.arnBase/$self:custom.userPools.ids.$self:custom.stage
【讨论】:
当我尝试这个时,我得到了一个严重的缩进错误。不过,不错的想法。我本来希望这是问题所在。 我明白了。这是另一个我认为是正确缩进的例子:github.com/johnf/serverless-cognito-demo/blob/master/… 这有效吗? 好的,这是正确的,但不仅仅是出于缩进的原因!事实证明,它不仅需要缩进更多,而且我们不能使用简写-http: ANY /
——进一步缩进并更改为多行method: ANY
和path: /proxy+
做到了。如果您修改答案以包含该建议,我会接受它:)
是的,我在发表评论后立即注意到并进行了修改。谢谢!很高兴我能帮上忙。以上是关于无服务器框架忽略 lambda-proxy 设置中的“授权者”块的主要内容,如果未能解决你的问题,请参考以下文章