Как проверить действительность учетных данных Amazon Cognito на стороне сервера (java)

Сейчас я занимаюсь разработкой приложения для iOS. Это приложение использует Amazon Cognito для аутентификации идентификатора и учетных данных каждого пользователя.

С другой стороны, это приложение использует мой исходный сервер WebAPI. Я хочу проверить действительность пользователя на сервере с помощью идентификатора Cognito и / или учетных данных.

Какой API AWS следует использовать для этой проверки на сервере (код Java)?


person Hideo Terada    schedule 25.08.2015    source источник


Ответы (2)


Информация в единственном другом ответе кажется немного неверной, поэтому я хотел немного обновить ее.

Упомянутый метод API Gateway великолепен и работает, но он по-прежнему выполняет то же самое, что вы можете делать вручную. С API Gateway он выполняет проверки подписи, но по-прежнему использует переданный токен, проверяет утверждения, как описано ниже, а затем просто нормализует его в объект контекста для использования.

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

Комментарий в другом ответе правильно указывает ссылку с этой информацией: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html

С помощью Javascript можно проверить токен следующим образом:

https://gist.github.com/bradennapier/c996672944ebf511410eb45c0395f525

Обратите внимание, что это первый проход во время обнаружения функции, которая была сделана и не представляет собой готовое к работе решение. Используйте только в качестве справки.

AWS также предлагает несколько примеров для javascript и python: https://github.com/awslabs/aws-support-tools/tree/master/Cognito/decode-verify-jwt - при просмотре этого примера я заметил, что он не будет правильно проверяться при задании токен access и будет работать только с id токенами.

person Braden Rockwell Napier    schedule 14.05.2019
comment
Мне нравится этот ответ. Просто краткое пояснение по вопросу и другой ответ :): Вопрос касался именно отправки Cognito IdentityId, а не JWT. IdentityId не подписан и не поддается проверке, по сути, это то, что должно быть во вложенном утверждении в JWT. - person Scott Willeke; 15.04.2021

Отправка идентификатора IdentityId, выданного Amazon Cognito, с устройства на серверную часть небезопасна, поскольку IdentityId может быть подделан. Лучший способ надежно подтвердить, что запросы API выполняются аутентифицированным пользователем - это использовать Amazon API Gateway. Вы можете использовать Amazon AWS API Gateway для прокси-сервера существующей серверной части (или использовать API Gateway + Lambda для замены серверной части), а API Gateway может опционально и автоматически аутентифицировать запросы с помощью Процесс подписания AWS Signature Version 4.

person Scott Willeke    schedule 25.08.2015
comment
Большое Вам спасибо. Я до сих пор не знал Amazon API Gateway. Я пытаюсь это проверить. - person Hideo Terada; 04.09.2015
comment
а ??? Итак, отправка токена в APIG не может быть подделана? Вы можете отправить токен куда угодно. Фактически, есть документация от aws для проверки токенов на бэкэнде docs.aws.amazon.com/cognito/latest/developerguide/ Существует также способ выполнить всю логику аутентификации на бэкэнде, используя этот docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ < / а> - person Andy; 01.08.2018
comment
API Gateway может автоматически авторизовать запросы, подписанные с помощью AWS v4 Signing (тот же метод используется для авторизации других запросов AWS). При использовании AWS Mobile SDK эти запросы также включают идентификацию пользователя, как описано в stackoverflow.com/questions/32945385/. По крайней мере, так было раньше и, я полагаю, до сих пор. Вы можете видеть, что этот вопрос и ответ существовали некоторое время назад, поэтому он не принимает во внимание такие вещи, как пользовательские пулы Cognito, но я предполагаю, что они по-прежнему работают аналогичным образом. - person Scott Willeke; 07.08.2018