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

问题描述 投票:0回答:6

我在 AWS 上创建了一个 RESTful API,我正在尝试测试 POST 方法。我在 api gatemway 控制台的测试界面中向请求主体提供了一个示例请求,它得到了这个响应:

{
  "Error": "Authorization not configured",
  "Reference": "e6b7ec86-97fe-11e7-b480-ebefe7f11420"
}

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

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

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

我觉得我一定遗漏了一些明显的东西,但是当我在这里逐步进行时,一切似乎都井井有条。非常感谢任何帮助,如果我可以提供任何其他信息,请告诉我。

javascript amazon-web-services aws-lambda aws-api-gateway amazon-cognito
6个回答
20
投票

我发现这个问题链接自 AWS 论坛 那里的 OP 和我在阅读 Wild Rydes 教程时都遇到了同样的问题。

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

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

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

  1. 选择 Cognito 池。

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

更改完成后,方法请求不应再为 auth 说 None

  1. 重新部署 API。


3
投票

如果其他人遇到此问题,我只需清除浏览器上的缓存数据即可使其正常工作。


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)
    }
  })
}

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

Authorization
标头。


0
投票

我已经阅读了本教程的德语版本,他们也翻译了令牌源的值,此时这是错误的。
我只需要将 API 网关中的令牌源更改为英文短语

Authorization
并再次部署 API 即可。


0
投票

我在 OPTIONS 方法请求中 set the Auth to none 之前遇到了问题。

选择左侧的 OPTIONS,然后单击 Method Request。确保Authorization is set to NONE。请记住部署更改。


0
投票

请确认我们需要放置以下代码的位置。

getCurrentAuthToken:函数(用户池){ 返回新的承诺(函数 fetchCurrentAuthToken(解决,拒绝) 让 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)
}

}) }

© www.soinside.com 2019 - 2024. All rights reserved.