无服务器框架忽略 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: ANYpath: /proxy+做到了。如果您修改答案以包含该建议,我会接受它:) 是的,我在发表评论后立即注意到并进行了修改。谢谢!很高兴我能帮上忙。

以上是关于无服务器框架忽略 lambda-proxy 设置中的“授权者”块的主要内容,如果未能解决你的问题,请参考以下文章

如果已经存在于无服务器中,我如何忽略资源创建

在无服务器框架中禁用 SLS_DEBUG=*

无服务器框架 AWS 跨账户自定义授权方

无服务器框架:实现完整“基础架构即代码”的方法?

本地文件(无服务器)上的 Internet Explorer“由于 mime 类型不匹配而忽略 CSS”

本地文件(无服务器)上的 Internet Explorer“由于 mime 类型不匹配而忽略 CSS”