【问题标题】:How to refresh the IdToken using refreshToken Value in AWS Cognito?如何在 AWS Cognito 中使用 refreshToken 值刷新 IdToken?
【发布时间】:2017-10-21 19:20:22
【问题描述】:

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

我得到了

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

我使用这个代码如下:

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?

【问题讨论】:

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


    【解决方案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

    【讨论】:

      【解决方案2】:

      工作的 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();
      })
      

      【讨论】:

        【解决方案3】:

        在这个other question 中检查答案,Danny Hoek 发布了一个 Node.js 示例的链接,用于刷新方法,它可能会帮助您实现这一点...

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

        【讨论】:

          【解决方案4】:

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

          能否请您发布更多代码?

          【讨论】:

          • 那么您能否详细说明如何在自动过期(即 1 小时)后更新 IdToken?我应该以编程方式重新登录吗?有什么 tut 或文档可以帮助我吗?
          • 通过 RefreshTokens api 或 InitiateAuth 的 REFRESH_TOKENS(_AUTH) 流刷新令牌是执行此操作的方法。根据 github 示例 (github.com/aws/amazon-cognito-identity-js),尝试 getSession 来执行此操作。
          • 刚刚用代码更新了我的问题,你能检查一下吗?
          • 需要明确的是,即使在调用 getSession 时也会出现上述错误?调用时你看到了什么行为?
          • 调用 getSession 后,'session.getIdToken().getJwtToken()' 应该可以满足您的需求。
          猜你喜欢
          • 2019-09-01
          • 2021-04-15
          • 2020-07-13
          • 2020-05-18
          • 2023-03-16
          • 2017-11-23
          • 2021-10-21
          • 2018-12-01
          • 1970-01-01
          相关资源
          最近更新 更多