如何在 AWS Lambda 无服务器部署中验证第三方 webhook 请求
How to authenticate third party webhook request in AWS Lambda serverless deployment
我正在编写一个函数来处理 Stripe.com 结帐会话的回调。
基本上,我在请求的正文中收到一些数据,用Stripe 节点库验证它,然后我尝试写入Dynamodb 以在购买完成后处理一些后端业务逻辑。
问题是我需要让这个 api 端点保持打开状态以便 Stripe 调用它,但也要授予函数写入 dynamodb 的权限。
设置 授权方时:aws_iam,它要求请求包含身份验证令牌,并且在使用 Stripe 测试 webhook 时 returns 一个 "Missing Authentication Token" 错误。
当我删除 授权方时:aws_iam Stripe 可以很好地调用 webhook,因为端点已打开,但随后没有设置允许写入 dynamodb 的权限。看起来像一个 catch22。
这是我的无服务器:
handleCourseCheckout:
handler: checkout_completed.main
events:
- http:
path: webhook/purchased
method: post
cors: true
authorizer: aws_iam
这里是定义授权人 aws_iam 的地方:
provider:
name: aws
runtime: nodejs10.x
stage: dev
......
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
# Restrict our IAM role permissions to
# the specific table for the stage
Resource:
- "Fn::ImportValue": TableArn
这有点奇怪。在您的情况下,您需要配置:
- API GW 完全开放(
authorizer: aws_iam
表示限制访问 api gw 端点)
- API GW必须有调用lambda函数的权限
- lambda 函数必须只能访问 DynamoDB
- 删除 CORS
请
- 检查 lambda 权限(执行角色)
- 检查 api gw(集成请求角色)
我正在编写一个函数来处理 Stripe.com 结帐会话的回调。
基本上,我在请求的正文中收到一些数据,用Stripe 节点库验证它,然后我尝试写入Dynamodb 以在购买完成后处理一些后端业务逻辑。
问题是我需要让这个 api 端点保持打开状态以便 Stripe 调用它,但也要授予函数写入 dynamodb 的权限。 设置 授权方时:aws_iam,它要求请求包含身份验证令牌,并且在使用 Stripe 测试 webhook 时 returns 一个 "Missing Authentication Token" 错误。
当我删除 授权方时:aws_iam Stripe 可以很好地调用 webhook,因为端点已打开,但随后没有设置允许写入 dynamodb 的权限。看起来像一个 catch22。
这是我的无服务器:
handleCourseCheckout:
handler: checkout_completed.main
events:
- http:
path: webhook/purchased
method: post
cors: true
authorizer: aws_iam
这里是定义授权人 aws_iam 的地方:
provider:
name: aws
runtime: nodejs10.x
stage: dev
......
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
# Restrict our IAM role permissions to
# the specific table for the stage
Resource:
- "Fn::ImportValue": TableArn
这有点奇怪。在您的情况下,您需要配置:
- API GW 完全开放(
authorizer: aws_iam
表示限制访问 api gw 端点) - API GW必须有调用lambda函数的权限
- lambda 函数必须只能访问 DynamoDB
- 删除 CORS
请 - 检查 lambda 权限(执行角色) - 检查 api gw(集成请求角色)