Il che è positivo per la massima sicurezza web

Sia JWT che OAuth possono aiutarti a migliorare la sicurezza della tua applicazione web offrendo autenticazione e autorizzazione sicure. Ma quale dovresti implementare per consentire agli utenti di accedere alla tua applicazione web in modo sicuro? Abbiamo preparato un articolo dettagliato su JWT vs. OAuth per rispondere a questa domanda.

Dopo averlo letto, avrai un’idea chiara di cosa sono JWT e OAuth, quali vantaggi offrono, in cosa differiscono e quale dovresti implementare per migliorare la sicurezza della tua applicazione web.

Senza ulteriori indugi, tuffiamoci.

Cos’è un JWT?

JWT, che sta per JSON Web Token, è uno standard aperto che definisce un modo per condividere in modo sicuro le informazioni tra due parti come oggetto JSON. Poiché le informazioni sono firmate digitalmente, le parti possono fidarsi e verificare le informazioni trasmesse tramite JSON Web Token.

Una dimensione relativamente piccola dei JWT consente loro di essere inviati tramite un parametro POST, un URL o all’interno di un’intestazione HTTP. Un token Web JSON è composto da tre parti: intestazione, payload e firma.

L’intestazione indica il tipo di token e il tipo di algoritmo di firma utilizzato. La parte Payload di un JWT include affermazioni che sono dichiarazioni sugli utenti e dati aggiuntivi.

Come suggerisce il nome, la parte Firma di un Web Token JSON ha la firma per verificare che il messaggio non sia stato manomesso lungo il percorso.

Come funzionano i JWT

Fonte immagine: DEV

Di seguito è riportato il funzionamento di un token Web JSON.

Accesso utente

Gli utenti accedono alla tua applicazione web inviando i propri nomi utente e password. Quindi, l’applicazione trasferisce queste credenziali di accesso al server di autenticazione.

Generazione di token

Dopo che il server di autenticazione ha verificato le credenziali di accesso degli utenti, genera token Web JSON e li invia agli utenti. Questi JWT possono includere informazioni critiche sugli utenti e sulle sessioni di autenticazione. Gli utenti archiviano questi JWT localmente. In base alle impostazioni, il server può anche firmare JWT utilizzando un segreto condiviso o una chiave privata per migliorare la sicurezza.

Verifica dei token

Quando gli utenti effettuano richieste al server delle applicazioni per accedere a qualsiasi risorsa, includeranno i propri JWT nelle richieste del server. Il server delle applicazioni verificherà le firme nei JWT e controllerà le attestazioni nei payload per verificare se agli utenti è consentito accedere alle risorse richieste.

Se i JWT sono validi, agli utenti verrà concesso l’accesso alle risorse richieste nell’applicazione Web.

Casi d’uso dei JWT

È possibile utilizzare i token Web JSON nei seguenti modi:

#1. Autorizzazione

Dopo che gli utenti hanno effettuato correttamente l’accesso all’applicazione Web tramite l’endpoint di accesso, il server di autenticazione emetterà loro dei JWT. Gli utenti utilizzeranno i propri JWT per accedere alle risorse all’interno dell’applicazione, che richiedono l’autenticazione per dimostrare la propria identità.

Scambio di informazioni tra le parti

JSON Web Token può essere l’opzione giusta per trasmettere in modo sicuro informazioni a utenti validi. I token Web JSON sono firmati per garantire che le informazioni provengano dalla fonte originale. Inoltre, la struttura di JWT (la parte della firma) consente ai destinatari di verificare che le informazioni non vengano modificate lungo il percorso.

Vantaggi dei JWT

Di seguito sono riportati i principali vantaggi derivanti dall’implementazione dei JWT nell’applicazione Web.

  • A differenza dei token SAML, i JWT sono leggeri. Pertanto, puoi implementarli rapidamente in ambienti HTML e HTTPP, rendendo i JWT ideali per applicazioni client come le applicazioni mobili.
  • I JWT offrono una solida sicurezza. Puoi firmare simmetricamente i JWT con un segreto condiviso utilizzando l’algoritmo HMAC o una chiave privata per firmarli in modo asimmetrico.
  • I JWT sono dotati di un meccanismo di scadenza integrato che consente di impostare il periodo di scadenza dei JWT per migliorare la sicurezza.
  • I token Web JSON sono ampiamente adottati da diverse soluzioni Single Sign-On. Di conseguenza, è facile lavorare con JWT.

Inoltre, i JWT possono risparmiare spazio di archiviazione del database nella tua azienda. Questo perché il tuo server crea solo JWT e vengono salvati sul lato client. Inoltre, i JWT non richiedono una ricerca nel database.

Pertanto, i JWT possono essere verificati rapidamente, offrendo un’esperienza utente superiore.

Limitazioni dei JWT

Sebbene i JWT siano un modo eccellente per autorizzare gli utenti. Presentano alcune limitazioni, come ad esempio:

  • Sei responsabile di garantire la sicurezza della chiave di crittografia. Se un hacker mette le mani sulla chiave che firma i tuoi JWT, sei in grossi guai. Potrebbero creare token falsi che interferiscono con i dati dell’utente. Questo è un enorme rischio per la sicurezza.
  • I JWT non necessitano di una chiamata al database per ogni controllo, il che suona bene. Ma se devi revocarne uno il prima possibile, dovrai inserirlo nella lista nera. Non è un compito rapido o semplice.
  • Quando un JWT scade, non è solo questione di estendere il timer. Il tuo sistema chiederà all’utente di accedere nuovamente per ottenere un nuovo token. Ciò aggiunge complessità all’intero processo, richiedendo una maggiore riflessione sull’esperienza dell’utente e sui flussi di sicurezza. Per semplificare il processo, puoi implementare i token di aggiornamento in combinazione con i JWT. Quando il token di accesso scade, i client possono utilizzare questi token di aggiornamento per richiedere nuovi token di accesso senza che il client invii nuovamente le credenziali di accesso.
  • L’implementazione dei JWT nella tua applicazione web non è un compito semplice; richiede lavoro di ingegneria aggiuntivo. Dovrai impostare il processo di creazione del token, scegliere il meccanismo di firma più adatto alla tua applicazione e integrare il tutto con la tua architettura esistente.

I JWT non sono una soluzione in un unico passaggio, ma piuttosto un progetto che richiede un’attenta pianificazione ed esecuzione.

Cos’è OAuth?

OAuth, abbreviazione di autorizzazione aperta, è un protocollo di autorizzazione standard aperto per l’autorizzazione. Consente alle applicazioni Web o ai siti Web di accedere alle risorse ospitate da applicazioni di terze parti per conto degli utenti senza che gli utenti condividano le credenziali di accesso per applicazioni di terze parti.

Ora, scritto come OAuth 2.0 (l’ultima versione di OAuth), è ampiamente utilizzato per autenticare gli utenti tramite un server di autenticazione.

Ad esempio, con OAuth attivo, gli utenti possono accedere alla tua applicazione con i propri account Facebook o Google. Ma inseriranno le proprie credenziali di accesso solo sugli account Facebook o Google.

Come funziona OAuth

Fonte immagine: Zoho

Ad esempio, hai un’app per la gestione del tempo. E per consentire a chiunque di utilizzare la tua app in modo efficiente, devi accedere alle loro caselle di posta elettronica. In passato, gli utenti dovevano condividere le proprie credenziali di accesso con la tua app per consentire all’app di accedere alle loro caselle di posta. OAuth2.0 ha risolto questo problema.

Ecco come appare il flusso di lavoro OAuth2.0:

  • La tua app di gestione del tempo (il client) richiede di accedere alle risorse protette; in questo caso si tratta della casella di posta dell’utente, di proprietà dell’utente (proprietario della risorsa). La tua app lo fa inviando l’utente all’endpoint autorizzato.
  • Il proprietario della risorsa (utente) autentica e autorizza la richiesta di accesso alla risorsa dall’app di gestione del tempo. Il client (la tua app) riceverà una concessione di autorizzazione dall’endpoint autorizzato.
  • La tua applicazione richiederà un token di accesso dal server di autorizzazione per accedere alla posta in arrivo dell’utente. Lo farà presentando la concessione dell’autorizzazione e con la propria autenticazione d’identità.
  • Se l’identità della tua app è autenticata e la concessione dell’autorizzazione è valida, la tua app riceverà un token di accesso per accedere alla posta in arrivo dell’utente.
  • Se il token di accesso è valido, la tua app ora può accedere ai dati utente (posta in arrivo dell’utente) inviando il token di accesso per l’autenticazione.
  • Ora la tua app di gestione del tempo può accedere alla posta in arrivo dell’utente. Come ha fatto Oauth varie tipologie di sussidioil flusso di autorizzazione potrebbe differire leggermente in base ai tipi di concessione dell’autorizzazione.

    Vantaggi di OAuth

    Di seguito sono riportati i principali vantaggi derivanti dall’utilizzo di OAuth.

    • OAuth è uno standard ampiamente accettato. Ciò significa che tutti i principali servizi di autenticazione comprendono e utilizzano OAuth.
    • Gli utenti troveranno molti plug-in e funzionalità OAuth tra cui scegliere, grazie alla sua ampia diffusione e compatibilità.
    • OAuth offre librerie client testate per quasi tutti i linguaggi di programmazione e framework web. Quindi, puoi utilizzare la tua lingua preferita con OAuth.
    • OAuth è altamente sicuro e ben controllato. Poiché è così ampiamente utilizzato, gli esperti hanno già considerato tutti i possibili rischi per la sicurezza.
    • OAuth è ottimo per il disaccoppiamento del codice. Il codice dell’applicazione principale non viene incasinato durante la gestione delle attività di autenticazione. Ciò semplifica la gestione e l’aggiornamento della tua app a lungo termine.

    Casi d’uso di OAuth

    Di seguito sono riportati alcuni casi d’uso comuni di OAuth:

    • L’uso più comune di OAuth 2.0 è creare applicazioni di terze parti per accedere agli account degli utenti. Con OAuth 2.0, gli utenti possono autorizzare terze parti ad accedere ai propri dati archiviati in diversi servizi senza fornire a terzi le credenziali di accesso per tali servizi.
    • In qualità di proprietario di un’applicazione Web, puoi utilizzare OAuth 2.0 per implementare il Single Sign-on. Puoi esplorare queste soluzioni OAuth open source per il tuo progetto.
    • Puoi implementare OAuth 2.0 nel tuo gateway API per fare in modo che il gateway API agisca come un server di autorizzazione. Ciò garantirà che il gateway API inoltrerà le richieste dai client con token di accesso validi.
    • OAuth 2.0 può consentire all’IoT e ai dispositivi intelligenti come frigoriferi o TV di interagire con API di terze parti per conto degli utenti. Ciò è utile quando un utente desidera accedere a un’app su gadget senza una normale tastiera, come una smart TV o una console di gioco.

    Limitazioni di OAuth

    La gamma di flussi disponibili può essere scoraggiante per chi è nuovo a OAuth. Non si tratta solo di sceglierne uno; a volte è necessaria una combinazione per soddisfare tutti i requisiti di sicurezza. Questa complessità può rendere difficile per i principianti sapere da dove iniziare, cosa utilizzare e come integrarlo in modo efficace.

    Ogni flusso ha uno scopo unico, che si tratti di app mobili, comunicazione da server a server o applicazioni web. Quindi, analizzare attentamente le proprie esigenze specifiche è fondamentale prima di fare una scelta.

    OAuth 2.0 dipende da SSL/TLS per mantenere le cose al sicuro. Se SSL/TLS non è configurato correttamente, la sicurezza di OAuth 2.0 potrebbe essere a rischio.

    Inoltre, OAuth può sollevare problemi di privacy, in particolare durante il monitoraggio dell’attività dell’utente. Quando utilizzi un servizio come “Accedi con Google”, Google potrebbe venire a conoscenza della tua attività su quel sito di terze parti. Google non solo può sapere che hai effettuato l’accesso, ma può anche monitorare quanto spesso e quando interagisci con quel sito.

    Inoltre, OAuth potrebbe essere eccessivo per configurazioni più semplici, come un’app con solo un front-end e un back-end. Potresti non aver bisogno delle sue complessità in questi casi.

    Differenza tra JWT e OAuth

    JWT e OAuth svolgono la funzione cruciale di verificare l’identità dell’utente per autorizzare l’accesso alle risorse. Sono strumenti essenziali nel panorama della sicurezza ma differiscono per portata, complessità e applicazione.

    CaratteristicheJWTsOAuthUso principaleI JWT si concentrano principalmente sulle API.OAuth copre Web, browser, API e altre app.Token e protocolloIJWT sono un formato token.OAuth è un protocollo di autorizzazione.StorageIJWT si basano solo sull’archiviazione lato client.OAuth utilizza sia lato client che archiviazione lato server. Flessibilità I JWT hanno un ambito più limitato. OAuth offre maggiore flessibilità e una gamma più ampia di casi d’uso. Facilità d’usoI JWT sono più semplici e facili da comprendere. OAuth è più complesso.

    Mentre i JWT sono più semplici e orientati alla sicurezza delle API, OAuth fornisce una soluzione completa di meccanismi di autenticazione in grado di adattarsi a vari scenari.

    E OAuth può consentire agli utenti di consentire a un’app di terze parti di accedere ai propri dati su un’altra piattaforma senza rivelare i propri dettagli di accesso.

    Se uno sia migliore dipende dalle esigenze specifiche del sistema o della rete in questione.

    Puoi utilizzare JWT e OAuth insieme?

    Sebbene JWT e OAuth servano a scopi diversi, puoi combinarli insieme.

    Il protocollo OAuth non specifica alcun formato token che debba essere utilizzato rigorosamente. Quindi puoi implementare JWT in OAuth.

    Ad esempio, il server di autenticazione OAuth2 può emettere un token di accesso con JWT. E questo JWT potrebbe includere informazioni aggiuntive nel carico utile, migliorando le prestazioni. Questo perché verranno ridotti i viaggi di andata e ritorno tra i server di autenticazione e di risorse.

    La combinazione di JWT e OAuth2 può avvenire anche tramite un approccio a doppio token: OAuth2 emette due token separati in questo metodo: un access_token e un JWT. Il JWT contiene informazioni aggiuntive sull’identità. Questo approccio fornisce un ulteriore livello di dettaglio, offrendoti un maggiore controllo sull’accesso e sui dati degli utenti.

    È fondamentale utilizzare OpenID Connect quando si opta per questa strategia dual-token. OpenID Connect si basa su OAuth2 e aggiunge campi più standardizzati ai token.

    L’uso di JWT invece di OAuth2 può rendere le cose più veloci e meno complesse per attività specifiche. Ma può anche rendere lo sviluppo più impegnativo.

    Quando decidi di utilizzare JWT con OAuth2, valuta se l’aumento di velocità giustifica il lavoro aggiuntivo in fase di sviluppo.

    Conclusione

    Nella battaglia tra JWT e OAuth per la massima sicurezza web, ognuno ha pregi e svantaggi. JWT eccelle per l’autenticazione rapida e senza stato, ma presenta limitazioni come la mancanza di revoca integrata. OAuth eccelle in scenari di autorizzazione complessi, ma potrebbe essere eccessivo per progetti più semplici.

    Se hai bisogno di un’autorizzazione solida e di un’autenticazione efficiente, valuta la possibilità di combinare JWT e OAuth tramite OpenID Connect.

    La tua scelta dovrebbe dipendere dalle esigenze specifiche del tuo progetto, non solo dal clamore attorno a queste tecnologie.

    Inoltre, puoi esplorare queste popolari piattaforme di autenticazione utente per scegliere la soluzione migliore per la tua applicazione.