从自定义授权器Lambda函数访问POST请求正文

Thi*_*lva 10 lambda amazon-web-services aws-lambda

我在AWS中有一个自定义授权器lambda函数,它为一个API配置了另一个带有POST资源的Lambda函数.

授权器是按类型设置的Request,而不是Token因为我没有在Authorization标头中使用令牌,而是想要访问正在发布的表单数据.

当我检查event参数的内容到我的授权者函数时,我没有看到任何原始POST请求体(表单数据).但是,如果我将资源更改为a GET,我会queryStringParameters按预期看到表单数据.

(请注意,当请求为POST时,queryStringParameters始终为空对象)

在使用POST方法时,无论如何都要从函数中的请求中访问表单数据?

以下是event使用POST时授权者函数的参数将包含的示例:

{
  type: 'REQUEST',
  methodArn: 'arn:aws:execute-api:us-east-1:********:********/dev/POST/receive',
  resource: '/receive',
  path: '/sms/receive',
  httpMethod: 'POST',
  headers: {
    Accept: '*/*',
    'CloudFront-Viewer-Country': 'US',
    'CloudFront-Forwarded-Proto': 'https',
    'CloudFront-Is-Tablet-Viewer': 'false',
    'CloudFront-Is-Mobile-Viewer': 'false',
    'User-Agent': 'TwilioProxy/1.1',
    'X-Forwarded-Proto': 'https',
    'CloudFront-Is-SmartTV-Viewer': 'false',
    Host: 'api.myredactedcompany.io',
    'X-Forwarded-Port': '443',
    'X-Amzn-Trace-Id': 'Root=**************',
    Via: '1.1 ***************.cloudfront.net (CloudFront)',
    'Cache-Control': 'max-age=259200',
    'X-Twilio-Signature': '***************************',
    'X-Amz-Cf-Id': '****************************',
    'X-Forwarded-For': '[redacted IP addresses]',
    'Content-Length': '492',
    'CloudFront-Is-Desktop-Viewer': 'true',
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  queryStringParameters: {},
  pathParameters: {},
  stageVariables: {},
  requestContext: {
    path: '/sms/receive',
    accountId: '************',
    resourceId: '*****',
    stage: 'dev',
    requestId: '5458adda-ce2c-11e7-ba08-b7e69bc7c01c',
    identity: {
      cognitoIdentityPoolId: null,
      accountId: null,
      cognitoIdentityId: null,
      caller: null,
      apiKey: '',
      sourceIp: '[redacted IP]',
      accessKey: null,
      cognitoAuthenticationType: null,
      cognitoAuthenticationProvider: null,
      userArn: null,
      userAgent: 'TwilioProxy/1.1',
      user: null
    },
    resourcePath: '/receive',
    httpMethod: 'POST',
    apiId: '*******'
  }
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*sca 11

这个答案到类似的问题,它似乎并不身体提供定制的授权人.此处的文档未列出body参数.我想也许这个想法是授权者应该依赖路由和头文件而不是进入应用程序级的主体数据.

  • 如果你考虑一下,这有点傻,因为亚马逊自己的身份验证机制需要全身内容.能够实现基于签名的授权器以获得更好的安全性将是非常好的. (9认同)
  • 我同意正文很有用 - 特别是当您需要验证第三方 Webhook 签名时,例如 Stripe Webhooks 提供的签名。 (4认同)