Чтобы добиться этого и использовать AWS Cognito, вы можете использовать поток авторизации OAuth 2.0, где вы храните доступ к Cognito и обновляете токены только на бэкэнде. Чтобы поддерживать сеанс через ваш бэкэнд и внешний интерфейс, вы можете использовать другую библиотеку / сервис, который предоставляет вращающиеся токены обновления. Это будет работать следующим образом:
- Пользователь входит в систему cognito, используя ваш веб-сайт / приложение.
- Вы получаете код авторизации от Cognito. Отправьте этот код авторизации на ваш бэкэнд.
- Ваш сервер использует этот код авторизации для получения обновления и токена доступа от Cognito.
- Вы создаете отдельный сеанс (используя токен доступа Cognito и новые отдельные токены обновления - давайте назовем этот токен обновления your-rt). Вы сохраняете RT Cognito против вашего RT в своей БД.
- Вы отправляете токен доступа Cognito и свой rt на ваш веб-интерфейс.
- Ваш интерфейс использует токен доступа Cognito при каждом вызове API - как обычно - и вы проверяете как обычно.
- Когда срок действия этого токена доступа истечет, вы отправите свой rt своему бэкэнду, который затем получит rt AWS из базы данных. Используя rt AWS, вы, как обычно, вызываете конечную точку обновления токена AWS, чтобы получить новый токен доступа AWS.
- Затем вы отправите этот новый токен доступа AWS обратно на ваш интерфейс вместе с НОВЫМИ your-rt - вращающимися токенами обновления !!
Теперь внедрить ротационные токены обновления довольно сложно, так как вам приходится делать вызовы синхронизации внешнего интерфейса API токенов обновления + вы не можете просто аннулировать старый your-rt при создании нового your-rt - что делать, если новый не достигает клиент? (они выйдут из системы!) .. Вот пост в блоге , который хорошо объясняет это, а также предоставляет библиотеку , которая реализует вращающиеся токены обновления! (не с помощью Cognito, но вы можете легко его изменить).
Полный отказ от ответственности: я один из основных авторов этой библиотеки, так как считаю, что она потрясающая! Не стесняйтесь обращаться ко мне на нашем сервере Discord для дальнейшего разъяснения. Я надеюсь, что этот ответ помог вам!