使用Cognito为AWS上的用户使用代码验证无服务器的React Web应用程序

时间:2018-04-19 02:29:56

标签: amazon-web-services authentication aws-api-gateway cognito

所以这是我的方案,我在AWS上使用无服务器架构开发了一个Web应用程序。我使用S3来托管我的静态内容,我的所有服务器端代码都在Lambda函数中实现,并通过API网关访问。现在我正在尝试使用Cognito和用户池来实现身份验证层。

我一直在关注this page上的说明并创建了一个用户池。完成后,我可以通过在浏览器的地址栏中输入这样的URL来测试我的用户池:

https://my_subdomain_under_aws/login?response_type=code&client_id=my_app_client_id&redirect_uri=my_callback_url

重要的部分(对我而言)是response_type=code,根据相同的文档也可以是response_type=token。在这一点上,我不确定他们的差异是什么,我应该如何在他们之间做出选择。

无论如何,打开提到的URL会将您带到AWS默认登录表单。用户成功通过身份验证后,浏览器将重定向到提供的redirect_uri,其中包含一个额外参数/?code=12345678-1234-1234-1234-123456789012。此时,我想我应该提取code(在客户端使用Javascript)并将其传递给API网关并使用它来验证用户。但我不确定如何。我发现this page解释了令牌的步骤,但代码呢?

1 个答案:

答案 0 :(得分:0)

如果您要使用代码授予,则需要将代码转发到您的身份验证API后端并从中获取id_token。或者,您可以安全地将刷新令牌存储在后端中,以便您可以在当前过期之前使用它来发出新的id_tokens。使用此id_token,您可以调用API,您可以在API网关自定义授权Lambda或使用Cognito Authorizer验证id_token。

但是,使用AWS Amplify JS库可以进一步简化植入Cognito。 AWS最近推出了此功能,以实现完整的身份验证流程,以最大限度地减少工作量。