Защита запроса POST в NodeJS из серверного приложения - PullRequest
0 голосов
/ 08 мая 2020

Я хочу получить запрос POST, отправленный из серверного java приложения, которое отправляет информацию об учетной записи пользователя (например, имя пользователя, адрес электронной почты и т. Д. c.) И создаст учетную запись с данной информацией. Какой метод go я могу узнать, где api, который у меня есть, может использоваться только из моего java бэкэнда (чтобы люди не могли просто начать создавать учетные записи сами)? Я предполагаю, что метод будет использовать ключ api, но у меня возникли проблемы с поиском ресурсов о том, как это реализовать. Может ли кто-нибудь помочь мне и направить меня в правильном направлении?

1 Ответ

1 голос
/ 08 мая 2020

Самый распространенный метод - использование ключей API.

  • У вас будет список действительных идентификаторов клиентов для NodeJS сервера (Note that the JAVA backend server would act as a client for your Node JS server when creating users).
  • Наряду со списком допустимых клиентов вам также потребуется сохранить действующий ключ API для каждого клиента.
  • Java Backend отправит вам свой clientId и API Key в запросе POST. Вам нужно будет проверить идентификатор клиента и ключ API для этого клиента.
  • После того, как оба будут проверены, вы можете предположить, что запрос поступил от вашего Java бэкэнда.
  • Список допустимых идентификаторов clientIds и связанные ключи API должны храниться в переменных среды. Ключи API должны быть разными для одного и того же клиента в разных средах.

Другой способ, которым я реализовал это в прошлом, и который я считаю более безопасным, - это использование токенов RS256 Al go JWT с использованием Publi c и закрытых ключей.

  • Ваш Java бэкэнд должен сгенерировать пару открытого / закрытого ключей и предоставить бэкэнду Node ключ publi c.
  • Наряду с запросом POST серверная часть Java сгенерирует и подпишет токен JWT с помощью закрытого ключа и отправит его на ваш сервер NodeJS.
  • Ваш NodeJS бэкэнд должен проверить токен с помощью ключа publi c.
  • Токен JWT, сгенерированный бэкэндом Java, должен быть недолговечным.
  • Каждый раз, когда бэкэнд Java должен отправить запрос POST, он должен генерировать новый токен JWT.

Использование JWT более безопасно, поскольку они могут быть недолговечными и вам не нужно беспокоиться об утечке токена. Если API-ключ просочился, вам придется координировать действия двух бэкэндов, чтобы начать использовать новый API-ключ. Однако, если происходит утечка токена JWT, тот же токен не может быть использован после истечения срока его действия. Было бы безопасно, если токен JWT будет недолговечным, может быть 1-2 минуты. Поскольку ключи Private и Publi c не отправляются вместе с каждым запросом, вероятность его утечки меньше.

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