AWS API网关自定义授权程序AuthorizerConfigurationException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS API网关自定义授权程序AuthorizerConfigurationException相关的知识,希望对你有一定的参考价值。

对于Kinesis流,我使用AWS API Gateway创建了一个代理API。我使用python Lambda为代理添加了一个自定义授权程序。在发布lambda函数和部署API之后,我能够使用Gateway Test功能成功测试API。我可以看到cloudwatch中的日志,其中包含来自自定义auth lambda函数的详细打印。身份验证成功后,API Gateway将记录推送到我的Kinesis流 但是当我从Chrome Postman客户端调用相同的API时,我得到500内部服务器错误,响应头包括X-Cache→来自cloudfront的错误,x-amzn-ErrorType→AuthorizerConfigurationException

Lambda auth函数返回允许对我的API执行请求的策略。返回的政策文件是:

            
              "policyDocument": 
                "Version": "2012-10-17",
                "Statement": [
                  
                    "Action": "execute-api:Invoke",
                    "Resource": [
                      "arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*"
                    ],
                    "Effect": "Allow"
                  
                ]
              ,
              "principalId": "Foo"
            

为什么请求会因Chrome或curl而失败,但相同的API测试可以在API网关中正常运行?

答案

AuthorizerConfigurationException通常表示API Gateway由于权限错误而无法调用授权程序。

请确保您已正确配置API网关调用的功能。通过删除功能并将其重新添加到授权程序,可以轻松重置此功能。然后,控制台将提示您添加必要的权限。

另一答案

找出导致问题的原因。从python lambda函数,我返回一个json字符串实例。相反它应该是json对象。奇怪的是,当我从API网关“测试”功能测试API时,相同的lambda函数没有错误。但是当从互联网(curl或chrome)调用API时,它失败了。

#return policy_string ... this is incorrect.
return json.loads(policy_string)
另一答案

在我的情况下,我没有返回格式正确的IAM策略文档。我的Authorizer函数对如何从请求中获取一些参数做了错误的假设,并且默认结果不是正确的策略(这是我的具体情况)。我设法使用CloudWatch日志服务对其进行调试,传统的日志记录指令来自我的功能代码。

另一答案

我遇到了同样的错误,在我的情况下是一个nodejs函数,我正在添加一个上下文密钥作为数组。


  policyDocument: 
  Version: '2012-10-17',
  Statement: [
    Action: 'execute-api:Invoke',
    Effect: effect,
    Resource: `$arn.split('/').slice(0, 2).join('/')/*`,
  ],
,
context: 
  roles: ['admin']

正如医生所说:

您可以通过调用$ context.authorizer.stringKey,$ context.authorizer来访问映射模板中的上下文映射的stringKey,numberKey或booleanKey值(例如,“value”,“1”或“true”)。 numberKey或$ context.authorizer.booleanKey。返回的值都是字符串化的。请注意,您不能将JSON对象或数组设置为上下文映射中任何键的有效值。

删除角色键,它正在工作。

以上是关于AWS API网关自定义授权程序AuthorizerConfigurationException的主要内容,如果未能解决你的问题,请参考以下文章

具有自定义授权者和 CORS 间歇性 200 然后 403 然后 200 的 AWS API 网关 ...奇怪

Magento 自定义支付网关未触发“授权”或“捕获”方法

未调用 AWS API Gateway 自定义授权方

AWS API Gateway 自定义授权方有用吗?

AWS API Gateway 自定义授权方给予例外

API Gateway 自定义授权者