Javascript AWS Cognito标识池:AWS凭据过期/续订

Javascript AWS Cognito标识池:AWS凭据过期/续订,javascript,amazon-web-services,amazon-cognito,Javascript,Amazon Web Services,Amazon Cognito,我正在构建一个AWS支持的站点,广义上讲,它具有以下功能: 根据Cognito用户池(该池由第三方SAML提供程序支持)对用户进行身份验证,并向他们提供令牌 使用Cognito标识池授予用于其他服务的用户凭据 允许用户使用上面的凭据直接从前端S3客户端执行一系列长期运行的S3上载 我正试图弄清楚我必须与代币和凭证进行的交互。我很清楚我要做什么: 我可以使用它们来调用标识池,并获得可以用于S3的AWS凭据 如果其他令牌在我完成之前过期,我可以使用刷新令牌刷新它们 这些令牌的过期详细信息在上面的链接

我正在构建一个AWS支持的站点,广义上讲,它具有以下功能:

  • 根据Cognito用户池(该池由第三方SAML提供程序支持)对用户进行身份验证,并向他们提供令牌
  • 使用Cognito标识池授予用于其他服务的用户凭据
  • 允许用户使用上面的凭据直接从前端S3客户端执行一系列长期运行的S3上载
  • 我正试图弄清楚我必须与代币和凭证进行的交互。我很清楚我要做什么:

  • 我可以使用它们来调用标识池,并获得可以用于S3的AWS凭据
  • 如果其他令牌在我完成之前过期,我可以使用刷新令牌刷新它们
  • 这些令牌的过期详细信息在上面的链接中。上述所有内容的文档都非常清楚,但我对身份池凭证功能感到困惑,无法在文档中找到关于以下问题的解释:

  • 当我从我的身份池中获取AWS凭据时,它们将持续多长时间才能过期?如何配置此值,以便我的凭据具有所需的过期期限
  • 如果我的AWS凭据在我完成工作之前过期,那么尝试1的正确逻辑是什么。刷新凭据,然后单击2。如果失败,刷新用户池令牌,以便能够干净地完成操作,而无需用户重新启动它

  • 用户池仅用于用户管理。用户与AWS服务和资源的任何交互都是通过标识池完成的。您可以通过标识池分配角色。 要回答您的两个具体问题:

  • 代币持续1小时。此持续时间是固定的,不能更改
  • 如果您的令牌过期,您可以使用刷新令牌生成新的标识和访问令牌。然而,大多数前端SDK(甚至javascript)都会自动为您执行此操作。您不必担心代币过期。事实上,如果你有这个要求,你将不得不强制使它们无效
    就我所知,在基于浏览器的服务器上使用刷新令牌不是不安全吗application@ArunK是的,这被认为是不好的做法。实现这一点的最佳方法是使用授权码授权,而根本不向前端发送任何令牌。前端的Amplify库也可以处理授权代码授予。感谢您对第1点的回复:1hr是否同时适用于用户池身份验证令牌和id池aws令牌?关于第2点:这个自动刷新是否同时包括用户池身份验证令牌和id池aws令牌?如果我有一个需要1小时以上的多部分上传,会发生什么?是的,auth和id令牌都有1小时的有效性。刷新令牌有更多,您可以控制其持续时间。至于自动刷新,令牌在使用会话对象进行任何调用之前都会被刷新,因此即使使用多部分上载,您也不会遇到任何令牌过期的问题。