【问题标题】:Serverless Framework ignoring "authorizer" block in lambda-proxy setup无服务器框架忽略 lambda-proxy 设置中的“授权者”块
【发布时间】: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,或者完全不使用该行。结果在所有情况下都是一样的。

已经通过控制台手动选择授权人来实现此功能,但我们正试图消除这些手动步骤。

我们在这里缺少什么?

【问题讨论】:

    标签: aws-lambda aws-api-gateway amazon-cognito serverless-framework serverless


    【解决方案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+}做到了。如果您修改答案以包含该建议,我会接受它:)
    • 是的,我在发表评论后立即注意到并进行了修改。谢谢!很高兴我能帮上忙。
    猜你喜欢
    • 2018-08-27
    • 2019-05-08
    • 2017-05-30
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2020-08-21
    相关资源
    最近更新 更多