У меня есть клиентское приложение (разработанное на Java, а не на Android), которое аутентифицирует пользователя с помощью пула пользователей Amazon Cognito. Для ясности: это приложение отображает диалоговое окно ввода имени пользователя/пароля, а затем выполняет аутентификацию с помощью службы пула пользователей Cognito, используя метод SRP; потенциальные проблемы обрабатываются в этом диалоговом окне (идентификатор устройства, пароль должен быть изменен, два фактора и т. д.). В итоге у меня есть ряд токенов, которые позволяют программе использовать сервисы AWS с учетными данными пользователя.
Теперь мне нужно клиентское приложение для связи с пользовательским приложением на стороне сервера. Клиент должен будет подтвердить свою личность серверному приложению, которое затем будет взаимодействовать с другими сервисами AWS. Здесь у меня есть два разных варианта использования:
1) Серверу нужно только знать, кто является пользователем, прошедшим проверку подлинности клиента (безопасным способом, но без олицетворения пользователя).
2) Клиенту необходимо делегировать некоторые или все привилегии пользователя серверу; затем сервер выполнит некоторые действия в сервисах AWS от имени этого пользователя.
Серверное приложение, скорее всего, будет разработано на Java и будет работать на машине EC2. Меня интересует только аутентификация пользователя через источник пула пользователей Cognito (то есть меня не интересуют потоки аутентификации на основе Facebook/Google/OpenID).
Кажется, довольно легко достичь обеих целей очень небезопасными способами: просто заставьте клиентское приложение отправить на сервер все предоставленные ему токены. Но это явно не выход.
Тем не менее, мне трудно понять из документации Cognito User Pool/Cognito Identity Pool/IAM/STS, как этого можно добиться правильно. Я бы ожидал, например, что клиентское приложение сможет генерировать какой-то «токен делегирования», который можно передать на сервер; затем сервер должен иметь возможность проверять этот токен и извлекать из него идентификационную информацию (удовлетворение № 1) или олицетворять личность, соответствующую маркеру, для выполнения вызовов сервисов AWS (удовлетворение № 2). А может я неправильно это мыслю?