使用AWS Cognito中的refreshToken值刷新IdToken?

时间:2017-05-22 08:04:13

标签: javascript node.js aws-sdk amazon-cognito aws-cognito

我们是否有可能在一小时之前强制过期并使用刷新令牌获得新的IdToken 要么 如何在此amazon-cognito-identity-js-node模块中使用refreshToken值在自动过期时间后获取新的IdToken?

我正在

  

TypeError:refreshToken.getToken不是错误函数。

我使用此代码如下:

cognitoUser.refreshSession(refreshToken, (err, session) => {
                          if (err) {//throw err;
                            console.log('In the err'+err);
                          }
                          else{
                            console.log('session '+session);
                          }
                    }); 

我在函数中传递了refreshToken正确的值。 在函数

上的CognitoUser.js文件中
refreshSession(refreshToken, callback)
{
  const authParameters = {};
  authParameters.REFRESH_TOKEN = refreshToken.getToken(); /* Here I am getting error*/
  ...
  ....
}

如果我用

替换第二行函数refreshSession()
authParameters.REFRESH_TOKEN = this.signInUserSession.getRefreshToken().getToken();

然后错误就消失了。

我尝试使用如下代码:

 var poolData = {
        UserPoolId: 'xx-xxx-x_xxxxx',
        ClientId: 'xxxxx',
        AuthFlow: 'xxxxx'
     };

     userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData);


if(minuteDiff >= 60) { // Defult Id Token Expired
    // Get New IdToken using RefreshToken
    var userData = {
        Username : cognitousername,
        Pool : userPool
    };
    var cognitoUser  = new AWS.CognitoIdentityServiceProvider.CognitoUser(userData);

    var refreshToken = localStorage.getItem('refreshToken'); 

    cognitoUser.getSession(function(err, session) {
        if (err) {                
            res.send(err);
        }
        else{
                /* Session Refresh */
                cognitoUser.refreshSession(refreshToken, (err, session) => {

                    if (err) {//throw err;
                        console.log('In the err'+err);
                    }
                    else{
                        var regsmar_apiKey = session.idToken.jwtToken; // will this provide new IdToken?
                        localStorage.setItem('api_key',regsmar_apiKey);
                    }
                }); 
        }
    });
}

任何人都可以帮助我在那里如何在到期后更新IdToken?

4 个答案:

答案 0 :(得分:1)

我认为refreshSession需要CognitoRefreshToken类的实例,而不仅仅是普通的字符串。 getToken是该类中缺少的方法。你可能想试试这个:

var CognitoRefreshToken = require('amazon-cognito-identity-js').CognitoRefreshToken;
...
var token = new CognitoRefreshToken({ RefreshToken: refreshToken })
cognitoUser.refreshSession(token, (err, session) => { ... }); 

我在这里看到了:https://gist.github.com/kndt84/5be8e86a15468ed1c8fc3699429003ad

答案 1 :(得分:0)

refreshToken可能不是您所期望的那样。例如,如果您尝试在getToken()值上调用undefined,则会产生此错误。

请您发布更多代码吗?

答案 2 :(得分:0)

检查此other question中的答案,Danny Hoek发布了一个指向Node.js示例的链接,用于刷新方法,它可以帮助您实现这一目标......

Sample code: how to refresh session of Cognito User Pools with Node.js and Express

答案 3 :(得分:0)

有效的javascript模块

var refreshToken = localStorage.getItem("refreshToken");
var token = new AmazonCognitoIdentity.CognitoRefreshToken({ RefreshToken: refreshToken })
cognitoUser.refreshSession(token, function (err, session) {
    console.log(err, session);
    var idToken = session.getIdToken().getJwtToken();
})