【问题标题】:Using lambda authorizer in serverless function exposed through API gateway在通过 API 网关公开的无服务器函数中使用 lambda 授权器
【发布时间】:2021-09-22 16:27:45
【问题描述】:

我写了一个 lambda 授权器,它以这种格式返回响应 -

{
principalId: 123345,
policyDocument: {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "execute-api:Invoke",
      "Effect": "Allow",
      "Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/verifyToken-stage/GET/"
    }
  ]
}
}

注意-我的授权人名字是verifyToken

在我不同的微服务(即活动日志)serverless.yml 文件中 我这样称呼它-


service: activity-logs

frameworkVersion: '2'

resources:
  Resources:
    GatewayResponseUnauthorized:
      Type: 'AWS::ApiGateway::GatewayResponse'
      Properties:
        ResponseParameters:
          gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
          gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
          gatewayresponse.header.Access-Control-Allow-Methods: "'*'"
          gatewayresponse.header.Access-Control-Allow-Credentials: "'true'"
        ResponseType: UNAUTHORIZED
        RestApiId: 
          Ref: 'ApiGatewayRestApi'

provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: 20201221
  region: us-east-1
  stage:  ${opt:stage}
functions:
  getActivityLogs:
    handler: handler.getActivityLogs
    environment:
      NODE_ENV:  ${opt:env}
    timeout: 800
    events:
      - http:
          path: /{user_id}
          method: get
          authorizer: arn:aws:lambda:us-east-1:123456789012:function:auth-${opt:stage}-verifyToken
          cors: true
    vpc:
      securityGroupIds:
        - sg-xxxxxxxx
        - sg-xxxxxxxx
        - sg-xxxxxxxx
        - sg-xxxxxxxx
        - sg-xxxxxxxx
      subnetIds:
        - subnet-xxxxxxxxxxxxxxxxx
        - subnet-xxxxxxxxxxxxxxxxx

我已经单独检查了我的授权人,它正在工作并返回 200 和上述响应。同样,我的微服务在没有授权的情况下工作。但是当在 getActivityLogs 中启用授权时,它不会让我的活动日志执行一行

【问题讨论】:

  • 当您调用启用了授权方的 getActivityLogs 端点时会得到什么响应?
  • @jweyrich 当我的授权器启用时,getActivityLogs 不会执行。这意味着如果授权器被启用,则没有输出。通过启用我的意思是,我在我的 yml 文件中添加了授权器,如果禁用,我在 yml 文件中评论了我的授权器

标签: aws-lambda microservices serverless lambda-authorizer


【解决方案1】:

我在异步函数中使用回调来返回响应,根据这个文档,https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html 如果函数是异步的,我们可以简单地返回响应。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-06-09
  • 2019-07-03
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 2021-04-25
  • 1970-01-01
相关资源
最近更新 更多