AWS Cognito — Администратор Сбрасывает Пароль Пользователя БЕЗ Отправки электронной почты

#amazon-web-services #amazon-cognito

Вопрос:

Мне нужно сбросить пароли некоторых пользователей, но не отправлять электронные письма с забытым паролем. Просто сбросьте пароль, чтобы при следующем входе в систему я мог отобразить сообщение о том, что им необходимо запросить сброс пароля. Детализация самой основной вещи, которая мне нужна: не сообщая пользователю, мне нужно ввести их в RESET_REQUIRED статус, чтобы доступ пользователя к интерфейсу возвращал a PasswordResetRequiredException .

Я изначально думал AdminSetUserPassword , что это сработает, но это приводит пользователя в состояние, когда ему нужно сменить пароль через какой-то пользовательский интерфейс, который я не настроил. Я не уверен, есть ли там дополнительный шаг, который я могу предпринять-установить пароль, AdminSetUserPassword а затем, возможно, предпринять какие-то другие шаги?

В противном случае, я перепробовал кучу разных вещей AdminResetUserPassword .

  • Попытался удалить любое пользовательское сообщение из моей лямбды, которое запускается на CustomMessage_ForgotPassword триггере, но это просто приводит к отправке общего сообщения с кодом.
  • Попытался изменить email_verified атрибут для пользователя на false (поскольку в документах AWS указано, что он отправит электронное письмо для сброса пароля, если у них есть подтвержденное электронное письмо), но это приводит к тому, что сам сброс пароля вызывает ошибку.
  • Попытался изменить адрес электронной почты пользователя на временный (поддельный), чтобы туда отправлялось электронное письмо, но пользователь получает электронное письмо, когда его адрес электронной почты изменен.

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

Ответ №1:

Я разбирался с этим сегодня и подумал, что дам вам знать, чем я в итоге занялся.

Есть два способа, и только два способа, чтобы ввести пользователя в RESET_REQUIRED статус:

  1. Воспользуйся AdminResetUserPassword
  2. Импортируйте пользователя с помощью задания импорта Cognito (как видно на этой блок-схеме).

Как вы определили, вариант 1 отправит код по электронной почте или SMS, и нет, вы не можете легко предотвратить это. Я открыл службу поддержки в службе поддержки AWS, чтобы спросить об этом, и они тоже ничего не смогли придумать. В конце концов, я подумал об использовании пользовательских триггеров отправителя, чтобы в этом триггере я мог решить, отправлять ли электронное письмо/SMS или нет, но с настройкой внешнего отправителя электронной почты/SMS возникла такая проблема, что я решил не беспокоиться об этом.

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

  1. Прочитайте атрибуты пользователя, параметры MFA и т. Д. С помощью AdminGetUser
  2. Храните эти данные в надежном месте
  3. Удалите пользователя из пула Cognito с помощью AdminDeleteUser
  4. Импортируйте пользователя, создав и запустив задание импорта Cognito

Это приведет к тому, что ваш пользователь перейдет в RESET_REQUIRED состояние, но есть и недостатки:

  • Пользователь sub изменится
  • Запоминаемые устройства пользователя исчезнут
  • История входа пользователя в систему исчезнет
  • Программные устройства MFA пользователя исчезнут

Так что это довольно дерьмовое решение, но это то, что Cognito дал нам для работы.