Der akzeptierte Standard besteht darin, einen festen API KEY zu verwenden. Dieser Informationsfrieden sollte eine zufällig generierte Zeichenfolge sein, die Sie in jeder Anfrage in der Kopfzeile senden. Ihr Server muss die HTTP-Anfrage jedes Mal überprüfen, um zu sehen, ob der API KEY in der Kopfzeile vorhanden ist, und wenn dies der Fall ist, muss er den gespeicherten Wert in der Umgebungsvariable überprüfen (niemals den API KEY im Code speichern).
Wenn der API-KEY kompromittiert wird, können Sie die env-Variable einfach aktualisieren, und Sie sind wieder gut.
Jetzt ist diese Lösung ohne eine HTTPS-Verbindung sinnlos, weil jeder in der Lage sein wird, den Verkehr zu schnüffeln und den API KEY zu sehen. Eine verschlüsselte Verbindung ist in diesem Fall ein Muss.
Dieser Ansatz wird von nahezu jedes Unternehmen verwendet, die eine öffentliche API hat: Twitter, Facebook, Twilio, Google usw.
Google zum Beispiel hat einen zusätzlichen Schritt, wo sie Ihnen ein Token geben, die verfallen, aber das wird in deinem Fall ein Overkill sein: zumindest am Anfang.
Der folgende Code ist ein Beispiel für meine Implementierung einer API-Key-Überprüfung
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()
});
Sie die gesamte Datei hear mit der ganzen Umsetzung überprüfen können.
Bei einer semi-verwandten Anmerkung, denke ich, die Aktivierung von HTTPS ist der erste Schritt (Sie können kostenlose Zertifikate von [LetsEncrypt] (https://letsencrypt.org/)), zusätzlich zu einem sicheren, bewährten und echten Benutzer/Sitzungsauthentifizierungsmechanismus. Außerdem sollten Sie sich die Informationen auf der [OWASP] -Seite (https://www.owasp.org/index.php/Main_Page) zum Schutz vor häufigen Angriffen wie XSS, CSRF usw. durchlesen. – mscdex
Vielen Dank ! Ich habe die Middleware mit dem Namen 'helm' aktiviert, die bereits eine Reihe von Angriffen wie XSS behandelt. Ich denke: https://www.npmjs.com/package/helmet Ich werde auf Ihren Link schauen. Merci! Ich werde HTTPS sicher verwenden und ich weiß über LetsEncrypt (benannt cerbot denke ich jetzt), weil ich es für meine persönliche Website verwendet habe. Aber ich bin immer noch im Dev-Modus (localhost), also werde ich es tun, wenn der echte Server hochgefahren ist. Vielen Dank. – Ragnar