2

我正在尝试使用无服务器框架在 API Gateway 中创建自定义 lambda 授权方。

我的服务的客户端可能会发送“授权”或“X-Custom”标头(但不能同时发送)。所以我需要的是一个没有身份源的自定义授权人。

狙击的无服务器 YAML 如下:

functions:
  create:
    handler: posts.create
    events:
      - http:
          path: posts/create
          method: post
          authorizer:
            arn: xxx:xxx:Lambda-Name
            resultTtlInSeconds: 0
            type: request
          integration: lambda
          cors: true
          request:
            template:
              application/json: '{"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},"queryParams": {#foreach($param in $input.params().querystring.keySet())"$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end#end},"pathParameters": {#foreach($param in $input.params().path.keySet())"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end#end}}'

我正在使用以下请求模板,以便我的 lambda 获取标头并执行验证:

{"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},"queryParams": {#foreach($param in $input.params().querystring.keySet())"$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end#end},"pathParameters": {#foreach($param in $input.params().path.keySet())"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end#end}}

问题是当我运行无服务器部署命令时,授权方是使用“授权”身份资源创建的。

我的代码基于以下资源:

这让我想到了两个问题:

  1. 无服务器框架用于部署我的授权方的构造版本是什么?
  2. 如何在没有资源的情况下指定自定义授权方?
4

2 回答 2

2

这对我有用。

  identitySource: '',
  resultTtlInSeconds: 0 // You have to set this to 0. 

希望这可以减轻人们我刚刚经历的痛苦!:P

于 2021-02-25T20:38:12.567 回答
0

我的猜测是无服务器框架符合第一个版本,因为当我尝试将值设置为空列表时它会抱怨。使用和空字符串为我解决了这个问题。

identitySource: ''
于 2020-07-24T18:11:53.060 回答