所以我使用 cognito 用户池和谷歌作为身份提供者。我配置了所有内容,并将数据发送到谷歌,谷歌重定向回亚马逊身份验证端点,然后使用 URL 中的以下参数重定向回我的应用程序:
AccessToken
ExpiresIn
IdToken
TokenType
现在,我不知道如何使用这些来实际创建一个 Cognito “会话”,该“会话”进入 javascript api 工作流程并变得自动(发送、接收和更新令牌)
我如何实现这一目标?
所以我使用 cognito 用户池和谷歌作为身份提供者。我配置了所有内容,并将数据发送到谷歌,谷歌重定向回亚马逊身份验证端点,然后使用 URL 中的以下参数重定向回我的应用程序:
AccessToken
ExpiresIn
IdToken
TokenType
现在,我不知道如何使用这些来实际创建一个 Cognito “会话”,该“会话”进入 javascript api 工作流程并变得自动(发送、接收和更新令牌)
我如何实现这一目标?
使用 IDToken 验证您的 API
身份验证后,您可以在浏览器中缓存 IDToken,并在登录用户从您的 Web 或移动应用程序请求 API 调用时使用它。然后,您可以在 API 端点为每个请求验证令牌。
验证 IDToken
有关使用令牌并在 API 端点验证它的更多信息,请参阅AWS 文档中的 Using Tokens with User Pools。AWS 引入了一个名为aws-amplify的新库,它简化了一些实现。如果您将 AWS API Gateway 用于您的 API,则可以使用自定义授权方 Lambda 函数进行验证。
存储 IDToken 和安全性
此外,IDToken 是无状态令牌,这意味着它没有与 AWS Cognito 相关的会话。这意味着您无法在发布后撤销它。因此,保持其到期时间短很重要。
要允许您的身份验证 API 在过期之前发出新的 IDToken,您可能需要将 Refresh Token 存储在后端并使用它在 IDToken 过期之前发出新的令牌以实现滑动窗口。
注意:将 IDToken 存储在浏览器中,您可以决定使用多个可用的存储选项(例如 Cookies、LocalStorage)。但是,我不打算对安全影响发表评论,因为这本身就是一个长期的讨论,其中仍有一些自以为是的领域。当前可用的标准方法是设置服务器端 Cookie 并实现 CSRF。除非您仅使用 IDToken 来启动身份验证并使用会话代替重复请求,否则实施起来将具有挑战性。