具有授权标头的AWS API调用(session.getIdToken()。getJwtToken())

时间:2018-02-06 05:04:15

标签: javascript amazon-web-services session aws-cognito

我有一个使用AWS-Cognito身份验证使用AWS API网关的WebPage。网页中的大多数按钮都会调用Api并发送或检索数据。这是我在每个按钮下使用的代码单击

getAuthenticateUser().getSession(function(err,session){
     if (err) {
        console.log("Error"+err);
        return;
    }
    if(session.isValid())
    {

    $.ajax({
        url: URL,
        headers:
      {
            'Authorization':session.getIdToken().getJwtToken(),
            'Content-Type':'application/json'

        },
        method: 'GET',
        dataType: 'json',

        success: function(data){

                // Execute Function Need to Execute on Success
        }


        ,
        error: function (xhr, textStatus, errorThrown) {


                console.log(errorThrown);


            }
      });

    }
    if(!session.isValid())
    {
        console.log("Session is not valid..!");
         //Please Login to Continue
    }

    });

这是没有问题的工作正常。但问题是每次都需要一些时间来执行它和每次为每个呼叫提供一个新会话的费用甚至上一个会话都没有过期。我怎样才能在过期时使用新的会话,如果以前的会话未过期,只需检查全局的有效性并获得新的授权标题我只需要..?

因为在我的代码中一旦用户按下一个按钮并发送数据ID相同用户在30秒后按另一个按钮我再次正确地获得新会话..?它确实让我在网站性能上非常糟糕。

任何想法如何解决这个问题......?

这是我的getAuthenticationUser()代码

function getAuthenticateUser()
{

  return userPool.getCurrentUser();
}

这是我在该Javascript页面中的全局变量

    var poolData = {
                    UserPoolId : 'usXXXXXXXXXXOv3jSL',
                    ClientId : 'XXXXXXXXXXka8g'
                 };
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);

1 个答案:

答案 0 :(得分:0)

如果当前会话有效,

getSession()不会创建新会话。

如果当前会话为空或无效,它会尝试刷新会话(使用刷新令牌)以获取使用Authorization标头成功完成HTTP请求所需的ID令牌。否则,它会抛出一个请求进行身份验证的错误。

通过查看CognitoUser类定义,您可以看到getSession()到底做了什么。 (目前在1016行。)