AWS API Gateway方法测试:未配置错误授权

Jus*_*use 3 javascript amazon-web-services aws-lambda aws-api-gateway aws-cognito

我已经在AWS上创建了RESTful API,并且正在尝试测试POST方法。我向api gatemway控制台的测试界面中的请求正文提供了一个示例请求,它会收到以下响应:

{
  "Error": "Authorization not configured",
  "Reference": "e6b7ec86-97fe-11e7-b480-ebefe7f11420"
}
Run Code Online (Sandbox Code Playgroud)

我最初将此设置为具有对相应表的读/写访问权限的Cognito用户池,但是却收到此错误消息。我尝试删除方法中的授权只是为了测试这一点,但再次收到此错误。

据我所知,我已经全面设置了授权。

  • 创建了IAM角色以添加,更新,查询和删除表(trusted entities: AWS service: lambda)和AWSLambdaBasicExecutionRole
  • 使用现有(以上)角色的Lambda函数
  • 使用我的用户池进行授权创建的授权者
  • 从上方使用Cognito用户池授权者创建的资源和方法(POST)

我觉得我必须丢失一些明显的东西,但是在这里逐步进行时似乎一切都井然有序。非常感谢您的帮助,如果可以提供其他任何信息,请告诉我。

imj*_*osh 10

我在AWS论坛上找到了这个问题,那里的OP和我在浏览Wild Rydes教程时都遇到了同样的问题。

我可以通过以下方法解决此问题:

  1. 在API的“资源”下的设置中,单击“ POST”方法,然后单击“方法请求”。

在此处输入图片说明

  1. 在“方法请求”设置中,单击“授权”的编辑图标

在此处输入图片说明

  1. 选择“认知池”。

在此处输入图片说明

  1. 单击复选图标以保存更改

在此处输入图片说明

进行更改后,方法请求不应再对身份验证说“无”

在此处输入图片说明

  1. 重新部署API。

在此处输入图片说明

  • 很好,我忘记在更改 Auth 属性后重新部署 API。 (2认同)

Jus*_*use 0

好吧,我在浏览了 WildRydes 教程和 Lambda 测试后发现了这一点。我需要将Authorization标头设置为当前用户的 JWT 令牌。我用以下函数做到了这一点:

getCurrentAuthToken: function (userPool) {
  return new Promise(function fetchCurrentAuthToken (resolve, reject) 
    let cognitoUser = userPool.getCurrentUser()

    if (cognitoUser) {
      cognitoUser
        .getSession(function sessionCallback (err, session) {
          if (err) {
            reject(err)
          } else if (!session.isValid()) {
            resolve(null)
          } else {
            resolve(session.getIdToken().getJwtToken())
          }
        })
    } else {
      resolve(null)
    }
  })
}
Run Code Online (Sandbox Code Playgroud)

并使用承诺的返回值在我的请求中设置Authorization标头。