Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to refresh the IdToken using refreshToken Value in AWS Cognito?

Is it possible we can force expire before one hour and get new IdToken using the refresh token OR How to get new IdToken after auto expire time using refreshToken value in this amazon-cognito-identity-js-node module?

I am getting

TypeError: refreshToken.getToken is not a function as error.

I am using this code as follows:

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

I am passing refreshToken correct value in the function. In the file CognitoUser.js on function

refreshSession(refreshToken, callback)
{
  const authParameters = {};
  authParameters.REFRESH_TOKEN = refreshToken.getToken(); /* Here I am getting error*/
  ...
  ....
}

In case if I replace second line of function refreshSession() with the

authParameters.REFRESH_TOKEN = this.signInUserSession.getRefreshToken().getToken();

then error went off.

I have tried to use the code as follows:

 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);
                    }
                }); 
        }
    });
}

Can any one please help me out there how should I update IdToken after expire?

like image 478
Deep Kakkar Avatar asked Sep 14 '25 00:09

Deep Kakkar


1 Answers

I think refreshSession expects an instance of the CognitoRefreshToken class, not just a plain string. The getToken is a method from that class that's missing in your case. You may want to try this:

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

I saw it here: https://gist.github.com/kndt84/5be8e86a15468ed1c8fc3699429003ad

like image 54
Georgii Oleinikov Avatar answered Sep 15 '25 14:09

Georgii Oleinikov