Самый распространенный метод - использование ключей 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 не отправляются вместе с каждым запросом, вероятность его утечки меньше.