API Gateway: 使用Cognito 用户池认证器向请求中注入用户ID和电子邮件

0

【以下的问题经过翻译处理】 我继承了一个API Gateway设置,它使用Cognito用户池作为授权器。由于一些原因,为服务API的Lambda函数会再次进行授权,获取请求中的“Authorization”头并执行自己的JWT解码例程。据我所知,这是不必要的,因为如果请求到达此点,用户已经经过Cognito进行了身份验证。

因此,我认为可以去除这个额外的身份验证层。我的问题是关于获取用户的Cognito属性,例如用户名和电子邮件。目前的代码使用“cognito_idp” boto3客户端使用“Authentication”头中的访问令牌进行“get_user”调用。我认为这是多余的!但是,虽然请求中有Cognito用户属性字段,但它们全部设置为“None”。

我是否缺少通过Cognito授权器获取用户属性的正确方法?

1 回答
0

【以下的回答经过翻译处理】 如果您在API网关中设置了Cognito用户池身份验证,则API网关将封锁非有效用户的请求。

来自Cognito用户池的身份令牌或访问令牌将是JWT令牌。在后端验证JWT是另一层保护,如果您的后端想要确保中间没有叛徒发送带有虚假JWT令牌绕过API网关的请求。有其他方法可以防止该情况发生,但您继承应用程序的人可能会有这种思路。

另外,如果您的后端需要来自JWT令牌的声明来执行其他操作并需要访问声明,则必须解析JWT。

如果用户已在Cognito用户池中注册用户属性(如电子邮件和电话号码),则这些属性应在JWT声明中可用。如果在Cognito用户池中设置了这些属性的用户的声明为空,您是否看到了?

profile picture
专家
已回答 1 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则