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

0

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

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

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

1 Antwort
0

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

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

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

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

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen