Aws lambda 如何配置我的无服务器YML以使用我的API网关授权器?

Aws lambda 如何配置我的无服务器YML以使用我的API网关授权器?,aws-lambda,aws-api-gateway,serverless-framework,Aws Lambda,Aws Api Gateway,Serverless Framework,我遵循教程使用Cognito通过API网关授权对lambda函数的访问 我已经用一个已验证的用户、一个API网关授权者和一个lambda函数创建了我的用户池,以登录并获取令牌ID 当我使用lambda函数获取令牌ID并在AWS控制台中测试它时,授权者返回200,因此我认为它正在工作,但当我尝试将令牌发送到lambda函数时,它返回“401 Unauthorized” 我的YML配置: teste: handler: handler.teste memorySize: 128 even

我遵循教程使用Cognito通过API网关授权对lambda函数的访问

我已经用一个已验证的用户、一个API网关授权者和一个lambda函数创建了我的用户池,以登录并获取令牌ID

当我使用lambda函数获取令牌ID并在AWS控制台中测试它时,授权者返回200,因此我认为它正在工作,但当我尝试将令牌发送到lambda函数时,它返回“401 Unauthorized”

我的YML配置:

teste:
  handler: handler.teste
  memorySize: 128
  events:
    - http:
        path: teste
        method: get
        authorizer:
          name: api-authorizer
          arn: arn:aws:cognito-idp:XXXXXXXXX:XXXXXXXXXX:userpool/XXXXXXX_XXXXXXX
          type: token
编辑

我查看了AWS控制台,我的lambda函数和API网关触发器有哪些细节:

Autorização: COGNITO_USER_POOLS
Caminho do recurso: /teste
Endpoint de API: https://XXXXXXXXX.execute-api.XXXXXXXXX.amazonaws.com/dev/teste
Estágio: dev
Método: GET
编辑2

我还发现,我的无服务器版本是1.47,看起来它是最新的版本,尽管我已经阅读了堆栈上的一些问题,其中他们说无服务器版本是1.5,我阅读了几次页面,我意识到我没有使用正确的方式,所以我将YML代码改为:

  functions:
teste:
  handler: handler.teste
  memorySize: 128
  events:
    - http:
        path: teste
        method: get
        type: COGNITO_USER_POOLS
        authorizer:
          arn: arn:aws:cognito-idp:XXXXXXXX:XXXXXXXXX:userpool/XXXXXXXX_XXXXXXXXX
          authorizerId:
            Ref: api-authorizer

我还将我的authorizer source更改为Authorization。

当您定义一个authorizer时,它会要求用户定义一个标头,该标头将与令牌一起传递。你要发送这个标题吗?您可以共享执行API调用的客户端代码吗?我正在使用Postman发送我的请求,并添加这个头:x-API-token,这在API网关授权器测试中显示。这是正确的吗?标题的值是多少?我想了解的是你是如何得到这个代币的。所以说客户端代码,我的意思是:您目前如何针对cognito进行身份验证?在授权人本身中,有一个
令牌源
属性,您可以自己定义它。通常,人们坚持使用
授权
。一旦您通过身份验证,您需要获取从Cognito发送的令牌并将其传递到您定义的头上。My authorizer不是lambda函数,它实际上是在AWS console>API Gateway>Authorizers>Create new authorizer中创建的。它会影响什么吗?我正在使用lambda函数登录cognito并向我发送令牌。这个函数是我在这里的问题中给出的答案: