Wie sichern Sie die JavaScript-API Access Token?
Gibt es zahlreiche online-Ressourcen, die JavaScript-APIs für den Zugriff auf Ihre Dienste. Um deutlicher zu sein, werde ich meine Frage am Beispiel von MapBox, aber das gilt auch für viele andere Dienstleistungen in verschiedenen Bereichen an.
Wenn jemand will, um einen solchen service in einer web-Anwendung (wie die map-Bilder von MapBox zum Beispiel), die Sie in der Regel müssen sich Registrieren/Anmelden und erhalten eine access token auf den Dienst zuzugreifen.
Nun, wenn würde ich die API von der server-Seite - dort ist das kein Thema: ich weiß, dass mein token gespeichert ist sicher irgendwo auf dem server und ist nur "ausgesetzt" bei der Kommunikation zwischen meinem server und den service-provider. Jedoch, im Falle einer JavaScript-API (zum Beispiel, wenn ich Merkblatt für das Rendern einer Karte von MapBox), ich bin haben soll meiner access-token in einem JavaScript, das ausgesetzt wird, um die Benutzer-web-browser - und so macht es extrem einfach, jemanden zu finden, den Zugang token. In meinem Beispiel, einfach gehen, um jede website, die Broschüre und öffnung "Dev Tools" in Firefox zeigt die token, die Sie verwenden in einer minute aufmerksamen Lektüre Ihre JavaScript-code.
Dieses token jedoch, wie für mich, sollte betrachtet werden als eine sehr sichere Daten - service-Nutzung wird verfolgt, basierend auf der Authentifizierung dieses token enthält. Wenn Sie zahlen für den service, basierend auf seiner Verwendung wird es sehr kritisch, aber selbst wenn Sie nicht (wie, wenn Sie eine Frei - /Starter - /Non-Paid) - service-Nutzung ist begrenzt und ich möchte sicher sein, es ist nur mir, wer es verwendet.
Ist meine einzige Möglichkeit einen proxy über meinen eigenen web-server?
Gibt es eine Möglichkeit zum sichern der access-token verwendet eine JavaScript-API zum Zugriff auf einen externen Dienst, vorausgesetzt, dass JavaScript ausgeführt wird, im browser eines Benutzers?
- Nein, wenn der client benötigt, um zu senden, dass der token an Ihren server, dann die Clients zugreifen können, die token - es gibt keine Möglichkeit um ihn herum. Es gibt jedoch einige Authentifizierung Architekturen, dass nicht ein Benutzer mit dem kompletten Geheimnis, überprüfen Sie heraus, was der service bietet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beschränken Sie den Zugriff mit CORS
Machen Sie Ihr web-server zurück der access-Token auf ein ajax-request von javascript mit CORS-setup. Token können erfasst werden mit dieser Methode, besuchen Sie Ihren app.
Bieten Token für Autorisierte Benutzer
Können Sie auch die Authentifizierung auf Ihrem webserver zu bieten begrenzten Zugriff auf die Benutzer, die Sie ermöglichen. Token erfasst werden kann mit dieser Methode aber nur durch autorisierte Benutzer.
Proxy-Anfragen
Der einzige Weg, um vollständig zu schützen, dass der token ist, als proxy für die Anfragen über den server. Token können nicht erfasst werden mit dieser Methode.
Javascript-API-Token (und alle client-Token, in der Tat) sind immer sichtbar für den Kunden (es sei denn, mit Ihnen nur server-Seite, wie in Knoten). Es gibt keinen Weg darum herum. Wie Sie bereits erwähnt, ist der einzige Weg, um wirklich zu sichern einen API-Schlüssel und halten Sie es privat ist, um es zu speichern auf dem server, dann fordern Sie den server, um die Anfrage auf den Namen des Kunden.
Spreche ich nur über die map-Bilder-APIs, wie Mapbox, es scheint, dass leider nur Dienste wie Google Maps, Here Maps, Bing Maps usw. bieten ip - /domain Filterung durch den service-provider oder diese Art von Sicherheit, das alles bietet, basierend auf OSM traf ich nicht vorschlagen, it. Als Justin Poehnelt sagte, der einzige zuverlässige Weg ist, bauen Sie einen proxy verwenden, aber es ist in der Regel verboten. Ich finde das in die ToU von Mapbox:
Können Sie gerne zu Lesen, auf CORS-Header
Diese können Sie einschränken, welche domain können rufen Sie einen remote-web-service.