Я только что реализовал нечто очень похожее на этой неделе. Cognito действительно не поддерживает это, нет. Но если вы уже привержены Cognito, вы можете обмануть его, если вы получаете доступ к Cognito с внутреннего сервера. По сути, вы создаете пользовательский поток аутентификации.
Если аккаунт еще не существует:
Запустите AdminCreateAccount. Укажите временный пароль.
Запустите AdminInitiateAuth. Войдите с временным паролем. Установите новый пароль.
У вас есть токены пользователя (т. Е. Вы вошли в систему как они)
Если учетная запись уже существует:
Создать Пользовательский поток аутентификации . Вам в основном нужно три отдельных лямбды. Каждая лямбда вызывается соответствующими триггерами Cognito (DefineAuthChallenge, CreateAuthChallenge, VerifyAuthChallenge). Технически вы можете обойтись только первым, если будете просто выбирать токены возврата при каждом вызове DefineAuthChallenge).
Вызовите AdminInitiateAuth и укажите пользовательский поток аутентификации. Вы можете делать более или менее все, что вам нравится здесь, например, просто аутентифицировать любого, кто является администратором любой другой учетной записи. Вы возвращаете токены целевого пользователя, возможно, вы создаете сеанс на сервере или возвращаете их своему веб-интерфейсу, это зависит от вашего приложения.
Это довольно сокращенная версия, которую я знаю. Как я говорю, возможно, но неприятно.
Мой вариант использования на самом деле создавал «Волшебные ссылки», которые при использовании создают и аутентифицируют пользователя, а также переносят его на определенную страницу. Это неоценимо при устранении трения потока аутентификации (например, в маркетинговых электронных письмах), но не поддерживается Cognito Flows. Я использовал вышеупомянутую технику, чтобы обойти это.