2016-02-03 25 views
5

Sono stato su Google più di un giorno ora. Forse mi mancano le parole chiave corrette.Protezione chiave API in Angular2

Ho la seguente configurazione:

  • ExpressJS API (in esecuzione con PM2 sulla porta 3000)
  • Angular2 app - servito via nginx

Sia corsa sullo stesso server.

chiamate all'API (mydomain/api /) sono inoltrate a 127.0.0.1:3000

Per le chiamate API che richiedono l'autorizzazione userò JWT e autenticazione utente.

Ciò che voglio ottenere è generare un token per la mia app angular2 che è consentita/richiesta per effettuare chiamate pubbliche (elenchi di prodotti, ad esempio).

Questo token deve essere trasferito in modo sicuro, naturalmente, poiché non voglio che altri ottengano i miei prodotti e i prezzi tramite chiamate api dirette (con un token rubato).

Qualsiasi aiuto apprezzato.

risposta

0

Si spera che il token viaggi con https. E quando lo fa non possono farlo ...

UPDATE

da wiki:

Perché HTTPS piggybacks HTTP del tutto sulla parte superiore del TLS, la totalità del protocollo HTTP sottostante può essere criptato . Questo include l'URL richiesta (quale particolare pagina web è stato richiesto), interrogazione parametri, intestazioni,

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

+0

Scusa, sono un po 'stupido in questa sezione. Naturalmente installerò https. Ma dovrò comunque includere il mio token pubblico in un Request Header/url param dall'app angular, quindi è visibile a chiunque. O mi sta sfuggendo qualcosa? – user1261284

+0

vedere il wiki, poiché https è il protocollo del livello applicazione che sta crittografando anche le intestazioni. – eesdil

+1

Sì, il token include l'albero in ogni chiamata. Ma quel token è generato sul server ... Ho un setup simile in questo momento (express - angular 2) invierò il mio workflow come risposta qui. –

1

In primo luogo, come @eesdil Detto questo, è necessario utilizzare HTTPS. In tal caso, tutte le chiamate sono crittografate e sicure.

Nel mio esempio (Angolare 2, Express e JWT), ho usato il modulo crittografico con l'algoritmo pbkdf2 per le password di hashing.

Questo è il flusso di lavoro:

  • /login/registrazione -> hash della password e generare il sale -> archivio sul server di
  • /login -> convalidare la password contro memorizzati uno -> generare JWT -> salva in localStorage sul client
  • /api -> inviare JWT in Auth intestazione -> validare sul server -> inviare risposta

esempio di funzionamento è qui: https://github.com/vladotesanovic/angular2-express-starter

+0

Ok, grazie mille. Ma diciamo che la tua app iniziale elencerebbe le città nella home page. Non voglio che le persone chiamino direttamente api/città. Così ho generato un JWT che è assegnato internamente alle chiamate API pubbliche. Potrei fornire il JWT pubblico tramite express-session in un modo sicuro, immagino. Installerò https e la mia idea in tutto e tornerò con il risultato. – user1261284

+0

No, non utilizzare la sessione e i cookie per l'archiviazione o il trasferimento di token jwt. Non importa da quale posizione chiamano/api/città hanno bisogno di avere un jwt valido. Migliorerò il mio esempio con la funzionalità/refresh. Puoi codificare jwt dal lato client e vedere quando scade ... –