2016-06-20 9 views
0

Ich werde einen API-Dienst für meine Kunden erstellen zu verwenden. Die API wird einige Daten zurückgeben, die den Kunden über die Website meines Kunden angezeigt werden. Die API benötigt keine Benutzerdaten.API-Authentifizierung mit node.js

Ich dachte daran, einen API-Schlüssel zu verwenden und es verwenden, um die relevanten Daten zurückzugeben. Aber ich möchte sicherstellen, dass nur die Kunden, die die Website meiner Kunden nutzen, auf die API zugreifen können.

Meine Frage ist, wenn ich die API im Frontend verwende und den api-Schlüssel freigibt, kann jemand die API von ihrem Browser benutzen. Ich möchte nicht, dass das passiert. Wie authentifiziere ich dies? Wenn das nicht funktioniert, kann ich die API von meinem Server zum Client-Server verwenden? Selbst dann, wie werde ich den Server authentifizieren?

Ich benutze nodejs und Express im Backend. Irgendwelche Ideen? Vielen Dank!

Antwort

0

Wenn Ihre API öffentlich ist, ohne Benutzerauthentifizierung, kann der Zugriff darauf nicht beschränkt werden.
Es gibt viele Problemumgehungen wie das Suchen nach Referer oder das Erstellen spezieller Tokens, aber alles wird auf der Clientseite gespeichert und ein Übeltäter kann es wiederverwenden.

Das ergibt im Allgemeinen keinen Sinn. Sie haben Ihre API bereits Ihren Kunden zur Verfügung gestellt. Selbst wenn Sie einen Arbeitsalgorithmus erstellen, kann ein Übeltäter einfach Ihre Website JavaScript-Methoden ausführen, damit es funktioniert. Wovor willst du dich schützen?

Wenn Sie den Zugriff auf Ihre API einschränken möchten, ist es am geeignetsten und effizientesten, dieses API-Back-End zu erstellen, sodass nur Ihre webclients auf der Serverseite darauf zugreifen können.

+0

Danke !. Das macht Sinn. Selbst wenn ich das API-Backend auf der Client-Seite mache, wissen Sie, wie man authentifiziert, dass die Anfrage vom richtigen Server kommt? Ich weiß, dass wir den api-Schlüssel nicht bloßstellen, sondern nur um sicherzugehen. – prdtuty

+0

@prdtuty Wenn Sie den serverseitigen Ansatz verwenden und sich Ihr Server in einer Art internem Netzwerk befindet, können Sie einfach Standardeinschränkungsregeln wie IP-Filterung, Routing, Zertifikate anwenden :) Normalerweise genügt IP-Filterung - Sie haben Web-Clients bei 192.168.0.1, und Sie haben Back-End-API bei 192.168.0.2, die nur den einzelnen Port (z. B. 80) hat, nur für 192.168.0.1 verfügbar. –

+0

Der anfordernde Server befindet sich nicht intern. Denkst du, ich muss CORS in dieser Situation aktivieren? – prdtuty

1

Dies ist eine knifflige Sache zu tun; im Wesentlichen Einschränkung der öffentlichen apis. Am Ende des Tages wird die Webseite im Browser des Benutzers auf ihrem lokalen Rechner sein. Wenn sie also über ihren Browser darauf zugreifen können, können sie auch manuell auf sie zugreifen. Ein API-Schlüssel ist wirklich der beste Ansatz, aber das dient nur als Abschreckung mehr als die Zugriffskontrolle. So ziemlich jede Zugriffskontrolle, die Sie in einen Browser stellen, kann leider außerhalb des Browsers nachgeahmt werden.

Wenn Sie die Route der Anmeldung von Benutzern zu einem gewissen Grad gehen möchten, sollten Sie in json web tokens (jwt) suchen. Dies muss nicht auf Benutzerebene erfolgen und kann auf einer Art Sitzungsebene erfolgen, wenn Sie dies bevorzugen. Dies schränkt jedoch den Benutzer nicht direkt auf die apis ein.