Пул пользователей Cognito: Как использовать refreshToken для получения нового accessToken после истечения срока действия accessToken в aws cognito java sdk? - PullRequest
0 голосов
/ 03 февраля 2020

Я использую aws Cognito в scala Play Framework на основе веб-приложения в качестве решения для управления пользователями. Я использую следующий код для входа в систему.

var mIdentityProvider: AWSCognitoIdentityProvider = getAmazonCognitoIdentityClient;

def sessionLogin(userName: String, password: String): AdminInitiateAuthResult = {
val authParams: java.util.Map[String, String] = new java.util.HashMap[String, String]()
    authParams.put("USERNAME", userName)
    authParams.put("PASSWORD", password)
    val authRequest = new AdminInitiateAuthRequest()
      .withAuthFlow(AuthFlowType.ADMIN_NO_SRP_AUTH)
      .withUserPoolId("***")
      .withClientId("***")
      .withAuthParameters(authParams)
    val authResult = mIdentityProvider.adminInitiateAuth(authRequest)
    authResult
}

Приведенный выше код возвращает accessToken, expiresIn, tokenType, refreshToken и idToken с aws сервера Cognito. Согласно документации aws, мы можем использовать refreshToken для получения нового accessToken или idToken, когда истекает accessToken, чтобы продолжить сеанс пользователя. Но в документе не упоминается, как использовать для этой цели refreshToken. Любая помощь в этом отношении была бы полезна. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Рад, что вы нашли ответ на свой вопрос. Чтобы сделать этот ресурс более полезным для других в будущем, вот несколько полезных ссылок:

Документы AWS на токене refre sh

Mobile SDK для iOS и Mobile SDK для Android автоматически обновляют sh ваш ID и токены доступа, если есть действительный (не просроченный) подарок refre sh токен, а также ID и токены доступа иметь минимальный оставшийся срок действия 5 минут. Если срок действия маркера refre sh истек, пользователь вашего приложения должен повторно пройти аутентификацию, выполнив вход снова в свой пул пользователей.

Обратите также внимание, что API Amplify включает logi c чтобы помочь с этим. См. этот Git выпуск и, в частности, этот комментарий , который касается хранения токенов fre sh даже во время длительных операций:

Я выполнил в ситуации, когда срок действия моего токена Cognito JWT истекал при длительной загрузке S3 (ошибка на отметке 1 час). Я не смог найти ничего, что дало бы решение о том, как вы обновите sh токен в середине запроса, поэтому после нескольких часов копания в Amplify lib и AWS SDK я наконец-то нашел решение. Вы должны использовать AWS SDK напрямую (извините, Amplify Storage)

0 голосов
/ 03 февраля 2020

Я понял это сам. Ниже приводится рабочий код

def refreshAccessToken(refreshToken: String): AuthenticationResultType = {
    val authParams: java.util.Map[String, String] = new java.util.HashMap[String, String]()
    authParams.put("REFRESH_TOKEN", refreshToken)
    val authRequest = new AdminInitiateAuthRequest()
      .withAuthFlow(AuthFlowType.REFRESH_TOKEN_AUTH)
      .withUserPoolId("***")
      .withClientId("***")
      .withAuthParameters(authParams)
    val authResult = mIdentityProvider.adminInitiateAuth(authRequest)
    val resultType: AuthenticationResultType = authResult.getAuthenticationResult
    resultType
  }
...