2016-02-03 6 views
5

Ich habe jetzt mehr als einen Tag gegoogelt. Vielleicht fehlen mir die richtigen Keywords.API-Schlüssel in Angular2 sichern

Ich habe folgendes Setup:

  • Express.js API (mit PM2 läuft auf Port 3000)
  • Angular2 app - serviert über nginx

Beide laufen auf dem gleichen Server.

Anrufe an die api (mydomain/api /) an proxied 127.0.0.1:3000

Für api Anrufe, die Genehmigung erfordern werde ich JWT und Benutzer-Authentifizierung verwenden.

Was ich erreichen möchte, ist, dass ich ein Token für meine angular2-App erzeuge, die erlaubt/benötigt wird, die öffentlichen Anrufe (Listen von Produkten zum Beispiel) zu machen.

Dieses Token muss natürlich sicher übertragen werden, da ich nicht möchte, dass andere meine Produkte und Preise über direkte API-Anrufe (mit einem gestohlenen Token) erhalten.

Jede Hilfe wird geschätzt.

Antwort

0

Ihr Token wird hoffentlich mit https übertragen. Und wenn es das tut sie es nicht bekommen ...

UPDATE

von wiki:

Da HTTPS HTTP huckepack ganz oben auf TLS, die Gesamtheit der das zugrunde liegende HTTP-Protokoll verschlüsselt werden . Dazu gehört auch die URL (die bestimmte Webseite angefordert wurde), Abfrage Parameter, Header,

https://en.wikipedia.org/wiki/HTTPS

+0

Entschuldigung, ich bin ein wenig dumm in diesem Abschnitt. Ich werde natürlich https einrichten. Aber ich muss immer noch mein öffentliches Token in einen Anfrageheader/URL-Param aus der eckigen App aufnehmen, so dass es für jeden sichtbar ist. Oder fehlt mir etwas? – user1261284

+0

siehe das Wiki, da https das Protokoll der Anwendungsebene ist, verschlüsselt es auch die Überschriften. – eesdil

+1

Ja, Sie haben in jedem Aufruf ein Token. Aber dieses Token wird auf dem Server erzeugt ... Ich habe jetzt ein ähnliches Setup (Express - Winkel 2) Ich werde meinen Workflow als Antwort hier einreichen. –

1

Zuerst wird, wie @eesdil sagte, müssen Sie HTTPS verwenden. In diesem Fall sind alle Ihre Anrufe verschlüsselt und sicher.

In meinem Beispiel (Angular 2, Express und JWT) habe ich Crypto-Modul mit pbkdf2-Algorithmus für Hash-Passwörter verwendet.

Dies ist Workflow:

  • /login/Anmeldungen -> Hash-Passwort ein und erzeugen Salz -> Speicher auf Server
  • /login -> bestätigen Passwort gegen gespeichert ein -> erzeugen jwt -> speichern es in localstorage auf Client
  • /api -> jwt in Auth Header senden -> Validierung auf dem Server -> Antwort

Arbeitsbeispiel hier senden ist: https://github.com/vladotesanovic/angular2-express-starter

+0

Ok, vielen Dank. Nehmen wir an, Ihre Starter-App listet Städte auf der Startseite auf. Ich möchte nicht, dass die Leute api/cities direkt anrufen. Also habe ich eine JWT generiert, die den öffentlichen API-Aufrufen intern zugewiesen ist. Ich könnte das öffentliche JWT per Express-Session auf eine sichere Weise bereitstellen, denke ich. Ich werde https und meine Idee in der ganzen Sache einrichten und komme mit dem Ergebnis zurück. – user1261284

+0

Nein, verwenden Sie keine Sitzung und Cookies zum Speichern oder Übertragen von JWT-Token. Egal von welchem ​​Ort sie/api/Städte anrufen, sie müssen gültige JWT haben. Ich werde mein Beispiel mit der/refresh Funktionalität verbessern. Sie können jwt auf der Clientseite codieren und sehen, wann sie ablaufen ... –