Sono sicuro che tu abbia uno o più account sui social media.
Che si tratti di Facebook, Twitter, YouTube, Google, GitHub,
o molti altri fornitori di servizi di questo tipo, dove hai registrato telefono e account.
Ora, questi fornitori di servizi, a loro volta,
sono disposti a fornire servizi di autenticazione per tuo conto.
Così, ad esempio, si vede la proliferazione di un certo numero di siti web
e applicazioni mobili in cui si è autorizzati ad accedere
utilizzando i propri account di social media.
Ora, come funziona davvero?
Molti di questi provider di account di social media
fungono da provider di servizi di autenticazione utilizzando un protocollo chiamato come OAuth.
Esamineremo OAuth e come consente a questi provider di autenticazione di terze parti di
fornire l'autenticazione per tuo conto
e ti permetteranno di accedere ad altri servizi utilizzando i loro account di social media.
Sono sicuro che potresti aver sentito parlare di OAuth 1 e OAuth 2,
e potresti aver sentito da persone dire
che Facebook fornisce l'autenticazione basata su OAuth 2,
o Google fornisce l'autenticazione basata su OAuth 2 e così via.
Sono sicuro che ti starai chiedendo,
cosa sono esattamente questi OAuth1 e OAuth 2?
Ora, OAuth1 e OAuth 2 sono framework
di autorizzazione basati su standard aperti.
E questi possono essere utilizzati su Internet per autenticare
la tua identità su molti siti web o applicazioni mobili.
Ora, quando si utilizzano questi servizi,
si dipende da uno degli account di social media come Facebook,
Google, Twitter, Microsoft, Instagram,
GitHub, DigitalOcean, e molti altri,
che forniscono questi servizi di autenticazione per gli altri a fare uso di.
Questi provider di servizi di autenticazione promettono
agli utenti di questi servizi di autenticazione che autenticheranno l'identità
dell'utente in base all'invio delle
proprie credenziali per questi servizi di social media.
Ora, c'è un servizio complementare OpenID.
Ma, ovviamente, non correlato a OAuth ma fornisce un tipo di servizio simile.
Ma la maggior parte dei fornitori di servizi di social media standard,
come vedrai elencato qui,
fornisce servizi basati su OAuth 2 in questi giorni.
Ora, come ho detto, OAuth1 e OAuth 2 sono protocolli di autenticazione
e OAuth 1 è stato il primo protocollo che è venuto in essere.
Questo è stato evoluto da Twitter,
Blaine Cook è la persona dietro di esso,
e questo è documentato nella Internet Engineering Task Force, RFC 5849.
Quindi, se volete leggere i dettagli cruenti di come funzionano questi protocolli,
questo è il posto giusto per trovarlo.
Il protocollo OAuth 2 si è evoluto da OAuth 1 per renderlo più semplice
e per fornire un modo più semplice per lo sviluppo del client.
E questo è documentato in IETF RFC 6749 e successivamente,
un altro utilizzo di token portatore è avvenuto in IETF RFC 6750.
Ora, dal nostro punto di vista,
non vogliamo entrare nei dettagli di come funzionano effettivamente questi protocolli.
Invece, tutto ciò che ci interessa è,
come possiamo sfruttare questi per l'autenticazione dell'utente all'interno della nostra applicazione web,
o all'interno della nostra applicazione mobile,
quando abbiamo bisogno di autenticare
l'utente al server Express su cui abbiamo costruito finora?
Ora, ci concentreremo principalmente su OAuth 2,
perché nell'esercizio,
esamineremo l'uso di Facebook come provider di servizi di autenticazione OAuth 2,
e qui, abbiamo bisogno di capire
alcuni termini per vedere come funziona esattamente questo protocollo OAuth 2.
Almeno, i dettagli bare-bone di come funziona il protocollo stesso.
Ora, nel caso di OAuth 2,
parliamo sempre di una proprietà delle risorse.
Ora, in questo caso,
la risorsa a cui mi riferisco non
è la risorsa memorizzata sul server Express.
Invece, la risorsa a cui ci riferiamo qui,
è l'identità dell'utente.
Ora, qualsiasi server, come il server Express che stiamo costruendo,
vuole avere accesso a questa risorsa,
questa è la tua identità.
Ora, dov'e' la tua identita'? La
tua identità è memorizzata su uno di
quei provider di servizi di autenticazione dei social media come Facebook e così via,
perché hai già creato un account su questi siti di social media.
Quindi, le tue informazioni o le tue informazioni di identità o le
informazioni del tuo profilo sono memorizzate su Facebook, ad esempio.
Ora, il tuo server Express vuole ottenere l'accesso alla tua identità e
verificare che sei davvero tu che stai cercando di accedere al server Express.
Quindi, in questo caso,
il server Express che abbiamo sviluppato,
funge da applicazione client.
Quindi, questo è dove l'applicazione client,
che è il sito web o l'app mobile che vuole
accedere al server delle risorse per ottenere le informazioni su di te.
Che cos'è un server di risorse di cui stiamo parlando?
Questo è il server di autenticazione OAuth di Facebook,
che fornisce anche le informazioni del tuo profilo su richiesta.
Ora, ovviamente, non continuerai a distribuire in modo casuale le informazioni del tuo profilo.
Si desidera invece essere in grado di verificare che si sta fornendo l'accesso alle
informazioni del profilo a un provider di servizi autenticato o a un server autenticato.
Ora, questo è dove la tua applicazione client o il server Express qui,
ad esempio, si registrerà su Facebook con un account che dice che sto gestendo un'app
e voglio registrarmi come potenziale fonte che può
avvicinarti per autenticare gli utenti quando forniscono
l'accesso a il loro profilo che viene memorizzato sul tuo sito.
Quindi, il server Express,
in questo caso fungendo da applicazione client,
si registrerà su Facebook e otterrà un ClientID e un segreto client da Facebook.
Ora, quando il server Express si registra su Facebook,
devi avere un account su Facebook,
un account autenticato su Facebook,
che userai per configurare questa app su Facebook.
Quindi, una volta che ti registri,
avrai accesso a un ClientID e a un segreto del cliente.
Ora, il server delle risorse,
come ho detto, è il server che ospita i dati protetti.
Dati protetti significa il profilo dell'utente che desidera accedere al server Express.
Quindi, il server Express vuole accedere a questo server
di risorse e ottenere i dati del profilo dell'utente che desidera accedere al server Express.
Quindi, vedi la relazione qui.
Quindi, quando parlo di un'applicazione client,
non intendo la loro applicazione front-end,
ma il loro server Express che sta cercando di fornire
l'accesso alle risorse che ha sul suo sito.
Ma il server Express,
al fine di consentirti di accedere,
avrà bisogno di accedere al tuo server di risorse Facebook che
ti autenticherà e fornirà le informazioni del tuo profilo al server Express.
Quindi, il server delle risorse di cui sto parlando qui,
è il server di autenticazione OAuth 2 di Facebook
più il server delle risorse che ti dà accesso alle informazioni del profilo dell'utente.
E il server di autorizzazione è il server che
autorizzerà qualcuno ad accedere
al server delle risorse per recuperare le informazioni del profilo.
Ora, l'utente è quello che ha le informazioni sul profilo sul server delle risorse.
L' utente deve autorizzare il server Express ad accedere
a questo server delle risorse per recuperare le informazioni del profilo.
Ma se l'utente ha bisogno di autorizzare il server Express,
l'utente deve accedere all'account Facebook
e quindi ottenere informazioni da Facebook chiamato come token di accesso,
che l'utente poi passerà al server Express.
Ora, quando il token di accesso viene ottenuto da Facebook tramite il protocollo OAuth 2,
il token di accesso verrà emesso in termini
di consentire questa applicazione client o il server Express,
che è già registrato su Facebook dicendo che
questo server client autorizzerò ad
accedere le loro informazioni sul profilo dal loro fornitore di servizi OAuth di Facebook.
Quindi, ancora una volta, questo è un po 'confuso.
Vedremo un diagramma in cui questo flusso di
informazioni è spiegato un po 'più chiaramente a voi.
Un punto che ho appena menzionato riguarda un token OAuth o il token di accesso.
Cos' è questo token di accesso?
Il token di accesso è qualcosa che il server di autorizzazione emette per te.
Quale server di autorizzazione?
Questo è il server di autorizzazione OAuth 2 di terze parti,
server di Facebook, in questo esempio.
Quindi sono un'applicazione server Express.
Ora, voi, come loro utente front-end
, volete accedere a qualcosa dall'applicazione server Express.
L' applicazione server Express ti dirà che
ti autentichi da Facebook e quindi ottieni il token di accesso da Facebook.
Questo token di accesso viene rilasciato
all'utente front-end da Facebook quando l'utente accede al proprio account Facebook.
Ora questo token di accesso viene emesso nel nome dell'applicazione client,
server Express, che si è già registrata su Facebook.
Quindi, affinché l'utente acceda a Facebook per ottenere il suo token di accesso,
l'utente richiede l'ID client dell'applicazione client o dell'applicazione Express.
Quindi questo ID client è incorporato
nell'applicazione front-end che questo server Express servirà per voi.
Quindi il server Express sta servendo un sito Web a cui si sta accedendo,
quindi quel sito Web conterrà
il codice in cui l'ID client di quel server Express è già incorporato in lì.
Un' altra informazione di cui ho parlato è un segreto del cliente.
Ora, nel flusso di autenticazione di cui parlerò,
il segreto del cliente non verrà mai rivelato a nessuno.
Il segreto client sarà solo sul lato server Express.
Quando il server Express tenta di autenticare e
ottenere l'accesso al profilo dell'utente da Facebook,
l'applicazione client, il server Express
invierà sia l'ID client che il segreto client,
insieme al token di accesso che l'utente fornisce a Facebook.
E Facebook, a sua volta,
autorizza la loro applicazione client ad accedere
al server delle risorse al fine di ottenere i dati del profilo dell'utente.
E una volta che i dati del profilo dell'utente sono ottenuti dal server delle risorse di Facebook,
allora il mio server Express sta per creare un account
per questo particolare utente che li ha registrati con il loro account Facebook.
Quindi, successivamente, fornire un token Web JSON all'utente,
che l'utente può quindi utilizzare per accedere
alle risorse memorizzate sul server Express.
Quindi, ancora una volta, per riassumere questo,
ho un diagramma qui per spiegarvi questo in modo un po 'più dettagliato.
Oltre a questo,
c'è anche un token di aggiornamento.
Quando un token di accesso viene rilasciato dal server OAuth 2 di Facebook,
il token di accesso ha una durata limitata.
Successivamente, il token di accesso diventerà non valido.
Quindi il token di accesso deve essere mantenuto confidenziale.
Quindi tutto questo scambio di token tra i diversi siti
sarà fatto in una materia crittografata utilizzando il protocollo HTTPS.
Quindi assicurati che quando invii il token di accesso dall'
applicazione front-end utente al server Express,
invierai il token di accesso solo tramite HTTPS, non HTTP.
Questo è molto importante perché non
vuoi che il tuo token di accesso venga rivelato a nessuno perché
chiunque possa ottenere uno dei tuoi token di accesso può fingere di essere
la loro applicazione client e quindi ottenere l'accesso al tuo profilo utente.
Quindi questo è molto importante.
Ora, poiché il token di accesso ha una durata limitata,
esiste anche un token di aggiornamento corrispondente,
che può essere utilizzato per aggiornare un token di accesso scaduto.
Ora, nel tipo di flusso che useremo
con la nostra applicazione nell'esercizio,
non saremo in grado di utilizzare il token di aggiornamento.
Ogni volta che l'utente desidera autorizzare
il server Express ad andare a recuperare le informazioni del profilo da Facebook,
l'utente dovrà fornire esplicitamente
un nuovo token di accesso ottenuto da Facebook.
L' unica parte che ho appena menzionato brevemente,
ma non ho elaborato,
è come funziona l'applicazione client, il server Express,
le scale, come si registra nel provider di servizi OAuth 2?
Ora, questo è dove molti dei provider di servizi OAuth 2
forniscono un modo per registrare un'app sul loro sito.
Quindi un'applicazione client,
i server Express nel nostro esempio,
si registrerà come applicazione client sul provider di servizi OAuth.
Quindi, come vedrete nell'esercizio,
il primo passo che faremo è quello di accedere a Facebook con
il nostro account e quindi creare un'app sul sito Facebook.
Quando lo fai, Facebook ti emetterà un ID app client e un segreto client.
Questa procedura si applica a molti altri provider di servizi OAuth perché
questo è il flusso generale di cui parla il protocollo OAuth 2.
Quindi l'ID dell'app client e il segreto del client sono utili per essere in
grado di dimostrare
la nostra identità al server OAuth quando passiamo un token di accesso che otteniamo dall'utente.
Ora, c'è anche un URL di reindirizzamento che devi
registrare quando stai registrando l'applicazione client,
e vedrai che eseguo nei passaggi che registro
l'app sul sito di Facebook.
Ora, per riassumere il flusso di informazioni di
cui abbiamo appena parlato brevemente nel caso precedente,
consentitemi di iniziare da questo punto.
Il primo punto da guardare è il proprietario della risorsa.
Quindi il proprietario della risorsa qui è l'utente che
utilizzerà il suo account di social media.
Facebook, in questo esempio,
ha l'autenticazione per l'utente.
Quindi il proprietario della risorsa è quello che ha il profilo sulla risorsa.
E queste informazioni del profilo per ogni account Facebook,
sono state memorizzate sul server di Facebook.
E così il server di Facebook fornisce il server delle risorse qui.
Quindi questo è il provider di servizi OAuth che vedi
sul lato destro di questa immagine qui.
Quindi immagina il server di Facebook sul lato destro, quell'applicazione client,
che ha il server API resto,
il server Express che abbiamo implementato,
è un'applicazione client in questo caso
e il proprietario della risorsa è l'utente.
URL utente front-end, che sta per
autorizzare ad andare su Facebook per verificare le credenziali dell'utente.
Quindi, quando si desidera accedere alle informazioni sul lato client,
si dovrà prima andare e
autorizzare questa applicazione client per essere in grado di
ottenere l'accesso alle informazioni del profilo.
Quindi l'applicazione client,
se agisce come un'app web,
fornirà un pulsante appropriato lì dicendo di accedere utilizzando Facebook.
E così quando si fa clic sul pulsante,
essenzialmente, viene avviato il primo passo.
La richiesta di autorizzazione utente viene avviata.
Quindi l'applicazione client,
attraverso l'agente utente,
l'agente utente è fondamentalmente l'applicazione client, l'applicazione front-end.
Potrebbe essere l'app angolare che abbiamo sviluppato o quella app mobile, che
si tratti di Ionic o se si tratta di
un'app NativeScript che abbiamo sviluppato nei corsi precedenti
nella specializzazione o anche di un'app nativa come un'app iOS o un'app Android.
Tutti questi agiscono come agente utente.
Quindi l'agente utente,
usano un processo di richiesta di autorizzazione attraverso
l'agente utente al server di autorizzazione,
che è il server di Facebook.
Ora, quando questo viene passato,
allora il proprietario della risorsa o l'utente,
che sta cercando di dare accesso al suo profilo a questa applicazione client,
dovrà autorizzare Facebook per essere
in grado di condividere queste informazioni con l'applicazione client.
Nell' approccio di concessione di flusso implicito che stiamo usando nel
nostro esempio qui e anche nell'esercizio che segue,
l'approccio di concessione di flusso implicito è
l'approccio più adatto quando si implementa un'app Web utilizzando
un framework come Angular o l'app mobile ibrida
con Ionic o un NativeScript o anche un'app nativa.
L' approccio di concessione del flusso implicito è molto più semplice per
gestire OAuth 2 per questo tipo di applicazioni.
Quindi il proprietario della risorsa fa clic sul pulsante di accesso,
quindi il server di autorizzazione chiederà al proprietario della risorsa con le informazioni che dicono:
«Questa applicazione client desidera accedere alle informazioni del profilo.
Lo autorizzi?»
E così questo sarà spuntato da Facebook,
e poi si farà clic su un pulsante lì dicendo, «
Sì, autorizzo questa applicazione client ad accedere per mio conto.»
Quindi, su quel punto,
il server di autorizzazione su Facebook,
il server di autorizzazione OAuth 2 su Facebook,
genererà un token di accesso.
Per generare questo token di accesso,
farà uso dell'ID client per questa applicazione client,
l'applicazione server Express che registriamo.
Quindi l'ID client dovrebbe essere parte dell'agente utente utilizzato da questo utente.
Quindi questo ID client verrà incorporato nell'app Angular,
nell'app Ionic o nell'app NativeScript o anche in un'app iOS o Android.
Quindi l'ID client verrà quindi utilizzato dall'
agente utente per trasformare il server di autorizzazione dicendo:
«Questa applicazione client vuole accedere al mio profilo
e sono disposto ad autorizzarti a consentire l'accesso al profilo».
Quindi, a quel punto,
il server di autorizzazione invierà un token di accesso all'agente utente in questo caso.
Quindi, ricorda, questo token di accesso entra nell'agente utente,
che è l'app mobile o la loro app angolare implementata da noi.
Quindi questo agente utente prenderà questo token di accesso e
quindi passerà questo token di accesso a tale applicazione client.
Quindi l'OAuth per accedere,
ma il token di accesso verrà passato all'applicazione client,
il server Express in questo caso,
in una particolare route sul router dell'utente,
la route di autenticazione sul sito dell'applicazione client.
Ora, in precedenza, abbiamo visto l'uso dell'autenticazione locale,
dove abbiamo inviato una richiesta per tagliare l'utente barra di accesso.
Ora, affinché questo funzioni nella nostra app, ne
imposteremo un altro su utenti barra,
barra Facebook, token barra, e così via.
Quindi un altro URL su cui forniamo questo token di accesso al server Express.
Ora, quando questo token di accesso viene ottenuto dal server Express,
il server Express prenderà questo token di accesso
e quindi insieme al suo ID client e al segreto client,
invierà queste informazioni al server di autorizzazione.
E il server di autorizzazione consentirà quindi alla propria applicazione client
di accedere al server delle risorse al fine di ottenere le informazioni del profilo.
E così le informazioni del profilo verranno restituite nel passaggio numero sei, di
nuovo all'applicazione client in questo caso.
Pertanto, quando l'applicazione client ottiene le informazioni sul profilo per l'utente,
l'applicazione client creerà un nuovo account per
l'utente su ogni sito se non esiste un account.
Se l'utente ha già effettuato l'accesso in precedenza utilizzando il proprio ID Facebook,
esiste già un account in modo che l'applicazione client e il server API Rest eseguano
semplicemente un controllo incrociato per vedere che questo account utente esiste già.
E, a quel punto,
l'utente viene autenticato alla funzionalità di accesso di terze parti
fornita dal servizio di autenticazione OAuth 2 di Facebook.
A quel punto, l'applicazione client genererà un token Web JSON,
nell'esempio che implementeremo ed eserciteremo,
e quindi passerà questo token Web JSON all'agente utente o all'applicazione front-end,
o all'app Angular, o all'app Ionic
o all'app NativeScript.
Quindi il token Web JSON verrà successivamente utilizzato dall'utente
per autenticarsi ogni volta che desidera
accedere a qualsiasi risorsa memorizzata sul server Express.
Quindi, una volta ottenuto il token Web JSON,
tutte le operazioni successive, hai già visto come farlo con JSON Web Token.
Quindi, una volta ottenuto il token Web JSON,
il tuo lavoro è fatto
e quindi puoi procedere in avanti con la normale operazione da quel punto in poi.
Ora, quando il token Web JSON scade,
devi passare attraverso l'intero processo di ri-autenticazione te stesso e,
successivamente, consentire agli utenti di accedere alle informazioni sul tuo sito.
Quindi, con questa rapida comprensione di come funzionano le operazioni OAuth 2
, di nuovo, come vedi, ci sono molti dettagli qui.
Ma, fortunatamente, non abbiamo a che fare con tutti questi dettagli perché useremo
un modulo nodo che si occupa di gran parte di questi dettagli per nostro conto.
Dal momento che abbiamo già impostato il nostro server Express per utilizzare Passport,
ora possiamo utilizzare un altro codice modulo nodo come modulo Passport-Facebook-Token.
Il modulo Passport-Facebook-Token implementa essenzialmente
l'approccio di concessione implicita di cui ho parlato prima.
E poi è possibile inizializzare
una nuova strategia nella strategia Passport, all'interno della vostra applicazione.
In questo modo il modulo Passport-Facebook-Token consente di impostare
una nuova strategia di autenticazione Passport per utilizzare l'API OAuth 2 basata su Facebook.
E così per fare uso di questo modulo,
si installa questo dicendo passato npm install passport- facebook-token,
meno meno salvare, e poi una volta installato che,
allora si configura una strategia di Facebook all'interno della vostra applicazione, e, successivamente,
fare uso di questo per configurare la strategia per il tuo Passport per
utilizzare se stiamo facendo uso dell'autenticazione basata su OAuth 2 per la nostra applicazione.
Con questa rapida comprensione di OAuth 2,
passiamo all'esercizio,
dove configureremo il nostro server Express in modo da utilizzare effettivamente
questo approccio implicito di concessione per consentirci di
verificare la nostra identità al server Express e,
successivamente, ottenere l'accesso alle risorse, ai piatti,
le promozioni e le informazioni dei leader che sono memorizzate sul nostro server Express.