Как изменить время истечения срока действия токенов доступа и идентификации для пулов пользователей AWS Cognito

Я не могу найти документацию, в которой объяснялось бы, можно ли и как изменить время истечения срока действия токенов доступа и удостоверений для пулов пользователей AWS Cognito.

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

Есть ли способ изменить срок годности?


person Luca    schedule 10.03.2017    source источник
comment
есть способ настроить Срок действия с помощью CloudFormation, вот ответ (он все еще находится внизу этой страницы): stackoverflow.com/a/64242923/1115187   -  person maxkoryukov    schedule 09.10.2020


Ответы (6)


В настоящее время это невозможно настроить для вашего пользовательского пула. Они установлены на один час для всех.

Изменить: см. Комментарий Майка, он был недавно добавлен.

person Jeff Bailey    schedule 10.03.2017
comment
Спустя полтора года интересно, изменилось ли что-нибудь в отношении истечения срока действия токенов ID и ACCESS? Кажется, я не могу найти никаких изменений в документации, но решил, что спрошу здесь и продолжу. - person Dan; 26.11.2018
comment
Да, это функция, которую я хотел бы ТЕСТИРОВАТЬ. В настоящее время сложно протестировать сценарии выхода из системы / истечения срока действия токена. - person Dave; 29.11.2018
comment
если у меня есть токен обновления, как мне получить токен, если срок действия моего токена истекает через 1 час? - person Ali Akram; 10.04.2019
comment
@AliAkram по состоянию на 10/3/2019, через 1 час срок действия вашего токена доступа истекает, и вам необходимо использовать обновить токен, чтобы выдать обновленный токен доступа. Но будьте осторожны, как вы храните токен обновления ... - person ecoe; 03.10.2019
comment
У @Jeff Bailey команда Cognito рассмотрела приложения SPA, для которых токены обновления не могут быть надежно сохранены в браузере, а срок действия токена доступа в течение 1 часа обычно неудобен для пользователя? Многие разработчики SPA были бы чрезвычайно признательны за надежную аутентификацию пользователей в течение более часа. - person ecoe; 03.10.2019
comment
@ecoe Просто любопытно, почему мы не можем безопасно хранить токены обновления в SPA? - person trusktr; 02.06.2020
comment
@trusktr См. документацию для получения токенов доступа и обновлений. Access tokens must be kept confidential in transit and in storage. The only parties that should ever see the access token are the application itself, the authorization server, and resource server. - person ecoe; 02.06.2020
comment
ОБНОВЛЕНИЕ 2020/08: теперь вы можете редактировать время жизни токенов доступа, идентификатора и обновления для пулов пользователей когнитивных пользователей. aws.amazon.com/about-aws/whats-new/2020/08/ - person Mike Fogel; 18.08.2020
comment
@MikeFogel, это отличные новости, но ссылка не говорит вам, как это сделать - person Wayneio; 26.01.2021

По состоянию на 12 августа 2020 г. AWS объявила, что пулы пользователей теперь поддерживают настройку срока действия токенов. Вот шаги, которые нужно выполнить:

  1. Откройте консоль AWS Cognito.
  2. Go to General Settings.
  3. Прокрутите вниз до App clients и нажмите "Изменить".
  4. Нажмите кнопку Show Details, чтобы просмотреть параметры настройки, как показано ниже:  Экран настройки срока действия токена

Срок действия токена доступа должен составлять от 5 минут до 1 дня. Не может быть больше, чем срок действия токена обновления.

Для получения дополнительных сведений об AWSognito перейдите по этой ссылке..

person Haziq    schedule 22.08.2020
comment
наконец! команде когнито потребовалось достаточно времени - все еще существует огромная проблема, связанная с тем, что Cognito по-прежнему не позволяет аннулировать все токены при вызове API - person steviesh; 13.11.2020
comment
И с 30 декабря это больше не доступно. (Этот ответ был правильным на момент публикации, и я его использовал.) - person chrylis -cautiouslyoptimistic-; 31.12.2020
comment
Спасибо, не нашел :) - person Al Hill; 21.01.2021
comment
@ chrylis-cautiouslyoptimistic- Хотя я все еще могу использовать эту опцию, есть ли у вас ссылка на утверждение, что эта опция больше не доступна? - person Haziq; 25.01.2021
comment
@MHaziq Он исчез с моей консоли. - person chrylis -cautiouslyoptimistic-; 25.01.2021

Я предполагаю, что вопрос в том, как получить детальный контроль над завершением сеанса Cognito. Есть способ сделать это. Но сначала давайте вспомним, как работает управление сеансами Cognito:

  1. Срок действия токенов аутентификации истекает через час.
  2. Новый токен аутентификации может быть запрошен после выдачи токена обновления.
  3. По истечении от 1 до 30 дней Cognito не будет выдавать токен обновления - количество дней настраивается для каждого приложения в настройках клиента приложения.

Итак, что вы можете сделать, чтобы лучше контролировать продолжительность сеанса Cognito? Ответ состоит в том, чтобы вставить фильтр в ваш стек HTTP-запросов, который оценивает запрос - если пользователь должен выйти из системы по какой-либо причине, выполните перенаправление 302 на конечную точку выхода Cognito (и очистите файлы cookie сеанса также).

Это то, что мы делаем в Kubernetes с Envoy (с использованием прокси), а также Spring. Это также позволяет вам подключать логику, которая немедленно отменяет доступ к пользователю до истечения его 1-часового токена доступа.

См. https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html

person Rori Stumpf    schedule 29.09.2019
comment
Мой вариант использования таков, что мы настроили пул пользователей Cognito для федеративной аутентификации с поставщиком SAML моей компании, а вход в систему происходит через систему единого входа. Теперь, когда пользователь меняет свое членство в группе в решении для управления пользователями компании, как мы можем гарантировать, что это повлияет на способность пользователя использовать веб-приложение, поскольку токены Cognito не обновляются из решения для управления пользователями компании. Мы рассматриваем возможность использования кнопки выхода для этого. Однако мы также хотим, чтобы текущий сеанс Cognito был вечным, как мы можем этого добиться? - person Kumar Mrinal; 01.10.2019
comment
Группы встроены в токен. Итак, чтобы получить обновленную группу, вам нужно получить новый токен. Вы должны иметь возможность перенаправить своего пользователя в поток входа в систему, и это должно обновить его для вас. Я попробовал это, и у меня это сработало. - person Rori Stumpf; 02.10.2019
comment
Кроме того, сеанс Cognito не вечен. Количество дней можно установить в настройках клиента приложения. Если вы хотите контролировать истечение срока сеанса больше, реализуйте выход из системы и перенаправьте пользователя на выход, когда сеанс необходимо прервать. Для этого я использую http-фильтр. Точный механизм будет зависеть от используемого стека. - person Rori Stumpf; 02.10.2019
comment
Да, токен Cognito содержит группы. И вы правы, что для получения обновленной группы нам нужен новый токен. Вопрос в том, как приложение узнает, что доступны новые группы и, следовательно, клиенты должны быть перенаправлены в поток входа в систему? По умолчанию idToken и accessToken действительны в течение часа, а refreshToken действительны в течение 30 дней. По истечении срока действия idToken, refreshToken просто обновляет токен без фактического получения нового idToken, который будет содержать новые группы. - person Kumar Mrinal; 02.10.2019
comment
Что, если вы просто хотите проверить, работает ли ваше обновление аутентификации, не дожидаясь часа? - person trusktr; 02.06.2020

Уточнение: этот ответ касается токена доступа (не токена обновления)

Вы можете настроить срок действия токена в консоли когнито General Settings / App Clients / {your app} / Show Details / Refresh token expiration (days)

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

По умолчанию токен обновления истекает через 30 дней после того, как пользователь вашего приложения входит в пул пользователей. Когда вы создаете приложение для своего пользовательского пула, вы можете установить срок действия токена обновления приложения (в днях) на любое значение от 1 до 3650.

Похоже, что на данный момент для веб-клиента нет варианта на что-то менее суток (довольно странно).

Если вы используете Mobile SDK, тогда

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

Mobile SDK для Android предлагает возможность изменить минимальный срок действия идентификатора и токенов доступа на значение от 0 до 30 минут. См. Метод setRefreshThreshold () CognitoIdentityProviderClientConfig в Справочнике по AWS Mobile SDK для Android API.

person Neil    schedule 15.03.2019
comment
Вопрос в токене доступа, а не в токене обновления. - person Abhishek Balani; 25.03.2019
comment
@Neil, рассматривая функцию порога обновления, кажется, что на самом деле это фактор смягчения для истечения срока действия токена, а не сам срок жизни. Глядя на CognitoIdentityProviderClientConfig.java, вы видите, что это значение должно быть между мин. (0 мс) и макс. (1800 000 мс или 30 мин) по умолчанию (300 000 мс или 5 мин). Я заметил, что токены id не начинают отклоняться в SDK (или в серверных API) до тех пор, пока не пройдет 5 минут, что может быть тем, для чего установлен порог. Но, похоже, это не имеет отношения к этому обсуждению, если вы не ищите от 60 до 90 минут. - person TahoeWolverine; 03.12.2019

Если вы используете шаблон CloudFormation, добавьте следующий атрибут и укажите в днях (хотя официальные документы говорят, что по умолчанию это часы), как долго токен доступа должен быть действителен. Вот пример, где токен доступа действителен в течение 24 дней.

UserPoolClient:
    Type: "AWS::Cognito::UserPoolClient"
    Properties:
        ClientName: myuserpoolclient
        GenerateSecret: true
        UserPoolId: !Ref YourUserPool
        AccessTokenValidity: 24

Документация:

person Ihor Shylo    schedule 07.10.2020

Cognito использует спецификацию OAuth 2.0. Чтобы обновить токен с истекшим сроком действия, вам нужно будет использовать значение Refresh Token, чтобы получить новый Id Token.

  1. Чтобы пройти аутентификацию при запуске, идентификатор пользователя и пароль собираются у пользователя и отправляются в Cognito.
  2. Вы получаете обратно два жетона. Один вы используете для «доступа» к API, а другой - для «обновления» по истечении срока доступа.
  3. Вам не нужно снова просить пользователя ввести идентификатор пользователя и пароль; вам просто нужно использовать токен «обновления».
  4. Вам не нужно хранить открытый текст пароля (что может создать угрозу безопасности), потому что токен «обновления» даст вам новый токен доступа.

Это действительно очень просто. Дополнительная информация в Документация Cognito по обновлению токенов

person Guillermo Garcia    schedule 03.01.2019
comment
но для приложений SPA, у которых нет альтернативы, кроме хранения токена обновления в браузере из-за ограничений Cognito это не так просто. - person ecoe; 03.10.2019
comment
В таком случае я могу порекомендовать вам сочетание Cognito + APIGateway. docs.aws.amazon.com/apigateway/ latest / developerguide / Затем вы можете взаимодействовать с Cognito User Pools Auth API docs.aI cws.amazon.com /cognito/latest/developerguide/token-endpoint.html - person Guillermo Garcia; 11.12.2019
comment
Я считаю, что токены обновления должны храниться надежно (например, в идеале на частном сервере, в зашифрованной базе данных), но приложения SPA обычно имеют ограниченную инфраструктуру, и поскольку токены истекают через 1 час, невозможно избежать хранения токенов обновления Cognito в браузере клиента, что небезопасно. - person ecoe; 11.12.2019