Как защитить REST API с помощью ключей API - PullRequest
1 голос
/ 04 апреля 2020

Моя архитектура состоит из сервера переднего плана и сервера бэкэнд / API. API доступен для конечного пользователя, однако я хочу, чтобы сервер переднего плана мог получить доступ к определенным маршрутам API, которые недоступны для конечного пользователя (более высокая привилегия).

Этот вопрос состоит из 2 частей:

(1) Мне нужно использовать ключи API для конечного пользователя. Какая лучшая практика для этого?

(2) Как интерфейс взаимодействует с системой API Key? Клиенту необходимо будет войти в свою учетную запись, чтобы получить доступ к этим повышенным привилегиям, доступным во внешнем интерфейсе. (например, включение веб-хуков)

Мое приложение размещено в стандартном окружении Google Cloud App Engine, и я использую node.js 10. Было бы здорово, если бы у кого-нибудь были какие-либо предложения, касающиеся этой архитектуры.

Я знаю, что этот вопрос несколько общий, но я потратил несколько часов, просматривая информацию в Интернете, и мой вопрос не столько в том, как использовать ключи API или аутентификацию веб-интерфейса, сколько в том, что лучшая практика делать эти два вместе?

Спасибо, Никита

1 Ответ

2 голосов
/ 07 апреля 2020

JWT (https://jwt.io/introduction/) может помочь с этим. Вы можете включить ключ API, а также JWT в заголовок запроса. Некоторые сервисы принимают ключ API в качестве параметра URL, но лучше поместить такие конфиденциальные данные в заголовок.

JWT может храниться в cook ie, когда пользователь аутентифицируется, и может быть передан с запросом в сервер.

Сервер может использовать ключ API для аутентификации и декодирования этого JWT, используя ключ, доступный в серверной среде для авторизации доступа, так как декодирование этого JWT может выявить тип пользователя и, следовательно, помощь в определении уровня доступа требуется.

Прямой подход, используемый с несколькими вариантами. Вы можете начать с базовой версии c и постепенно добавлять слои / элементы.

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