Antipattern: impostare un periodo di scadenza lungo per i token OAuth

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

Apigee fornisce un insieme di strumenti e criteri che ti consentono di implementare l'autenticazione basata su token OAuth 2.0 per proteggere le tue API. OAuth2, descritto nella IETF RFC 6749, è lo standard aperto più ampiamente supportato per l'autenticazione e l'autorizzazione per le API. Stabilisce il token come credenziale in formato standard che le applicazioni client inviano alle implementazioni API. L'implementazione dell'API può verificare il token per determinare se il client è autorizzato ad accedere all'API.

Apigee consente agli sviluppatori di generare token di accesso e/o di aggiornamento implementando uno dei quattro tipi di concessione OAuth2: credenziali client, password, implicito e codice di autorizzazione, utilizzando il criterio OAuthv2. Inoltre, gli sviluppatori di API possono utilizzare Apigee per implementare concessioni personalizzate, incluse le concessioni che seguono il pattern di scambio di token, come descritto in IETF RFC 8693. Le applicazioni client utilizzano poi i token di accesso per utilizzare le API sicure. Ogni token di accesso ha un proprio tempo di scadenza, che può essere impostato nel criterio OAuth v2.

Apigee può facoltativamente generare e restituire un token di aggiornamento insieme al token di accesso con alcuni dei tipi di concessione. Un client utilizza un token di aggiornamento per ottenere un nuovo token di accesso dopo che il token di accesso originale è stato revocato o è scaduto. Il periodo di scadenza del token di aggiornamento può essere impostato anche nella policy OAuthv2.

Antipattern

L'impostazione di un periodo di scadenza lungo per un token di accesso o un token di aggiornamento nella policy OAuthv2 comporta un'ampia finestra di vulnerabilità in caso di perdita del token, il che rappresenta un rischio per la sicurezza. Inoltre, può portare a un accumulo di token OAuth nell'archivio permanente, il che può comportare un calo delle prestazioni nel tempo.

Esempio 1

La seguente policy OAuthV2 di esempio mostra un lungo periodo di scadenza di 10 giorni per i token di accesso:

<OAuthV2 name="OAuth-GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>864000000</ExpiresIn> <!-- 10 days -->
    <RefreshTokenExpiresIn>864000000</RefreshTokenExpiresIn> <!-- 10 days -->
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Nell'esempio riportato sopra:

  • La durata del token di accesso è impostata su 10 giorni.
  • Anche la durata del token di aggiornamento è impostata su 10 giorni.

Impatto

I token di accesso di lunga durata rappresentano un rischio per la sicurezza. In caso di perdita o compromissione del token, un token di breve durata scadrà naturalmente e diventerà inutile, mentre un token di lunga durata continuerà a concedere l'accesso all'API per un periodo di tempo potenzialmente esteso, aumentando la finestra di vulnerabilità.

Un token di accesso deve avere una durata breve, probabilmente di circa 30 minuti o meno, e questa durata deve essere notevolmente inferiore a quella del token di aggiornamento.

Esempio 2

La seguente policy OAuthV2 di esempio mostra un lungo periodo di scadenza di 200 giorni per i token di aggiornamento:

<OAuthV2 name="OAuth-GenerateAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
  <RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
  <SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
</OAuthV2>

Nell'esempio riportato sopra:

  • Il token di accesso è impostato con un periodo di scadenza ragionevole e breve di 30 minuti.
  • Il token di aggiornamento è impostato con un tempo di scadenza molto lungo di 200 giorni.
  • Se il traffico verso questa API è di 10 richieste al secondo, può generare fino a 864.000 token al giorno.
  • I token di aggiornamento scadono dopo 200 giorni e si accumulano nel datastore per l'intera durata.

Impatto

La durata prolungata del token di aggiornamento può potenzialmente portare a un peggioramento delle prestazioni nel tempo, in quanto un numero elevato di token si accumulerà nell&#39datastorei. In Apigee hybrid, l'accumulo eccessivo di token può anche contribuire all'esaurimento dello spazio su disco nel livello di persistenza.

Best practice

Utilizza un tempo di scadenza per i token di accesso e aggiornamento OAuth appropriato per i tuoi requisiti di sicurezza specifici, per ridurre la finestra di vulnerabilità per i token compromessi ed evitare l'accumulo di token nel datastore. Un buon punto di partenza per la durata del token di accesso è 30 minuti; per la durata del token di aggiornamento, inizia con 24 ore.

Imposta il tempo di scadenza dei token di aggiornamento in modo che sia valido per un multiplo della durata dei token di accesso. Ad esempio, se imposti 30 minuti per il token di accesso, imposta la durata del token di aggiornamento su 24 ore, 7 giorni o qualsiasi altro valore appropriato per l'esperienza utente che devi supportare.

Per approfondire