• logto
  • api
  • protezione
  • JWT
  • autorizzazione

Metodi di autorizzazione API

In questo articolo, esploreremo tre meccanismi comuni di autorizzazione API, chiavi API, autenticazione di base e token OAuth JWT. Alla fine, parleremo anche di come Logto può aiutarti a proteggere le tue API utilizzando i token OAuth JWT.

Simeng
Simeng
Developer

Introduzione

Nel mondo di oggi, le API sono la spina dorsale delle applicazioni moderne. Sono il modo principale per accedere ai dati e alle funzionalità dei servizi backend. Le API consentono a diversi sistemi software di diverse parti di comunicare e condividere dati tra loro, rendendoli indispensabili per le aziende. Tuttavia, le API sono anche un bersaglio comune per gli attaccanti. La necessità di protezione delle API è più forte che mai.

La protezione delle API è il processo di protezione delle API dall'accesso non autorizzato, uso improprio e attacchi. È un componente critico di qualsiasi strategia API. In questo articolo, esploreremo tre meccanismi comuni di protezione delle API: chiavi API, autenticazione di base e token OAuth JWT. Alla fine, mostreremo anche come Logto protegge le tue API utilizzando i token OAuth JWT.

Chiavi API

La chiave API è il metodo più semplice e ampiamente utilizzato per proteggere le API. Una chiave API è una lunga stringa di caratteri generata dal fornitore dell'API e condivisa con gli utenti autorizzati. Questa chiave deve essere inclusa nell'intestazione della richiesta quando si accede all'API. Le chiavi API sono semplici ed efficaci per esigenze di sicurezza di base. Ad esempio, servizi popolari come Google Maps API e AWS forniscono chiavi API per controllare l'accesso e monitorare l'utilizzo. Tuttavia, hanno limitazioni in termini di sicurezza. Sono spesso utilizzate per la comunicazione da macchina a macchina.

e.g.

Pro:

  • Semplice da implementare: Le chiavi API sono facili da implementare e utilizzare. Comportano l'attaccare una chiave all'intestazione della richiesta, rendendola un metodo semplice da comprendere e impiegare per gli sviluppatori e i clienti.
  • Facile da monitorare: Le chiavi API sono facili da monitorare. Puoi tracciare l'utilizzo di ciascuna chiave e revocarle se necessario.
  • Efficace limitazione del traffico: Le chiavi API sono efficaci per limitare il traffico. Puoi impostare un limite sul numero di richieste per chiave per prevenire abusi.
  • Adatto per dati non sensibili: Le chiavi API sono adatte per dati non sensibili o API pubblicamente disponibili, dove i requisiti di sicurezza sono minori.

Contro:

  • Sicurezza limitata: Le chiavi API non sono abbastanza sicure per dati sensibili, specialmente per applicazioni lato client. Sono spesso utilizzate nella comunicazione da macchina a macchina.
  • Non adatto per l'autenticazione utenti: Le chiavi API sono legate ad applicazioni o sistemi, non a utenti specifici, rendendo difficile identificare utenti specifici o tracciare le loro azioni.
  • Nessuna scadenza del token: Le chiavi API sono tipicamente statiche e non scadono. Se una chiave viene compromessa, potrebbe essere usata indebitamente indefinitamente a meno che non venga rigenerata manualmente.

Autenticazione di base

L'autenticazione di base è un altro metodo comune per proteggere le API. È uno schema di autenticazione semplice integrato nel protocollo HTTPs. Comporta l'invio di un nome utente e di una password nell'intestazione della richiesta. Il server quindi verifica le credenziali e restituisce la risorsa richiesta se risultano valide. Per esempio, molte applicazioni web e API RESTful utilizzano l'autenticazione di base come un modo rapido e facile per autenticare gli utenti. L'autenticazione di base è più sicura delle chiavi API perché utilizza un nome utente e una password invece di una chiave statica. Tuttavia, non è ancora sufficientemente sicura per dati sensibili. Poiché le credenziali del client vengono trasmesse in testo semplice, sono suscettibili di intercettazione. L'autenticazione di base è adatta per sistemi interni dove la connessione di rete è sicura, e.g. da macchina a macchina.

e.g.

oppure

Pro:

  • Sicurezza più forte: L'autenticazione di base è più sicura delle chiavi API perché utilizza un nome utente e una password invece di una chiave statica.
  • Ampiamente supportata: L'autenticazione di base è ampiamente adottata e supportata dalla maggior parte dei server web e browser.
  • Semplicità: Come le chiavi API, l'autenticazione di base è relativamente semplice da configurare e utilizzare.

Contro:

  • Esposizione delle credenziali: L'autenticazione di base invia le credenziali in testo semplice, rendendole suscettibili di intercettazione se non utilizzate tramite una connessione sicura (HTTPS).
  • Nessuna scadenza del token: L'autenticazione di base non supporta la scadenza del token. Se un token viene compromesso, potrebbe essere usato indebitamente indefinitamente a meno che non venga rigenerato manualmente.

Token OAuth JWT

JSON Web Token (JWT), definito da RFC 7519, è uno standard aperto per la trasmissione sicura di informazioni tra le parti come oggetto JSON. È comunemente utilizzato per l'autenticazione e l'autorizzazione nelle applicazioni web e nelle API.

Un JWT firmato ha il seguente formato:

Consiste in tre parti separate da .: l'intestazione, il payload e la firma.

Ecco un esempio di JWT:

  • intestazione: contiene informazioni sul tipo di token e l'algoritmo di hashing utilizzato per firmarlo.
  • payload: contiene le affermazioni (dichiarazioni) sull'utente e altri dati.
  • firma: è un hash dell'intestazione e del payload, firmato con una chiave segreta.

OAuth è uno standard aperto completo per la sicurezza delle API e per la delega di accesso, comunemente utilizzato come un modo per i client di concedere ai siti web o alle applicazioni accesso alle loro informazioni su altri siti web senza fornire loro le password.

Quando utilizzati insieme ai JWT, i token OAuth JWT offrono una soluzione di sicurezza robusta. Invece di trasmettere informazioni sensibili come nomi utente e password con ogni richiesta, i token OAuth JWT vengono emessi ai client autorizzati dopo un'autenticazione riuscita. Questi token contengono informazioni sull'utente e le loro autorizzazioni. Inoltre, i token JWT sono firmati digitalmente per prevenire manomissioni e possono scadere, fornendo un ulteriore livello di sicurezza.

Uno dei principali vantaggi dei token OAuth JWT è la loro flessibilità. Possono essere utilizzati per vari tipi di applicazioni, tra cui app web e mobili, soluzioni di single sign-on e altro ancora. Ad esempio, le principali piattaforme di social media come Facebook, Twitter e LinkedIn utilizzano i token OAuth JWT per autenticare gli utenti e consentire alle applicazioni di terze parti di accedere ai dati degli utenti in modo sicuro.

Pro:

  • Sicurezza avanzata: I token OAuth JWT offrono un livello di sicurezza più elevato. Sono firmati digitalmente e possono essere crittografati, riducendo il rischio di accesso non autorizzato e manomissioni dei dati.
  • Identità utente e controllo degli accessi: I token JWT possono trasportare informazioni sull'identità dell'utente e includere affermazioni che specificano quali azioni o risorse un utente è autorizzato ad accedere.
  • Controllo degli accessi fine-grained: I token JWT possono essere utilizzati per implementare un controllo degli accessi fine-grained. Ad esempio, puoi specificare quali risorse un utente può accedere e quali azioni possono eseguire su quelle risorse.
  • Scadenza del token: I token OAuth JWT possono essere impostati per scadere dopo un certo periodo di tempo, riducendo il rischio di abuso.

Contro:

  • Complessità: I token OAuth JWT sono più complessi delle chiavi API e dell'autenticazione di base. Richiedono passaggi aggiuntivi per essere configurati e utilizzati.
  • Gestione dei token: I token OAuth JWT devono essere gestiti e revocati se necessario. Questo può essere una sfida per applicazioni su larga scala con molti utenti e client.
  • Consumo di risorse: La generazione e la validazione dei token possono avere un sovraccarico di prestazioni, il che potrebbe essere una preoccupazione in scenari ad alto traffico.

Protezione API di Logto

La scelta del metodo di autenticazione dipende dai requisiti specifici e dalle considerazioni sulla sicurezza della tua applicazione. Le chiavi API sono semplici ma meno sicure, l'autenticazione di base offre più sicurezza ma manca di funzionalità di identità utente, mentre i token OAuth JWT forniscono una robusta sicurezza e capacità di identità utente ma aumentano la complessità nell'implementazione e nella gestione.

Logto fornisce un modo semplice e sicuro per proteggere la tua API utilizzando i token OAuth JWT. Supporta entrambi gli standard OAuth 2.0 e OpenID Connect (OIDC), permettendoti di scegliere il metodo di autenticazione che meglio si adatta alle tue esigenze. Puoi utilizzare il flusso client_credentials per la comunicazione da macchina a macchina e il flusso authorization_code per le applicazioni web.

Comunicazione da macchina a macchina

Logto utilizza il flusso client_credentials per le applicazioni di tipo da macchina a macchina. Questo flusso è adatto per la comunicazione del server di backend, dove il client è un client confidenziale che può memorizzare in modo sicuro le credenziali del client. È anche noto come "OAuth a due gambe" perché non coinvolge un utente. Le credenziali del client vengono utilizzate direttamente come concessione di autorizzazione per ottenere un token di accesso.

Il flusso di integrazione è semplice e diretto:

  1. Crea una risorsa API in Logto Console.
  2. Crea un client da macchina a macchina in Logto Console.
  3. Invia una richiesta all'endpoint dei token di Logto per ottenere un token di accesso.
  1. Accedi alla risorsa protetta con il token di accesso.

Si prega di controllare la nostra documentazione di integrazione da macchina a macchina per maggiori dettagli.

Applicazioni web

Per i client pubblici come le applicazioni web, Logto utilizza il flusso authorization_code per autenticare gli utenti. Questo flusso è adatto per applicazioni web dove il client è un client pubblico che non può memorizzare in modo sicuro le credenziali del client. È anche noto come "OAuth a tre gambe" perché coinvolge un utente. L'utente viene reindirizzato al server di autorizzazione per autenticare e autorizzare il client. Il client quindi utilizza il codice di autorizzazione per ottenere un token di accesso.

Il flusso di integrazione è leggermente più complicato rispetto al flusso da macchina a macchina:

Si prega di consultare il nostro articolo Proteggi la tua API Express.js con JWT e Logto come esempio completo di come integrare Logto con React e accedere alle tue API del server Express utilizzando i token JWT.