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

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

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

我有3个使用Terraform构建的Cognito用户池(抱歉Cloud Formation),并作为API Gateway中的Cognito Authorizers连接到不同的REST API。我有另外3个,几乎相同(名称除外)附加到另外3个API。

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

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

我已经启用了API Gateway登录,但它提供的信息很少:

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端点,那么一切正常。如果我附加已经部署到破坏的API端点的其他3个授权者中的一个,那么一切都很好。

如果我将授权程序从破坏的端点附加到另一个正在运行且已启用身份验证的API端点(在另一个使用工作授权程序的API中),则该API端点会中断......所以这向我建议它是一个Cognito问题,我无法得到任何日志!

如果它几乎是任何其他AWS资源我将其捆绑,重新部署并重新开始。但是,了解这一点的根本原因对我来说非常重要,因为将生产用户池和所有用户及其详细信息分箱,无法导出或迁移(据我所知)并将Web应用重新配置为使用新的Cognito App和用户池ID,这些ID无法静态映射(据我所知)并不是我想在生产环境中冒险的东西。

任何进一步的信息或指针将非常感谢!谢谢,

汤姆

aws-api-gateway amazon-cognito terraform terraform-provider-aws
1个回答
0
投票

如果有人遇到这个问题,我已经解决了问题的根源(几个月前已经解决过这个问题)。

我在预令牌生成触发器中创建了一个带有空值的JWT声明,例如

{ "field": null }

Cognito对此很好,并在您登录时发回令牌,并使用此空值完成。但是,当您使用它登录时,它会摔倒并给您一个神秘的“内部错误”,没有任何细节。

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

{ "field" "null" }

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