由于内部错误,AWS Cognito Authorizer错误500执行失败-JWT声明中的值为空

时间:2018-11-13 01:58:55

标签: aws-api-gateway amazon-cognito terraform terraform-provider-aws

我与Cognito授权者有问题,并且用尽了测试选项(我能想到),所以想知道是否有人遇到过类似的问题。我在论坛上进行了搜索,以前的实例似乎与AWS事件有关,并且已经“解决了”。我的问题已经持续了一个多星期。

我有3个使用Terraform(对不起的云形成)构建的Cognito用户池,并作为API网关中的Cognito授权人附加到不同的REST API。我还有另外3个API,几乎3个几乎完全相同(名称除外)。

如果我使用通过AWS Amplify(或直接使用Cognito API)获得的有效JWT,并使用控制台测试授权者,则使用CLI测试授权者,或在auth开启的情况下向端点发出API请求,我得到以下信息:

{
    "clientStatus": 500,
    "log": "Execution failed due to an internal error",
    "latency": 28
}

我已打开API网关登录,但它提供的见解很少:

00:17:50 (63aac040-e610-11e8-a304-1dab6e773ddd) Extended Request Id: QOP7MG0ELPEFUBg=
00:17:50 (63aac040-e610-11e8-a304-1dab6e773ddd) Starting authorizer: x1rebc for request: 63aac040-e610-11e8-a304-1dab6e773ddd
00:17:50 (63aac040-e610-11e8-a304-1dab6e773ddd) Execution failed due to an internal error
00:17:50 (63aac040-e610-11e8-a304-1dab6e773ddd) Gateway response type: DEFAULT_5XX with status code: 500
00:17:50 (63aac040-e610-11e8-a304-1dab6e773ddd) Gateway response body: {"message":null}
00:17:50 (63aac040-e610-11e8-a304-1dab6e773ddd) Gateway response headers: {Access-Control-Allow-Origin=*, Access-Control-Allow-Headers=Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token, Access-Control-Allow-Methods=GET,OPTIONS}

如果我复制Terraform脚本并部署另一个用户池和授权器,然后将其附加到损坏的API端点,则一切正常。如果我将已经部署的其他3个授权者之一附加到损坏的API端点上,那么一切都很好。

如果我将授权者从断开的端点连接到另一个正在工作且已启用身份验证的API端点(在与该工作的授权者一起工作的另一个API中),则该API端点将中断...因此,这建议对我来说,这是一个Cognito问题,我无法获得任何日志!

如果要对几乎所有其他AWS资源进行装箱,请重新部署并重新启动。但是,了解此问题的根本原因对我而言非常重要,因为将生产用户池以及所有用户及其详细信息进行分箱,据我所知,这些用户不能导出或迁移,并且将Web应用程序重新配置为使用新的Cognito应用程序和用户池ID(据我所知),这些ID不能进行静态映射(据我所知)在生产环境中并不是我要冒的风险。

任何进一步的信息或指针将不胜感激!谢谢,

汤姆

2 个答案:

答案 0 :(得分:1)

在我的情况下,由于在cognito用户池中定义的自定义属性的数据类型不匹配,并且是从预令牌生成器lambda添加时出现的,因此出现此错误。

答案 1 :(得分:0)

如果有人遇到这个问题,那么我就到了问题的最深处(几个月前已经解决了这个问题)。

例如,我在令牌生成前触发器中创建的JWT声明具有空值。

{ "field": null }

Cognito很好用,并在您登录时将令牌发回,并带有此null值。但是,当您使用它登录时,它会掉下来并给您一个神秘的“内部错误”,而没有详细信息。

更改为以下内容可以解决此问题:

{ "field" "null" }