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

时间:2017-09-12 21:31:02

标签: 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"
}

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

据我所知,我已全面设立授权。

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

我觉得我必须遗漏一些明显的东西,但是当我在这里逐步完成时,一切似乎都是有序的。非常感谢任何帮助,如果我能提供任何其他信息,请告诉我。

5 个答案:

答案 0 :(得分:5)

我发现这个问题与AWS forums OP相关联,我在浏览Wild Rydes教程时遇到了同样的问题。

我能够通过以下方式解决这个问题:

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

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

      enter image description here

      1. 选择Cognito池。
      2. enter image description here

        1. 点击检查图标以保存更改
        2. enter image description here

          一旦进行了更改,方法请求就不应再对auth

          说“无”

          enter image description here

          1. 重新部署API。
          2. enter image description here

答案 1 :(得分: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)
    }
  })
}

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

答案 2 :(得分:0)

如果其他人遇到此问题,我只需要清除浏览器中的缓存数据即可使用。

答案 3 :(得分:0)

我已经看完了本教程的德语版本,他们也翻译了令牌源的值,这是错误的。
我只需要将API网关中的令牌源更改为英语短语Authorization,然后再次部署该API即可。

答案 4 :(得分:0)

我遇到了问题,直到我在 OPTIONS 方法请求中set the Auth to none

选择左侧的选项,然后单击方法请求。确保Authorization is set to NONE。请记住部署更改。