在无服务器框架中设置AWS API网关自定义授权程序

时间:2018-03-19 08:40:35

标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework

我需要将AWS API网关自定义授权程序添加到Lambda函数。目前,我已为每个端点添加了授权程序。如下面的serverless.yml

serverless.yml

service: test-service

provider:
    name: aws
    runtime: nodejs6.10
    stage: dev
    region: us-east-1

functions:
    bff:
        handler: app.handler
        events:
            - http:
                path: /home
                method: get
                cors: true
                authorizer :
                    arn: arn:aws:lambda:us-east-1:xxxxxx:function:token-verifier
                    resultTtlInSeconds: 0
                    identitySource: method.request.header.Authorization
                    identityValidationExpression: '.*'
  

如何将自定义授权程序添加到整个lambda函数中   而不是单独添加到每个端点?

1 个答案:

答案 0 :(得分:5)

您混淆了AWS API Gateway和AWS Lambda之间的界限。这不是你的错。 无服务器框架非常好,它几乎模糊了这两件事。

严格来说,AWS Lambda函数不要需要自定义授权程序。

授权程序用于保护AWS Lambda函数的API网关端点 NOT

因此,您需要为需要授权的每个端点定义授权者

如果您在多次重复授权程序定义后使serverless.yml更加简洁,则可以定义一次并在端点中引用它。

service: test-service

custom:
    authorizer:
        arn: arn:aws:lambda:us-east-1:xxxxxx:function:token-verifier
        resultTtlInSeconds: 0
        identitySource: method.request.header.Authorization
        identityValidationExpression: '.*'

provider:
    name: aws
    runtime: nodejs6.10
    stage: dev
    region: us-east-1

functions:
    bff:
        handler: app.handler
        events:
            - http:
                path: /home
                method: get
                cors: true
                authorizer: ${self:custom.authorizer}