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

viewer-request阶段Lambda@Edge重定向至API Gateway报Missing Authentication Token问题咨询

问题排查与修复方案

现有实现是否正确

核心思路(根据host识别租户、查询租户对应API端点后重定向)是可行的,但存在代码逻辑漏洞和配置缺失,是触发Missing Authentication Token报错的直接原因。

报错根因

API Gateway返回该报错的核心原因是请求无法匹配到有效且允许访问的路由,对应到你的场景具体为以下几种可能:

  1. 重定向路径拼接错误:你当前用data.Item.api + uri手动拼接路径,很容易出现两类问题:
    • DynamoDB存储的api字段未携带API Gateway的阶段前缀(API Gateway默认端点格式为https://<id>.execute-api.<region>.amazonaws.com/<stage>/,如果只存到域名部分,拼接后路径会缺少阶段名,路由匹配失败)
    • 拼接时出现重复斜杠,比如api末尾已经带/,uri开头也带/,最终生成//格式的无效路径
  2. API Gateway未开放匿名访问:如果你的API Gateway开启了IAM认证、API Key校验或自定义授权器,客户端重定向后发起的请求未携带对应认证凭证,就会被拦截返回该报错
  3. 部分极端情况是Lambda@Edge没有DynamoDB读取权限,查询不到租户对应的API地址,返回的异常响应被错误解析为API Gateway的返回

需要补充的配置与代码修正

  • 代码修正
    • 替换手动拼接路径的逻辑,使用URL构造方法自动处理路径格式问题:
      const targetUrl = new URL(request.uri, data.Item.api).href
      // 把location值替换为targetUrl即可
      
    • 增加DynamoDB查询异常的日志输出,方便排查权限类问题
  • 配置修正
    • 确认DynamoDB中存储的api字段是完整的、带阶段名的API Gateway端点地址
    • 如果希望客户端直接访问API Gateway,将对应API路由的授权方式设置为NONE,关闭不必要的认证校验;如果需要保留认证,要确保客户端请求会自动携带符合要求的认证凭证
    • 确认API Gateway的对应路由已经部署到指定阶段,路径规则和用户请求的uri匹配
    • 给Lambda@Edge的执行角色添加dynamodb:GetItem权限,同时确保DynamoDB表和Lambda@Edge的部署区域一致(Lambda@Edge默认在us-east-1部署,跨区域调用DynamoDB需要额外配置)

可选优化:如果不想把API Gateway直接暴露给客户端,可以不用返回302重定向,改为在Lambda@Edge中直接修改请求的目标域名和路径,由CloudFront转发请求到API Gateway,同时可以在Lambda侧统一注入API Gateway需要的认证信息,安全性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:03