Необязательная авторизация для API Gateway - PullRequest
0 голосов
/ 27 апреля 2020

Я строю API, обслуживаемый лямбда-выражением через API-шлюз. Я уже интегрировался с авторизатором пула пользователей Cognito для некоторых конечных точек администратора, который блокирует неавторизованные запросы, но теперь я хотел бы добавить некоторые конечные точки, которые могут вызываться как аутентифицированными, так и не аутентифицированными пользователями (и возвращать разные данные в зависимости от авторизации). Например, вы можете себе представить, что GET /users будет возвращать только базовую c информацию о профиле для пользователей, если запрос не аутентифицирован, и дополнительные сведения, если он есть.

Каков наилучший способ установить это с API-шлюз?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

При использовании Cognito у вас есть следующие возможные опции

1) Авторизация Cognito

2) Лямбда-авторизация: Преимущество использования лямбда-функции заключается в том, что она может выполнять обработку авторизации, отличную от проверки IdToken , Например, вы можете записывать обработку в соответствии с вашим приложением, например, ограничения IP и разрешать только указанные c пользовательские агенты.

3) Внутри фильтра записи кода для перехвата каждого запроса и ответа и управления вашей собственной ролью на основе авторизации и возврата ответа при необходимости.

0 голосов
/ 28 апреля 2020

Вариант № 1 (предпочтительный вариант)

У вас есть 2 разные конечные точки

  1. API X с GET https://api.xyz.com/users (Lambda User as back -конец и Cognito в качестве Авторизатора)

  2. API Y с GET https://api.xyz.com/public/users (Lambda User в качестве внутреннего и без Cognito)

  3. Lambda Пользователь должен проверить, какой ответ должен быть возвращен на основе заголовка «Авторизация». Если «авторизовано», верните более подробную информацию, в противном случае верните наименьшую информацию.

Опция # 2

Пожалуйста, укажите 1 конечную точку

  1. API X с GET https://api.xyz.com/users (Lambda User как пользователь без Cognito)

  2. Lambda User должен проверить, какой ответ должен быть возвращен на основе в заголовке «Авторизация». Если «авторизовано», верните больше деталей, в противном случае, верните наименьшее количество деталей.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...