Я хочу защитить свои конечные точки API, чтобы только авторизованные приложения могли получать к ним доступ или писать на них. Мой стек:
- Flask (API построен на эквиваленте Flask-Restplus / Flask-Restless)
- 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':
- Оставить свойство неопределенным / пустым. Приводит к ошибке развертывания:
Invalid OpenAPI file. Please fix the schema errors:\nerror: object has missing required properties ([\"paths\"])
- Используйте сопоставление синтаксиса подстановочных знаков, как показано ниже. Ошибка:
Please fix the schema errors:\nerror: instance type (null) does not match any allowed primitive type (allowed: [\"object\"])
![wildcard matching on paths](https://i.stack.imgur.com/ksVKD.png)
Вопрос: Каков масштабируемый способ применения требования ключа API ко всем моим маршрутамбез повторного объявления всех маршрутов в конфигурационном файле OpenAPI? Я не пытаюсь использовать OpenAPI для создания API , просто ищу ключ / секрет здесь.
В качестве альтернативы, есть ли более простой способ защитить конечные точки при использовании GAE / GCP или Flask, на которых я упускаю? Я чувствую, что это такая распространенная проблема, и представьте, что существует какое-то дополнительное решение
Дополнительная справочная информация
- Я посмотрел на это имя пользователя + пароль, токен-на основе учебник Flask-auth . К сожалению, мои мобильные и веб-приложения (клиенты API) используют федеративную аутентификацию Firebase, поэтому у нас нет поддержки имени пользователя и пароля для создания токенов. Также кажется, что заново изобретаем колесо
- Swagger 3 заметки по API-ключам