Пользователь aws cognito получает идентификатор идентификатора Android

Я пытаюсь получить текущий токен идентификатора пользователя, вошедшего в систему, для aws cognito в android.

Я нашел этот пример: session.getIdToken().getJWTToken(), где сеанс является объектом CognitoUserSession.

Кажется, я не могу найти способ получить текущую сессию cognitousersession после того, как был сделан вход в систему.

Я использую действие аутентификатора по умолчанию из руководства по примечаниям: https://docs.aws.amazon.com/aws-mobile/latest/developerguide/tutorial-android-aws-mobile-notes-auth.html

В нем говорится, что токены хранятся в общих настройках, но я не могу понять, как получить их в будущих действиях, чтобы я мог совершать вызовы на шлюз API, используя токен id.


person Jason Metroick    schedule 28.02.2018    source источник


Ответы (2)


AWS Android SDK вернет токен JWT без сетевого вызова, если срок действия токена не истек или не истечет.

Порог, когда токен должен быть обновлен, может быть установлен с помощью метода CognitoIdentityProviderClientConfig.setRefreshThreshold(long).

Если вам все еще интересно, как получить токен самостоятельно, код можно найти в методе readCachedTokens() https://github.com/aws/aws-sdk-android/blob/master/aws-android-sdk-cognitoidentityprovider/src/main/java/com/amazonaws/mobileconnectors/cognitoidentityprovider/CognitoUser.java#L2116

person donkon    schedule 01.03.2018
comment
Спасибо, donkon, эта ссылка была именно тем, что мне было нужно. - person Jason Metroick; 02.03.2018

Поскольку никто еще не ответил, это может вам помочь, помните, что это код JS:

Это моя процедура для получения сеанса от уже вошедшего в систему пользователя. после этого я могу получить доступ к токенам.

  var user_data = {
    UserPoolId: AWSConfiguration.UserPoolId,
    ClientId: AWSConfiguration.ClientAppId
  };

  var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(user_data);

  if (userPool.getCurrentUser() != null) {
    userPool.getCurrentUser().getSession(function (err, session) {
      if (err) {
        window.location.href = "login.html";
      }
      var user_params = {
        IdentityPoolId: AWSConfiguration.IdPoolId,
        Logins: {
          'cognito-idp.eu-central-1.amazonaws.com/eu-central-1_XXX':session.idToken.jwtToken
        }
      };
      AWS.config.credentials = new AWS.CognitoIdentityCredentials(user_params);
      AWS.config.region = AWSConfiguration.region;

      AWS.config.credentials.refresh((error) => {
        if (error) {
          console.error(error);
        } 
        else {
          user_is_authenticated();
        }
      });
    });
  }
person David    schedule 28.02.2018
comment
CurrentUser.getSession для android sdk выполняет сетевой вызов для получения токенов, чего я пытаюсь избежать. Мне нужен способ получить сохраненные токены из общих настроек. - person Jason Metroick; 28.02.2018