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

AWS API网关自定义授权人授权配置异常

和弘博
2023-03-14

对于Kinesis流,我使用AWSAPI网关创建了一个代理API。我为代理添加了一个使用python Lambda的自定义授权器。在发布lambda函数和部署API之后,我能够使用网关测试功能成功地测试API。我可以在cloudwatch中看到日志,其中包含来自自定义auth lambda函数的详细打印。成功身份验证后,API网关将记录推送到我的Kinesis流

但是当我从Chrome Postman客户端调用相同的API时,我得到500个内部服务器错误,响应头包括X-Cache→ 来自cloudfront的错误,x-amzn-ErrorType→ 授权配置异常

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网关上运行良好?

共有3个答案

龙德海
2023-03-14

我遇到了同样的错误,在我的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.numberKey或$context.authorizer.booleanKey,可以访问映射模板中上下文映射的stringKey、numberKey或booleanKey值(例如,“value”、“1”或“true”)。返回的值都是字符串化的。请注意,不能将JSON对象或数组设置为上下文映射中任何键的有效值。

删除角色密钥,它就可以工作了。

谯英彦
2023-03-14

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

#return policy_string ... this is incorrect.
return json.loads(policy_string)
公良修竹
2023-03-14

AuthorizerConfiguration异常通常表示API网关由于权限错误而未能调用授权者。

请确保已正确配置API网关调用的函数。一个容易重置的方法是删除并重新添加该函数到您的授权程序。然后,控制台将提示您添加必要的权限。

 类似资料:
  • 我是API网关的新手。我尝试使用“自定义授权程序”。我遵循了下面的文档,并使用了网站提供的示例代码。https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html “令牌类型的lambda授权者”是工作的。 但是... 我对“请求类型”感到困惑,不知道如何将quer

  • Mono Apr 10 09:42:35 UTC 2017:转换后的endpoint请求主体:{“Type”:“Token”,“AuthorizationToken”:“ABC123”,“MethodArn”:“arn:aws:execute-api:ap-southeast-1:007183653813:OHLQXU9P57/null/Get/”}Mono Apr 10 09:42:36 UTC

  • 但是看起来在我的lambda响应和API网关之间发生了一些奇怪的事情, 变量在内部的某个地方被压缩得更低, 而我仍然得到了相同的解析错误, 它会接受其他格式的响应吗?字符串也不起作用。 我还应该尝试什么?我的策略格式错误吗? 我从这些站点获得了两种不同的策略格式- 1。http://docs.aws.amazon.com/apigateway/latest/developerguide/use-c

  • 我目前正在做一个需要自定义身份验证过程的项目。该应用程序将部署在AWS平台上,我正在考虑使用以下AWS服务,如 API网关 定制授权 EKS 计划是在docker容器中部署所有后端服务,并使用EKS服务进行容器编排过程。所有输入请求都将通过API网关进行验证,并路由到相应的后端服务 我们将通过以下可能的步骤使用自定义授权流程: 我们的应用程序(例如CHILD-APP)将与现有应用程序(例如PARE

  • 功能说明 目睹直播提供了一系列的授权观看方式,如密码验证,付费观看等,然而由于客户业务的多样性,实现如:接入客户自身账户体系,登陆OA系统后再跳转到目睹观看直播等一系列更高级的授权观看方式,此时就需要使用自定义授权。 自定义授权逻辑图 功能设置 首先,需在 某个频道 - 频道管理 - 授权观看 - 授权类型 中点击自定义授权,并输入您希望在观众进入观看页时跳转的链接,如: http://your-

  • 我希望为AWS Lambda/zappa使用一些“无服务器api服务器”,它使用自定义api网关授权器进行用户身份验证。在无服务器AWS lambda服务中,使用自定义授权器而不是直接在代码控制器中检查发布的JWT令牌是否有相当大的安全性或成本效益?对我来说,用代码检查可能更方便。 更新我去了预请求钩子,但是有头级授权器,它更容易用于CORS,但它不支持的zappa我相信。也可以通过swagger