Принятым стандартом является использование фиксированного API-ключа. Этот мир информации должен быть произвольно сгенерированной строкой, которую вы отправляете в каждом запросе в заголовке. Ваш сервер должен каждый раз проверять HTTP-запрос, чтобы увидеть, присутствует ли API-ключ в заголовке, а если он есть, тогда он должен проверять сохраненное значение в переменной среды (никогда не хранить API-ключ в коде).
Если API KEY становится скомпрометированным, вы можете легко обновить переменную env, и вы снова добры.
Теперь это решение будет бессмысленным без HTTPS-соединения, потому что любой сможет обнюхать трафик и увидеть API-ключ. Зашифрованное соединение является обязательным в этом случае.
Этот подход используется практически в каждой компании, которая имеет публичный API: Twitter, Facebook, Twilio, Google и т.д.
Google, например, имеет дополнительный этап, на котором они дают вам маркер, который истекает, но это будет более убивать в вашем случае: по крайней мере, в начале.
Следующий код является примером моей реализации проверки API KEY
app.use(function(req, res, next) {
//
// 1. Check if the APIKey is present
//
if(!req.headers.authorization)
{
return res.status(400).json(
{
message: "Missing APIKey.",
description: "Unable to find the APIKey"
}
);
}
//
// 2. Remove Basic from the beginning of the string
//
let noBasic = req.headers.authorization.replace('Basic ', '');
//
// 3. Convert from base64 to string
//
let b64toString = new Buffer(noBasic, 'base64').toString("utf8");
//
// 4. Remove the colon from the end of the string
//
let userAPIKey = b64toString.replace(':', '');
//
// 5. Check if the APIKey matches the one on the server side.
//
if(userAPIKey != process.env.API_KEY)
{
return res.status(400).json(
{
message: "APIKey don't match",
description: "Make sure what you are sending is what is in your server."
}
);
}
//
// -> Go to the next stage
//
next()
});
Вы можете проверить весь файл со всей реализацией hear.
На полузависимой ноте я считаю, что включение HTTPS - это первый шаг (вы можете получить бесплатные сертификаты из [LetsEncrypt] (https://letsencrypt.org/)), в дополнение к безопасному, проверенному и истинному пользователю/механизм проверки подлинности сеанса. Кроме того, вы захотите ознакомиться с информацией на сайте [OWASP] (https://www.owasp.org/index.php/Main_Page) для защиты от обычных атак, таких как XSS, CSRF и т. Д. – mscdex
Спасибо ! Я включил промежуточное программное обеспечение с именем 'helmet', которое обрабатывает уже кучу атаки, такой как XSS, я думаю: https://www.npmjs.com/package/helmet Я посмотрю вашу ссылку. Мерси! Я буду использовать HTTPS точно, и я знаю о LetsEncrypt (названный cerbot, который я думаю сейчас), потому что я использовал его для своего личного сайта. Но я все еще в режиме dev (localhost), поэтому я сделаю это, когда будет реальный сервер. Благодарю. – Ragnar