[MUSIC]
Nelle lezioni precedenti,
abbiamo visto diversi tipi di schemi di autenticazione.
Abbiamo iniziato con l'autenticazione di base, poi abbiamo esaminato come possiamo usare i cookie per
fare l'autenticazione, e anche i cookie firmati, e in
seguito, abbiamo esaminato l'autenticazione basata su sessione.
Dove il server tiene traccia delle informazioni su ciascun client, e
quindi il cookie verrà utilizzato come un modo di indicizzare nel
database lato server per estrarre informazioni aggiuntive, per convalidare l'utente.
Ora, i cookie e le autenticazioni basate su sessione non sono scalabili,
perché lì server deve tenere traccia di tutti i diversi utenti.
Anche se, questo viene fatto al di fuori del protocollo HTTP stesso, ma
ancora il fatto che è necessario tenere traccia
di tutte le informazioni della sezione del sito del server, lo rende non molto scalabile.
Quindi questo è dove l'autenticazione basata su token
si è dimostrata molto utile.
vedremo l'autenticazione token base un po 'più dettagliata in questa lezione ed
esercizio che segue.
Ancora una volta, rivedere rapidamente i cookie e l'autenticazione basata sulla sessione.
Con l'autenticazione basata sui
cookie, notiamo che i cookie sono memorizzati sul lato client, e i cookie sono inclusi
in ogni messaggio di richiesta in uscita per cui, il server viene ricordato su
quel client specifico, estraendo informazioni dal cookie. Il
cookie può essere utilizzato insieme alle sessioni, per cui i cookie memorizzano l'ID di sessione,
e quindi quando il server riceve la richiesta in arrivo dal cookie,
estrae l'ID di sessione e lo utilizza come indice nell'
archivio sessione lato server per recuperare le informazioni di sessione per il cliente particolare.
Ora, questo approccio, come ho detto,
non è molto scalabile perché se hai migliaia di sessioni, il server deve
tenere traccia di tutte queste migliaia di sessioni sul lato server.
Anche se è fatto indipendentemente da HTTP in un negozio,
un archivio di file o un database.
Tuttavia,
il fatto che sia necessario tenere traccia di tutte queste informazioni non le rende scalabili.
Quindi, ancora una volta, per ricordarti ancora una volta,
perché parliamo di autenticazione basata su token?
L' autenticazione basata su sessione, come abbiamo visto in precedenza, funziona perfettamente per
le applicazioni web e può facilmente prendersi cura dell'autenticazione utente.
Ma poi, l'autenticazione basata su sessione, mentre è il principio dei
server stateless e porta anche a problemi di scalabilità.
Il secondo problema è che le applicazioni mobili non
gestiscono molto bene le autenticazioni basate su sessione.
Allo stesso modo, le applicazioni mobili hanno difficoltà a gestire i cookie.
Quindi, in tali circostanze in cui il server sta fornendo dati
sia per un'applicazione web, sia per un'app mobile.
Quindi, l'autenticazione basata sulla sessione non sarà molto utile, ed
è qui che l'autenticazione basata su token diventa molto più facile da usare.
In un'autenticazione basata su token come nome in atto,
il server emetterà un token a un utente convalidato, e tutte le
richieste successive provenienti dal lato client, porterà il token nella richiesta stessa.
Nella forma di un'intestazione di richiesta o nel corpo del messaggio di richiesta.
Inoltre, l'autenticazione basata su token ci aiuta anche
a gestire quelli che sono chiamati problemi CORS o CSRF.
Problemi di condivisione delle risorse di origine
incrociata e così via, parlerò brevemente del costo nel prossimo modulo.
Ma per il momento, l'autenticazione basata su token risolve alcuni dei
problemi che si trovano con le auto e i problemi correlati alla contraffazione di richieste cross-site.
Non solo, l'autenticazione basata su token è molto più facile per
un'applicazione condividere la propria autenticazione con un'altra applicazione.
Naturalmente, tutto questo è fatto in modo sicuro.
Ma, con l'autenticazione basata su sessione, non è semplice.
Come funziona l'autenticazione basata su token?
Nell' autenticazione basata su token,
l'utente deve prima convalidare se stesso sul lato server.
Ora, questa convalida potrebbe assumere le forme che abbiamo visto prima.
Quindi possiamo usare una convalida locale utilizzando nome utente e password.
Oppure, possiamo anche utilizzare la convalida di terze parti utilizzando
tecnologie come, oauth o oauth 2.0 o open ID.
Parleremo brevemente di oauth e oauth 2.0 nel prossimo modulo.
Tuttavia, indipendentemente dal modo in cui l'utente si autentica, una volta che l'utente
è autenticato, subito dopo, il server può semplicemente emettere un token all'utente.
E tutte le successive comunicazioni tra l'utente e
il server, possono essere fatte semplicemente usando questo token.
JSON Web Token di cui parleremo, è uno di questi
schema di autenticazione basato su token, e lì server quando crea questo token, creerà un token firmato.
Utilizzando un segreto sul sito server che solo il server conosce.
Quindi, anche se una terza parte in avanti e tra e
tenta di manipolare il token, anche se cattura il token e
tenta di manipolare il token, il token diventerà non valido.
E così, questo modo di proteggere l'utente è
facilmente fattibile, tutte le richieste successive
dal lato client dovrebbero portare il token nella richiesta,
sia, come ho detto, nell'intestazione o nel corpo del messaggio di richiesta.
Quindi, quando il server riceve questo token, il server verificherà il token,
per assicurarsi che si tratta di un token valido, e quindi se si tratta di un token valido,
il server risponderà alla richiesta in arrivo.
Come ho accennato, JSON Web Tokens è uno di questi schemi di autenticazione basati su token.
JSON Web Token, è un modo molto semplice di codificare
le informazioni in un token e quindi passarle al sito client.
JSON Web Token si basa su standard,
questo è basato su IETF RFC 7519.
IETF qui, sta per Internet Engineering Task Force.
L' organizzazione che dà tutto su come funziona internet,
e si occupa dei protocolli e delle politiche, relative a Internet.
La RFC, sta per il documento standard,
in termini IETF, RFC sta per Request for Comments.
E ognuno di questi documenti standard porta un numero.
7519 in questo caso si riferisce al documento,
il documento standard relativo a JSON Web Token.
Il token Web JSON stesso è un token autonomo, porta tutte
le informazioni al suo interno, necessarie per identificare l'utente.
Non solo, un token Web JSON può essere condiviso tra due applicazioni.
Ad esempio, un'applicazione quando si autentica e poi entra in possesso di
un token Web JSON, può passare quel token Web JSON a e in quell'applicazione,
che è disposta ad autorizzare ad accedere al server per suo conto.
Questa condivisione del token viene eseguita in modo molto sicuro,
quindi non preoccuparti troppo della sicurezza lì dentro.
Questo non è in modo sicuro,
dove dalla condivisione del token tra un'applicazione a un'altra.
In tal modo, l'autorizzazione viene trasferita su una seconda applicazione e
la seconda applicazione può autorizzare per conto della prima applicazione,
a comunicare con il server.
Questo è fattibile con i token.
Ora, ovviamente, l'ingegnere in te si starà chiedendo cosa sia esattamente
all'interno di un token Web JSON e come è utile?
Un token Web JSON, come ho detto, è codificato in una stringa lunga e
questa stringa stessa può essere interpretata come composta da tre parti.
La stringa stessa può, o la stringa codificata stessa contiene tre parti,
l'intestazione, il payload e la firma.
Questo porta abbastanza informazioni su come questo token è codificato.
L' intestazione stessa contiene l'algoritmo specifico utilizzato per la
codifica di questo token Web JSON e il tipo del token stesso.
L' algoritmo in questo caso, sarebbe HS256 che è uno schema di codifica a 256 bit,
che viene utilizzato per l'hashing delle informazioni all'interno del token.
E in questo caso, questo sembra essere il token Web JSON, e quindi
il campo del tipo verrà impostato su JWT.
E così questa è l'informazione che viene memorizzata nell'intestazione di JSON Web Token.
Il Payload stesso, porta informazioni che ti aiutano a identificare l'utente.
Nell' esercizio che faremo,
il payload ora porta solo l'ID dell'utente all'interno del payload.
Non sono necessarie altre informazioni.
Questo ID può essere utilizzato sul lato server,
per indicizzare nel DB Mongo per recuperare le informazioni complete dell'utente, se necessario.
Quindi, vedrai che codificheremo l'ID e
poi lo memorizzeremo nel payload di quel messaggio.
Se necessario, è possibile memorizzare informazioni aggiuntive nel payload del messaggio.
Ma più informazioni memorizzate lì,
più grande è il token Web JSON corrispondente.
Quindi, provare a limitare la quantità di informazioni memorizzate nel payload
del token Web JSON.
Come vedremo nell'esercizio, abbiamo un modulo nodo che ci permette di
codificare e creare un token Web JSON, in
base alle informazioni che vogliamo mettere nel payload.
Ora, quando si crea un token Web JSON, si fornisce anche una firma.
Una chiave segreta sul lato server che viene utilizzata per la codifica di questo token Web JSON
e tale segreto è incluso anche nella parte firma del token Web JSON.
La firma stessa è inclusa in modo tale che vi
sia una base prima di intestazione codificata e payload,
che viene quindi codificato utilizzando il segreto specifico che viene utilizzato dal server.
E questo codificato in, come ho detto l'HMAC,
che abbiamo fatto riferimento in una delle lezioni precedenti e
utilizzando l'hashing 256 bit, e che è incluso nella firma.
Quindi, quando questo token Web JSON viene ricevuto sul lato server e
quando il server decodifica questo token, il server è in grado di controllare
incrociati per assicurarsi che questo token Web JSON non sia stato manomesso da nessuno,
mentre il token viene passato tra il client e il sito del server.
Quindi, se sai qualcosa sulla sicurezza,
sugli intrusi e così via, capisci perché è importante codificare il token e
verificare l'autenticità del token sul sito del server.
Come ho detto, se hai bisogno di gestire i token Web JSON nell'applicazione nodo.
Esiste un modulo nodo specifico chiamato come modulo nodo jsonwebtoken.
Questo modulo nodo implementa gli standard correlati al token Web JSON e
può essere incluso nell'applicazione nodo.
Questo modulo stesso, fornisce un metodo chiamato segno che consente di firmare ed
emettere il token al client dal lato server.
Contiene anche un metodo di verifica.
Che può essere utilizzato per verificare l'autenticità o
per garantire l'autenticità del token Web JSON in entrata,
quindi useremo il modulo token Web JSON, nel nostro esercizio.
Insieme al modulo JSON Web Token,
abbiamo utilizzato anche il modulo Passport-JWT, modulo nodo.
Che fornisce le strategie basate su jwt per il nostro modulo di autenticazione del passaporto.
Quindi questo fornisce una strategia di passaporto per l'autenticazione utilizzando JSON Web Token.
Quindi questo consente di autenticare l'endpoint RESTful utilizzando il JWT come metodo per
dong la convalida, senza richiedere al server di utilizzare le sessioni.
Ora, il modulo passaporto JWT,
supporta un metodo per estrarre anche il token JWT
dal messaggio di richiesta in arrivo e quindi anche verificare il token per tuo conto.
Lo stagista del modulo Passport-JWT utilizza il modulo JSON Web Token per
eseguire la verifica di quel token Web JSON.
Il token stesso può essere portato nell'intestazione della richiesta in arrivo,
nell'intestazione, anche nell'intestazione di autenticazione della richiesta in arrivo,
che è ciò che faremo nell'esercizio.
Il token può anche essere trasportato nel corpo della richiesta in arrivo, nel qual caso,
dobbiamo estrarre il token dal corpo della richiesta in arrivo e
quindi utilizzarlo.
Il modulo Passport-JWT, lo supporta anche se si sceglie di
utilizzarlo come modo di passare il token dal client al sito server.
Il token Web JSON, può anche essere incluso nei parametri di query URL se si
sceglie di, e può essere estratto da lì b Passport-JWT e
utilizzato per l'autenticazione.
Ora, con questa rapida comprensione dei token Web JSON e di
come sono utili, passeremo all'esercizio in cui useremo il modulo
Passport-JWT, insieme al modulo JSON Web Token,
e configurare il nostro server API Express Rest per utilizzare i token Web JSON.
[ MUSIC]