Serverless framework 授权人arn提供的无服务器功能返回401

Serverless framework 授权人arn提供的无服务器功能返回401,serverless-framework,serverless,aws-serverless,Serverless Framework,Serverless,Aws Serverless,我使用的是无服务器 当我在客户机上设置以下一个函数(包括authorizer)时,我收到401 但是,当我删除它时,没有问题 provider: name: aws runtime: nodejs8.10 region: eu-west-1 environment: USER_POOL_ARN: "arn:aws:cognito-idp:eu-west-1:974280.....:userpool/eu-west-1........" functions: crea

我使用的是无服务器

当我在客户机上设置以下一个函数(包括authorizer)时,我收到401

但是,当我删除它时,没有问题

provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1
  environment:
    USER_POOL_ARN: "arn:aws:cognito-idp:eu-west-1:974280.....:userpool/eu-west-1........"

functions:
  create:
    handler: handlers/create.main
    events:
      - http:
          path: create
          method: post
          cors: true
          authorizer:
            type: COGNITO_USER_POOLS
            name: serviceBAuthFunc
            arn: ${self:provider.environment.USER_POOL_ARN}
在客户端上,我希望同一用户池的登录用户可以得到预期的响应。然而,它返回401


感谢您的帮助。谢谢。

在度过了绝望的几个小时后,我想出了解决办法

对于任何遇到相同问题的人,这里有一个对我有效的解决方案


  • cors:true
    之后添加
    集成:lambda
    (尽管顺序无关紧要)
  • 下面只是一个例子

    functions:
      create:
        handler: handlers/create.main
        events:
          - http:
              path: create
              method: post
              cors: true
              integration: lambda   // this solves the problem
              authorizer:
                type: COGNITO_USER_POOLS
                name: serviceBAuthFunc
                arn: ${self:provider.environment.USER_POOL_ARN}
    

  • 发出请求时使用Auth.currentSession().idToken.jwtToken的值发送
    授权
    头。
  • 下面是使用
    @aws-amplify/API
    API
    @aws-amplify/Auth
    Auth
    发送头的示例

    const currentSession = await Auth.currentSession() 
    await API.post(
      'your-endpoint-name', 
      "/your-endpoint-path/..",
      {
        headers: {
          'Authorization': currentSession.idToken.jwtToken
        }
      }
    )