所以这是我的方案,我在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解释了令牌的步骤,但代码呢?
答案 0 :(得分:0)
如果您要使用代码授予,则需要将代码转发到您的身份验证API后端并从中获取id_token。或者,您可以安全地将刷新令牌存储在后端中,以便您可以在当前过期之前使用它来发出新的id_tokens。使用此id_token,您可以调用API,您可以在API网关自定义授权Lambda或使用Cognito Authorizer验证id_token。
但是,使用AWS Amplify JS库可以进一步简化植入Cognito。 AWS最近推出了此功能,以实现完整的身份验证流程,以最大限度地减少工作量。