Как проверить, истек ли срок действия маркера доступа cognito?

#c #amazon-web-services #amazon-cognito

Вопрос:

Токен доступа действителен в течение 1 часа. Я знаю, как использовать токен обновления для обновления токена доступа. Однако я не знаю, как проверить, истек ли срок действия токена доступа cognito.

Шаблон 1: Измерьте время с момента аутентификации токена с помощью потока таймера.
-> Пустая трата ресурсов процессора…

Шаблон 2: Запишите время аутентификации и сравните текущее время.

Шаблон 3: Проверьте использование пакета SDK AWS.
-> Как использовать?

Шаблон 4: другой путь.

Каков наилучший способ?

 if ({ m_access_token is expired? })
{
    Aws::CognitoIdentityProvider::Model::InitiateAuthRequest request;
    request.SetAuthFlow(Aws::CognitoIdentityProvider::Model::AuthFlowType::REFRESH_TOKEN_AUTH);
    request.SetClientId(m_client_id);
    request.AddAuthParameters("USERNAME", m_user_name);
    request.AddAuthParameters("REFRESH_TOKEN", m_refresh_token);
    auto outcome = m_cognito_identity_provider_client->InitiateAuth(request);
    if (outcome.IsSuccess())
    {
        m_access_token = outcome.GetResult().GetAuthenticationResult().GetAccessToken();
    }
}
 
  • AWS SDK для C
  • Visual Studio 2017

Комментарии:

1. Разве SDK автоматически не обновляет токены для вас?

2. Нет, это не освежает. Я решил сохранить токен доступа в переменной-участнике, чтобы он не обновлялся автоматически. Я посмотрел исходный код по этой ссылке. gist.github.com/manishpin/f7d8e9af84068bd9b0220bb2c7d14a4d Я получаю токен доступа с помощью «challenge_request.GetResult(). getauthentiencationresult(). getAccessToken()».

3. Лучший подход-не беспокоиться, когда истечет срок действия токена доступа. Просто попробуйте метод try catch, в котором, если вы получите ошибку с истекшим сроком действия, вызовите api токена обновления, получите новый токен доступа и сохраните его.

4. Это хорошая идея. Я попробую использовать try-catch.

Ответ №1:

Я выбираю повторную попытку с помощью try-catch.

Потому что, если я использую метку времени, я должен использовать повторную попытку для обеспечения безопасности в конце концов.

Спасибо.