当前位置: 首页 > 知识库问答 >
问题:

AWS API网关:由于配置错误执行失败:响应中的JSON无效

曹景铄
2023-03-14

我有一个API网关设置,它带有一个调用Lambda函数的自定义授权程序。出于测试目的,我从这里复制了以下示例:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html#api-gateway-proxy-integration-lambda-function-nodejs

我得到了与文档中相同的答案,但当我测试授权器时,我得到了这个StackTrace:

    Endpoint request body after transformations: {"type":"TOKEN","authorizationToken":"test","methodArn":"arn:aws:execute-api:ap-southeast-2:893445519708:uyue0zqh15/null/GET/"}
    Authorizer result body before parsing: {"statusCode":200,"headers":{"x-custom-header":"my custom header value"},"body":"{\"message\":\"Hello World!\",\"input\":{\"type\":\"TOKEN\",\"authorizationToken\":\"test\",\"methodArn\":\"arn:aws:execute-api:ap-southeast-2:893445519708:uyue0zqh15/null/GET/\"}}"}
    Execution failed due to configuration error: Invalid JSON in response: {"statusCode":200,"headers":{"x-custom-header":"my custom header value"},"body":"{\"message\":\"Hello World!\",\"input\":{\"type\":\"TOKEN\",\"authorizationToken\":\"test\",\"methodArn\":\"arn:aws:execute-api:ap-southeast-2:893445519708:uyue0zqh15/null/GET/\"}}"}
    AuthorizerConfigurationException

为什么授权者不喜欢JSON响应?

共有1个答案

邢曦
2023-03-14

授权程序响应格式与集成代理响应格式不同。我看得出来这很混乱!

自定义授权程序的输出应符合以下格式:

{
  "principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client.
  "policyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:<regionId>:<accountId>:<appId>/<stage>/<httpVerb>/[<resource>/<httpVerb>/[...]]"
      }
    ]
  },
  "context": {
    "key": "value",
    "numKey": 1,
    "boolKey": true
  }
}

PrincipalIdPolicyDocument是必需的,Context是可选的。

policydocument不是用户定义的,它与在API网关操作和参考资料http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policy-to-invoke-api.html上操作的常规IAM策略的语法相同

Lambda web控制台中也有很好的蓝图供python和node中的授权者使用,这里还有一个Java蓝图:https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints

 类似资料:
  • 我正在从AWS API网关调用AWS Lambda函数。返回的JSON需要压缩,因为它有时会变得太大(身体大小太大等)。但是,我在通过API网关获取响应时遇到了一些问题。这是我的Java代码: 我已经检查了Base64输出,它似乎工作正常(粘贴了它)https://www.base64decode.org/). 此外,当我与Postman核对时,我得到一个二进制blob,如果我将响应保存为以.gz

  • 我已经删除了。锁定文件和节点\u模块并再次尝试安装。然而,它不起作用。你能帮我修一下吗?

  • 错误:任务执行失败 ': app:使用合并Java Res For Debug转换资源'。 com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException: APK META-INF/LICENSE File1中复制的重复文件: C:\用户Jithin-P

  • 鉴于以下情况: 检查我的和versions是否正确: 不确定我的< code>brew安装的< code>mvn是否有问题,我将其移除并下载了< code>mvn-...来自Apache的bin.zip然后我设置了我的路径,验证了< code>mvn -version和< code>java -version输出的是相同的版本。但是,我仍然有同样的问题。 我查看了前3个(来自搜索)StackOve

  • 当我尝试构建项目时,Gradle build消息会报告以下消息: 失败:构建失败,但有一个异常。 > Gradle文件

  • 我刚开始使用Kotlin,并尝试使用Dagger2进行设置,我见过一些示例,但它们似乎都不适合我。 我一直收到这个 错误:任务执行失败:应用程序:kaptDebugKotlin。 内部编译器错误。有关更多详细信息,请参阅日志 我有我的身材。gradle(模块:应用程序)