Как простые безопасные API на App Engine с ключом API? - PullRequest
0 голосов
/ 20 октября 2019

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

  1. Flask (API построен на эквиваленте Flask-Restplus / Flask-Restless)
  2. GCP - Стандарт App Engine

Мой основнойнеобходимо защитить API, чтобы неавторизованные стороны не могли делать запросы к моим конечным точкам, таким как https://api.example.com/v1/fruits/1. Я сталкивался с конечными точками GCP , чья модель безопасности API Key основана на OpenAPI (Swagger). Несмотря на то, что Google, похоже, не одобряет его , использование ключа должно сработать для моего варианта использования (хотя мне, вероятно, в конечном итоге потребуется усилить его, добавив аутентификацию на основе токенов) - это хорошее начало.

Я следовал документам о том, как настроить ключи API в App Engine, и столкнулся с проблемой, когда указывал свойство 'paths' динамически (вместо жесткого кодирования)они все в порядке, так как у меня много маршрутов и я использую расширения Flask-Rest *, то есть я уже определил маршруты, поэтому я не хочу определять их снова в файле конфигурации swagger ),Я попробовал следующее в свойстве 'paths':

  1. Оставить свойство неопределенным / пустым. Приводит к ошибке развертывания: Invalid OpenAPI file. Please fix the schema errors:\nerror: object has missing required properties ([\"paths\"])
  2. Используйте сопоставление синтаксиса подстановочных знаков, как показано ниже. Ошибка: Please fix the schema errors:\nerror: instance type (null) does not match any allowed primitive type (allowed: [\"object\"])

wildcard matching on paths

Вопрос: Каков масштабируемый способ применения требования ключа API ко всем моим маршрутамбез повторного объявления всех маршрутов в конфигурационном файле OpenAPI? Я не пытаюсь использовать OpenAPI для создания API , просто ищу ключ / секрет здесь.

В качестве альтернативы, есть ли более простой способ защитить конечные точки при использовании GAE / GCP или Flask, на которых я упускаю? Я чувствую, что это такая распространенная проблема, и представьте, что существует какое-то дополнительное решение

Дополнительная справочная информация

  • Я посмотрел на это имя пользователя + пароль, токен-на основе учебник Flask-auth . К сожалению, мои мобильные и веб-приложения (клиенты API) используют федеративную аутентификацию Firebase, поэтому у нас нет поддержки имени пользователя и пароля для создания токенов. Также кажется, что заново изобретаем колесо
  • Swagger 3 заметки по API-ключам

1 Ответ

0 голосов
/ 25 октября 2019

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

Если по какой-либо причине вы не хотите использоватьНа конечных точках у вас есть несколько вариантов аутентификации для GAE:

GAE с аутентификацией Service to Service, проверьте здесь ,

GAE с аутентификацией пользователя, проверьте here .

Вы также можете защитить свои приложения и ресурсы, используя Cloud IAP .

...