【问题标题】:AWS API Gateway not passing Endpoint request header even after transformation即使在转换之后,AWS API Gateway 也没有传递 Endpoint 请求标头
【发布时间】:2022-10-19 13:48:03
【问题描述】:

我正在尝试通过 API Gateway 将 Authorization 标头传递到 Lambda 函数中。我可以在网关日志中看到密钥。但是,即使在我使用标准脚本(见下文)转换输入之后,授权头仍然无法进入 Lambda 函数。

关于我所缺少的任何建议?

API 日志摘录

Endpoint request headers: 
{
 X-Amz-Date=20220419T143450Z,
 x-amzn-apigateway-api-id=?????????,
 Accept=application/x-www-form-urlencoded,
 User-Agent=AmazonAPIGateway_hhompg4,
 Host=lambda.us-east-1.amazonaws.com,
 X-Amz-Content-Sha256=??????????????????????????????????????????????????,
 X-Amzn-Trace-Id=Root=1-????????-???????????????????,
 x-amzn-lambda-integration-tag=abcd-4e32-1234-???????????????, Authorization=*********************************************************************************************************************************************************************************************************************************************************************************************************************************************70cc,
 X-Amz-Source-Arn=arn:aws:execute-api:us-east-1:-----------------:asfd/test/POST/,
 X-Amz-Security-Token=---------------------------------------// [TRUNCATED]

方法执行 / - POST - 集成请求转换脚本:

{
    "method": "$context.httpMethod",
    "body" : $input.json('$'),
    "headers": {
        #foreach($param in $input.params().header.keySet())
        "$param": "$util.escapeJavaScript($input.params().header.get($param))"
        #if($foreach.hasNext),#end
        #end
    }
}

到达 lambda 函数的事件键:

2022-04-19T14:29:34.457Z    INFO    Object.keys(event) [
  'resource',
  'path',
  'httpMethod',
  'headers',
  'multiValueHeaders',
  'queryStringParameters',
  'multiValueQueryStringParameters',
  'pathParameters',
  'stageVariables',
  'requestContext',
  'body',
  'isBase64Encoded'
]

Object.keys(event.headers)

[
  'accept',
  'accept-encoding',
  'accept-language',
  'cache-control',
  'content-type',
  'Host',
  'origin',
  'referer',
  'sec-ch-ua',
  'sec-ch-ua-mobile',
  'sec-ch-ua-platform',
  'sec-fetch-dest',
  'sec-fetch-mode',
  'sec-fetch-site',
  'sec-fetch-user',
  'upgrade-insecure-requests',
  'User-Agent',
  'X-Amzn-Trace-Id',
  'X-Forwarded-For',
  'X-Forwarded-Port',
  'X-Forwarded-Proto'
]

【问题讨论】:

  • 内容类型是:“application/x-www-form-urlencoded”而不是“application/json”。很酷,脚本现在正在运行。但是对于标头,我仍然没有将 Authorization 标头放入 Lambda。
  • ``` INFO Object.keys(event) [ 'method', 'body', 'headers' ] ``` ``` INFO Object.keys(event.headers) [ 'accept', 'accept-encoding', '接受语言','缓存控制','内容类型','主机','来源','引用者','sec-ch-ua','sec-ch-ua-mobile','sec- ch-ua-platform'、'sec-fetch-dest'、'sec-fetch-mode'、'sec-fetch-site'、'sec-fetch-user'、'upgrade-insecure-requests'、'User-代理','X-Amzn-Trace-Id','X-Forwarded-For','X-Forwarded-Port','X-Forwarded-Proto']```

标签: aws-lambda aws-api-gateway


【解决方案1】:

我能够在请求标头中看到我的请求标头(授权),但在端点请求标头中看不到相同的内容。发现您必须在设置集成点时启用“使用 HTTP 代理集成”选项。

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2019-09-18
    • 2020-10-23
    • 2021-05-18
    • 2019-10-06
    • 2021-04-06
    相关资源
    最近更新 更多