Как обезопасить AWS REST back end для мобильного доступа - PullRequest
0 голосов
/ 20 января 2020

Я читал много документов AWS Amplify и Cognito, но, похоже, для этого не описан прямой подход.

Что у меня есть:

У меня есть приложение iOS, написанное на Swift, и задняя часть настроена в нескольких лямбда-функциях. Я могу получить доступ к конечным точкам REST обычным способом (как и любой URL-адрес публикации c).

В результате у меня нет кода Amplify или AWS SDK, встроенного в мой код iOS.

Что я хочу?

1) Включить управление пользователями: разрешить пользователям регистрироваться / входить (это уже есть в моем бэк-энде, но я открыт использовать Cognito)

2) Защищать мой бэкэнд API, чтобы только авторизованные пользователи могли получить к нему доступ через мобильное приложение. (я могу использовать его из Postman для моих собственных целей разработки)

Что я знаю:

Я знаю, что существует механизм OAuth 2 (PKCE) для безопасного доступа API с мобильного телефона, не требуя секрета клиента, но AWS не дает понять, какие инструменты использовать для достижения этой цели.

Я не против использовать Cognito (если все хорошо) или мои собственные внутренние лямбды для управления пользователями. Единственное, что решение должно обеспечивать защиту моих REST API.

Препятствия:

Похоже, что их документация настолько фрагментирована, что

  • REST вообще не обсуждается. GraphQL есть, и они показывают хороший способ сделать все изнутри кода Swift с использованием моделей GraphQL, но для моих целей это является излишним. Я хотел бы получить к нему доступ, как и к любой другой конечной точке REST в мире, но безопасным способом, ограниченным для моего мобильного приложения.

  • Нет четкого различия между AWS SDK против Amplify SDK (я получил несколько подсказок от Google, что Amplify находится на более высоком уровне и абстрагируется от множества вариантов, но ничего конкретного)

  • Документация по AWS очень концептуальна, но не содержит примеров того, как справиться с этим конкретным случаем использования.

  • Я посмотрел несколько замечательных Youtube видео также, но они не относятся к этому стеку платформы.

PS: Пожалуйста, не нужно больше готовых ссылок на документы. Я уже прошел через многие из них, и, если ни один из них не подходит непосредственно к моим вопросам выше, я боюсь, что они не помогут.

ОБНОВЛЕНИЕ

Я нашел некоторые хорошие примеры того, как Cognito обрабатывает токен + управление пользователями в мобильном приложении. Тем не менее, в этих примерах все еще кажется, что регистрация происходит без токена. Предоставление информации об идентификаторе пула и c в комплекте приложений и при условии, что любой желающий может зарегистрироваться с помощью SDK, можно легко получить токен. Даже с помощью специальных лямбда-авторизаторов, использующих интеллектуальный синтаксический анализатор / фиддлер строк, конечные точки могут быть открыты изнутри пакета приложения, и очень вероятно неправильное использование API.

Эти примеры, вероятно, не используют PKCE (я предполагаю, что они используют SRP ). Или я пропускаю важный шаг.

Допустим, я использую AppAuth для получения токена от конечных точек Cognito. Оправдывает ли это, если я хочу аутентифицировать пользователя, используя идентификатор пользователя / пароль Cognito?

У меня также есть путаница в отношении URI перенаправления. Обязательно ли перенаправление в мобильном приложении для получения токена (даже если я не использую какую-либо публичную c аутентификацию, такую ​​как Google / Facebook)?

Ответы [ 2 ]

1 голос
/ 21 января 2020

Я всегда выбираю направление, основанное на стандартах, а не AWS, специфицирующее c, так как ваша цель - создавать отличные интерфейсы и API с лучшими вариантами будущего.

Мой учебник ниже ссылки на блоге не охватывают Amplify, но я думаю, что они будут актуальны для вас. С этой технологией может быть довольно много обучения.

  • Вот мой код для проверки токенов Cognito в API.

  • У меня работают демонстрационные веб-и мобильные пользовательские интерфейсы, использующие токены Cognito для вызова размещенной в облаке версии API - вы можете быстро запустить пользовательские интерфейсы с этой страницы .

На индексной странице блога есть несколько пошаговых руководств, таких как объяснение API без сервера и его запуск на вашем P C, хотя некоторые посты длинные и подробные.

Если вы сочтете это полезным, не стесняйтесь задавать любые последующие вопросы.

1 голос
/ 21 января 2020

-> Аутентифицируйтесь с помощью Cognito для получения токенов Cognito. Идентификатор, Доступ, Refre sh.

-> Отправить токен в API покоя и выполнить проверку отправленного токена JWT. [1]

Дополнительно:

-> Компонент Amplify Auth удобен в работе для входа / регистрации и управления вашими токенами / сеансом.

-> Затем используйте любую HTTP-библиотеку для отправки запроса в API.

-> If API будет API Gateway (поддерживаемый Lambda), у вас есть гораздо больше возможностей. Компонент API в Amplify поможет с отправкой запроса, и на шлюзе API есть параметры авторизатора IAM / Custom Lambda / Cognito, которые являются действительными параметрами при использовании Cognito в качестве IDP.

[1] https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html

...