如何在AWS API Gateway验证Plaid webhook及创建对应JWT authorizer
在AWS API Gateway中验证Plaid Webhook的方法
前置准备
- 首先确认你的Plaid API版本≥2020-09-14,仅该版本及之后的版本支持Webhook JWT签名功能
- 登录Plaid Dashboard开启Webhook签名功能,记录你的Plaid Client ID,后续配置会用到
方案1:使用API Gateway原生JWT Authorizer(无代码方案,推荐)
这个方案不需要编写自定义代码,直接用API Gateway自带的能力完成验证,配置步骤如下:
- 进入AWS API Gateway控制台,找到你用来接收Plaid Webhook的HTTP API实例
- 切换到「授权」标签页,点击创建授权方,类型选择JWT
- 身份来源填写
$request.header.Plaid-Verification,指定从Plaid请求的指定头字段中获取JWT令牌 - 发行方(issuer)填写
https://webhooks.plaid.com,受众(Audiences)填写你的Plaid Client ID - 公钥来源选择JWKS,填写Plaid公开的JWKS服务地址,API Gateway会自动定期拉取公钥完成签名校验
- 保存授权方后,将该授权方绑定到你接收Plaid Webhook的路由上即可完成配置
方案2:使用Lambda Authorizer(适合有自定义验证需求的场景)
如果你需要在验证签名之外额外做参数校验、请求去重等逻辑,可以选择Lambda自定义授权方:
- 你需要提前安装对应开发语言的JWT解析依赖库,以Python为例可以用
PyJWT,Node.js可以用jsonwebtoken - Lambda核心逻辑如下:
- 从触发事件的请求头中提取
Plaid-Verification字段的JWT字符串 - 拉取Plaid公开的JWKS公钥,建议对公钥做本地缓存,避免频繁请求公钥接口被限流
- 校验JWT的签名合法性,同时校验
iss是否为https://webhooks.plaid.com、aud是否为你的Plaid Client ID、exp是否未过期 - 校验通过返回允许访问的IAM策略,校验失败返回拒绝访问的策略
- 从触发事件的请求头中提取
如果你用的是不支持JWT签名的旧版本Plaid Webhook,也只能用该方案:从请求头中取出
Plaid-Signature字段,将原始请求体和你的Webhook密钥拼接后做SHA256哈希,和签名字段比对即可完成验证。
Plaid官方参考实现说明
Plaid官方提供了AWS环境下验证Webhook的完整参考实现,覆盖了上述两种方案,同时提供了CloudFormation、Terraform的可直接部署模板,以及不同语言的Lambda示例代码,你可以直接在Plaid官方开发文档中查找对应内容。
内容的提问来源于stack exchange,提问作者maanguyil
相关产品推荐
相关产品推荐

