提供授权方 arn 的无服务器功能 returns 401

Serverless function with authorizer arn provided returns 401

我正在使用无服务器。

当我在客户端设置我的以下功能之一时,其中包括授权方,我收到 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}

在客户端,我希望同一用户池的登录用户能够得到预期的响应。然而它 returns 401.

感谢任何帮助。谢谢

经过绝望的时间,我想出了解决方案。

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


  1. cors: true之后添加integration: 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}

  1. 发送Authorizationheader,发送请求时Auth.currentSession()的值idToken.jwtToken。

下面是使用 @aws-amplify/apiAPI@aws-amplify/authAuth 发送 header 的示例。

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