如何在API网关代理集成中应用授权器选择路由

时间:2019-10-11 18:20:14

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

我正在使用无服务器框架将应用程序部署到AWS Lambda。我的应用程序由一个Lambda提供服务,这就是为什么我使用{proxy+}穿过请求路径的原因:

functions:
  app:
    runtime: go1.x
    handler: bin/lambda
    events:
      - http:
         path: /{proxy+}
         method: any

现在,我想使用自定义授权者Lambda保护我的应用程序的特定部分(请考虑所有/admin/)。我以为我可以添加另一个使用授权者的事件定义,如下所示:

functions:
  app:
    runtime: go1.x
    handler: bin/lambda
    events:
      - http:
          path: /admin/{proxy+}
          method: any
          authorizer:
            name: authorizer
            resultTtlInSeconds: 0
            identitySource: method.request.header.Authorization
      - http:
         path: /{proxy+}
         method: any

但是这根本没有效果。如果我将我的授权者应用于根级别代理,它将按预期方式应用,因此授权者本身可以按预期工作。

在这种情况下如何定义路线?我需要使用其他Lambda还是我缺少什么?

2 个答案:

答案 0 :(得分:1)

我可以想到两种选择:

  1. 如果您确实希望以编写方式使用终结点,则可以使用通用终结点(根终结点),并在该处理程序内部检查请求是否针对/admin,然后重定向或执行其他一些特殊操作的理由。

  2. 放弃拥有根端点,并使用两个“普通”端点:

    functions:
      app:
        runtime: go1.x
        handler: bin/lambda
        events:
          - http:
              path: /admin/{proxy+}
              method: any
              authorizer:
                name: authorizer
                resultTtlInSeconds: 0
                identitySource: method.request.header.Authorization
          - http:
             path: /user/{proxy+}
             method: any

答案 1 :(得分:0)

您应该查看https://docs.aws.amazon.com/en_pv/apigateway/latest/developerguide/api-gateway-swagger-extensions.html

基本上(对于Open api 3.0),您将在路径上定义一个security键。此类键的定义在components.securitySchemas

之内