刷新 AWS.config.credentials

Refresh of AWS.config.credentials

我正在尝试找到一种正确的方法来刷新我从 Cognito 获得的 AWS.config.credentials。我正在使用开发人员授权身份,并且工作正常。我获得了凭据,如果我执行 refresh(),AWS.config.credentials.expireTime 也会按预期更新。

凭据在一小时后过期,所以我想我可以使用 setTimeout 来刷新凭据并根据 credentials.expireTime(我计算的是毫秒数)进行配置。

但是,我似乎必须更频繁地执行刷新。凭证会在它们的时间之前超时。如果我将延迟减少到更小的数量,setTimeout 方法就可以正常工作,但我不想过度刷新。

这是真的吗?如果是的话,我需要多久做一次?每 5 分钟左右刷新一次似乎过分了:/

循环刷新

function refreshAwsCredentials() {
  clearTimeout(awsRenewalTimeout);

  // perform credentials renewal
  AwsService.refreshAwsCredentials()
    .then( function () {
      awsRenewalTimeout = setInterval(
        function () {
          refreshAwsCredentials();
        }, AWS.config.credentials.expireTime.getTime() - new Date().getTime() - 300000
      );
    })
    .catch( function (error) {
      // checks error, normally it basically logs in, then refreshes
    });
}

AwsService.refreshAwsCredentials()

if ( AWS.config.credentials.needsRefresh() ) {
  AWS.config.credentials.refresh( function (error) {
    if (error) {
      // rejects promise with error message
    }
    else {
      // resolves promise
    }
  });
}

我终于发现我检查的身份验证错误太具体了。我检查了是否已登录,而不是凭据已超时。现在,我会在失败时尝试登录,并且在需要时解决了凭据超时问题。