Всем привет.
Возникла задача реализовать аутентификацию пользователей с помощью AWS Cognito User pools.
Этот сервис поддерживает Oauth2\OIDC протоколы для аутентификации, в нашем случае хватит даже implicit flow (пользовательский пароль без редиректов) но я не могу найти существующих плагинов которые бы позволили мне быстро добавить такой функционал. Если что-то уже есть открытое - подскажите что можно использовать “из коробки”.
Если готовых компонентов нету - вопрос по реализации этой фичи вручную.
Нужна реализация, которая бы поддерживала хранение и обновление JWT токенов в пользовательской сессии чтобы можно было их извлекать и использовать для аутентификации в AWS services (у нас ролевой доступ там уже есть).
После изучения документации я так понял что нужно реализовать несколько сервисных классов чтобы встроить их в cuba platform. Но не очень понятно - что правильней реализовать -
- свой LoginProvider и повысить ему приоритет в цепочке через:
@Override
public int getOrder() {
return HIGHEST_PLATFORM_PRECEDENCE + 1;
}
- использовать дефолтный провайдер
LoginPasswordLoginProvider
и реализовать свой собственныйAuthenticationService
, у которого этот провайдер вызоветAuthenticationService.login(Credentials)
, где я проверну всю “магию” с oidc discovery и получу access + id + refresh токены
Какой подход выглядит правильней (опыта разработки в java не очень много, в основном писал в .NET ) ?
Как реализовать хранение токенов в сессии и корректное их обновление когда access token протухает? Какие компоненты в Java\Cuba предпочтительней использовать для таких целей.
Нужно ли создавать отдельный сервис-bean для хранения AWS токенов или пользорвательская сессия шифруется при хранении и доступна только в контексте пользователя ?
Пока идея только реализовать в лоб - MyAWSTokenManager
куда передавать токены пользователя и в случае протухания -возвращать обновленные. Выглядит overdesign, буду благодарен за рекомендации современных и правильных практик.