Не удается обновить сеанс Cognito - PullRequest
0 голосов
/ 25 октября 2018

В настоящее время я пытаюсь обновить сеанс пользователя Cognito.В интернете есть много примеров, но то, как я смотрю на Cognito, немного отличается.

Я не авторизуюсь через имя пользователя и пароль ... Я авторизируюсь с помощью accessToken, idToken и refreshToken.

Позвольте мне показать вам, как я это делаю:

return new Promise(async (resolve, reject) => {
        const sessionData = {
            IdToken: new CognitoIdToken({IdToken: tokens.idToken}),
            AccessToken: new CognitoAccessToken({AccessToken: tokens.accessToken}),
            RefreshToken: new CognitoRefreshToken({RefreshToken: tokens.refreshToken})
        };
        const userSession = new CognitoUserSession(sessionData);

        const userData = {
            Username: tokens.username,
            Pool: this.userPool
        };

        this.cognitoUser = new CognitoUser(userData);
        this.cognitoUser.setSignInUserSession(userSession);

        // set the new tokens in the store
        const key = `CognitoIdentityServiceProvider.${SETTINGS[stage].ClientId}.${tokens.username}`;
        if(tokens.deviceKey) {
            localStorage.setItem(`${key}.deviceKey`, tokens.deviceKey);
        }

        if(tokens.deviceGroupKey) {
            localStorage.setItem(`${key}.deviceGroupKey`, tokens.deviceGroupKey);
        }

        this.cognitoUser!.getSession((error: Error, session: CognitoUserSession) => {
            if (session.isValid()) {
                resolve();
            } else {
                reject();
            }
        });
    });

Это работает без проблем.Но через 30 минут мне нужно обновить токены, потому что они истекли.

Я делаю это с помощью этого кода:

cognitoUser.refreshSession(cognitoUser.getSignInUserSession().getRefreshToken(), (error) => {
                    if(error) {
                        console.error(error);
                    } else {
                        console.info('Refresh logged in session.');
                    }
                });

Но этот вызов выдает мне ошибку, что токен обновленияневерен.

POST https://cognito-idp.eu-central-1.amazonaws.com/ 400
{code: "NotAuthorizedException", name: "NotAuthorizedException", message: "Invalid Refresh Token"}

Тело звонка выше

{
 "ClientId": "4gql86evdegfa...",
 "AuthFlow": "REFRESH_TOKEN_AUTH",
 "AuthParameters": {
    "REFRESH_TOKEN": "eyJjdHkiOiJKV1QiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAifQ.CPZ8hXIXdka7veUdmNY15Zy_FNJ-5SNgTeKmSoBAVNlz_ilcmvBAvluLO3EeUTqOvG-gLSjwzh6TNlz2p18fWjWEfROjr8qby0V3DB_pzO2_cdMXowIhEmKiZ460kJAQBPDQ9EOBs2oJokX-fBVtL0OVIEQYp7NudyARILH3Phrx1BQz3ASLRwX44mlUOa_BkjBQwPkbgqsX7yU2ekJwL5RPllkPql0DitbLEOwZhoTCsnnLJda-rN-uN-0Vf6Q6ZcdZP2QTA6TLhS_Srio7uETtS3YYsZ8-oGIDIPEs4LjtTZQVOJVyBOCRl6...",
    "DEVICE_KEY": "eu-central-1_b428daea-9cb4-443d-bbb8-466d8642e4a1"
 }
}

У кого-нибудь есть идея, как мне решить эту проблему?

Спасибо за ваше время!

1 Ответ

0 голосов
/ 29 октября 2018

Можете ли вы попробовать с нижеуказанным кодом:

ссылка: https://gist.github.com/kndt84/5be8e86a15468ed1c8fc3699429003ad

cognitoUser = getCognitoUser(req);
    cognitoUser.refreshSession(RefreshToken, (err, session) => {
      if (err) throw err;
     //get token code
    });

getCognitoUser = function(req) {
  const poolData = { 
    UserPoolId : COGNITO_USER_POOL_ID,
    ClientId : COGNITO_CLIENT_ID
  };
  const userPool = new CognitoUserPool(poolData);
  const userData = {
    Username : req.user.email, 
    Pool : userPool
  };
  return new CognitoUser(userData);
};
...