You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS API Gateway的Lambda授权器中验证请求来自自有网站?

解决AWS Lambda授权器校验请求来源的问题

1. 让Lambda授权器获取到Origin请求头

API Gateway默认不会把Origin头传递给Lambda授权器,需手动配置:

  • 若使用REQUEST类型授权器:在API Gateway控制台的授权器配置页,找到「Headers」输入框,添加Origin(HTTP头不区分大小写,按实际请求写法配置即可)。保存后重新部署API,Lambda的event.request.headers中就能拿到Origin字段。
  • 若之前用TOKEN类型授权器:建议切换为REQUEST类型——TOKEN授权器仅聚焦令牌解析,默认不传递完整请求头,适配性远不如REQUEST类型。

2. Origin校验核心逻辑

拿到Origin后,在Lambda授权器中执行以下校验:

  • 先定义允许的域名白名单,示例:
    allowed_origins = ["https://your-website.com", "https://www.your-website.com"]
    
  • 从event['request']['headers'].get('origin', '').lower()获取请求Origin,转小写后与白名单比对,不在列表内则返回拒绝授权的响应:
    return {
        "principalId": "unauthorized",
        "policyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "execute-api:Invoke",
                    "Effect": "Deny",
                    "Resource": event['methodArn']
                }
            ]
        }
    }
    

3. 结合Auth0 Token的双重校验

仅校验Origin不够,需同时严格校验Auth0的access_token,避免非法令牌滥用:

  • 校验iss字段,确保是你的Auth0域名(如https://your-auth0-domain.us.auth0.com/)
  • 校验aud字段,必须是你在Auth0中配置的API标识符,保证令牌是发给你的API的
  • 校验exp字段,确认令牌未过期
  • 这些校验可借助Auth0官方SDK(如jose库)实现,避免手动解析JWT出错。

4. 低成本补充防护(可选)

  • 给前端请求添加自定义请求头(如X-App-Signature),前端基于请求参数+时间戳生成简单签名,Lambda授权器内验证签名合法性。虽无法完全杜绝伪造,但能提升Postman等工具伪造请求的门槛。
  • 将API Gateway的CORS配置从*改为仅允许你的域名,浏览器端的CORS限制可阻止其他网站直接发起请求,配合后端Origin校验形成双层防护。

内容的提问来源于stack exchange,提问作者vpv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:22:44