Revoca e approvazione dei token

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Informazioni sulla revoca dei token

In alcuni casi, le app devono revocare o invalidare esplicitamente i singoli token. Un caso tipico potrebbe verificarsi quando un utente si disconnette da un'app abilitata per OAuth. Un token revocato non sarà più utile per l'autorizzazione. Dopo la revoca di un token, se un'app lo presenta a un proxy API, un criterio OAuthV2 con un'operazione di VerificationAccessToken rifiuterà il token.

Lo standard per la revoca dei token è definito dallo standard IETF RFC 7009, la specifica relativa alla revoca di token OAuth 2.0.

In alternativa alla revoca di token specifici, puoi revocare gli ID client o intere app sviluppatore. Per maggiori dettagli, consulta Revoca e approvazione delle chiavi delle app per sviluppatori. Rispetto alla revoca di un singolo token, la revoca di un ID client o di un'app per sviluppatori ha un impatto più ampio. Quando revochi un ID client o un'app sviluppatore, Apigee rifiuterà tutti i token associati all'ID client o all'app sviluppatore in questione e non emetterà più nuovi token per l'ID client o l'app sviluppatore in questione.

Dopo la revoca di un token, ovvero un token di accesso o un token di aggiornamento, puoi facoltativamente riapprovarlo in qualsiasi momento prima che scada. Dopo aver riapprovato il token, il criterio OAuthV2 di Apigee accetterà di nuovo quel token per l'autorizzazione fino alla scadenza del token. La scadenza del token è indipendente dallo stato approvato o revocato. Il criterio OAuthV2 di Apigee con un'operazione di ConvalidaAccessToken accetterà un token di accesso solo se tale token è approvato (o non revocato) e non è scaduto. Allo stesso modo, il criterio OAuthV2 di Apigee con un'operazione di refreshAccessToken accetterà un token di aggiornamento solo se tale token è approvato (o non revocato) e non è scaduto.

Per revocare i token, puoi utilizzare due criteri:

Il criterio OAuthV2 ha la possibilità di revocare e anche reintegrare un singolo token alla volta. Il criterio RevocaOAuthV2 è più flessibile perché può revocare più token contemporaneamente, per ID app o ID utente finale. Il resto della pagina descrive l'utilizzo del criterio OAuthV2 per revocare un token o reintegrare un token revocato in precedenza.

Revoca dei token di accesso e di aggiornamento

Ecco un esempio di configurazione per il criterio OAuthV2 che utilizza l'operazione InvalidateToken. In questo caso, poiché l'attributo cascade nell'elemento Token è true, Apigee revoca sia il token di accesso che il token di aggiornamento associato.

  <OAuthV2 name="InvalidateToken">
    <Operation>InvalidateToken</Operation>
    <Tokens>
      <Token type="accesstoken" cascade="true">request.queryparam.token</Token>
    </Tokens>
  </OAuthV2>
  

Per saperne di più sul funzionamento del flag Cascade, consulta la sezione seguente sugli Attributi per l'elemento token.

Elemento <Tokens>/<Token>

Identifica la variabile di flusso che specifica il token da revocare. Se gli sviluppatori dovrebbero inviare una richiesta di revoca utilizzando un parametro di ricerca denominato access_token, ad esempio, la variabile di flusso corretta sarà request.queryparam.access_token. Ad esempio, per richiedere il token in un'intestazione HTTP, imposta questo valore su request.header.access_token.

Non è possibile revocare un token di accesso in formato JWT. Inoltre, non è possibile utilizzare il criterio OAuthV2 per revocare un token di aggiornamento associato a un token di accesso in formato JWT. Si verifica un errore di runtime se la variabile di contesto specificata qui fa riferimento a un token di accesso JWT o a un token di aggiornamento associato a un token di accesso JWT. Puoi revocare i token di aggiornamento associati ai token di accesso JWT utilizzando il criterio RevocaOAuthV2.

Attributi

  • type (obbligatorio, stringa): il tipo di token identificato dalla variabile specificata. I valori supportati sono accesstoken e refreshtoken:
    • Per revocare un token di accesso, specifica il tipo di token di accesso.
    • Per revocare sia il token di accesso che il token di aggiornamento, specifica il tipo refreshtoken. Quando vede il tipo refreshtoken, Apigee presuppone che il token sia un token di aggiornamento. Se viene trovato questo token di aggiornamento, significa che viene revocato. Se il token di aggiornamento non viene trovato, Apigee controlla se si tratta di un token di accesso. Se il token di accesso esiste, viene revocato.

      Nota:se passi un token già invalidato a un criterio InvalidateToken, il criterio non restituisce un errore, anche se potresti aspettarti. Questa operazione non ha alcun effetto.
  • cascade (facoltativo, booleano, predefinito: true) L'utilizzo principale di questo attributo è revocare un token di aggiornamento senza revocare il token di accesso associato. Considera questi casi:
    • Revocare solo un token di aggiornamento e non revocare il token di accesso associato. Per farlo, imposta il tipo <Token> su refreshtoken e imposta Cascade su false.
    • Revoca sia il token di accesso sia il token di aggiornamento. A questo scopo, imposta il tipo <Token> su accesstoken. Il valore di cascade può essere true (valore predefinito) o false. Se lo imposti su true, sia il token di accesso sia il token di aggiornamento vengono revocati. Se lo imposti su false, il token di accesso viene revocato e il token di aggiornamento è inutilizzabile. Per ulteriori spiegazioni, consulta la nota riportata di seguito.
    • Revocare un token di accesso e non revocare il token di aggiornamento associato. Non supportata. Per ulteriori informazioni, consulta la nota riportata di seguito.

Nota: per motivi di sicurezza, se revochi un token di accesso, verrà revocato anche il token di aggiornamento associato. Pertanto, non puoi utilizzare l'attributo cascade per revocare solo un token di accesso. Ad esempio, se imposti il tipo <Token> su accesstoken e imposti cascade=false, il token di accesso viene revocato (come previsto); tuttavia, il token di aggiornamento associato è inutilizzabile. Non può essere utilizzato per aggiornare il token di accesso revocato. Il caso d'uso principale dell'attributo cascade è quando vuoi solo revocare un token di aggiornamento. In tal caso, imposta il tipo <Token> su refreshtoken e imposta cascade=false. Il token di aggiornamento verrà revocato, ma il token di accesso associato rimarrà valido (fino a quando non scade o viene revocato). Per ulteriori informazioni, consulta questa discussione del forum della community.

Approvazione dei token di accesso e di aggiornamento

Utilizza l'operazione ConvalidaToken per "riapprovare" un token revocato. In altre parole, quando applichi questa operazione, lo stato del token di accesso o di aggiornamento scelto come target viene modificato da "revocato" ad "approvato". Puoi convalidare qualsiasi token revocato che non sia già scaduto.

<OAuthV2 name="ValidateToken">
  <Operation>ValidateToken</Operation>
  <Tokens>
    <Token type="refreshtoken" cascade="true">flow.variable</Token>
  </Tokens>
</OAuthV2>

Elemento <Tokens>/<Token>

Identifica la variabile di flusso che specifica il token da convalidare. Se gli sviluppatori devono inviare una richiesta di convalida utilizzando un parametro di query denominato access_token, ad esempio, la variabile di flusso corretta sarà request.queryparam.access_token. Ad esempio, per richiedere il token in un'intestazione HTTP, imposta questo valore su request.header.access_token.

Attributi

  • type (obbligatorio, stringa) Il tipo di token identificato dalla variabile specificata. I valori supportati sono accesstoken e refreshtoken.
  • cascade (facoltativo, booleano): per impostazione predefinita, questa opzione è impostata su true e determina la propagazione della convalida ai token associati. Quindi, se applicato a un token di aggiornamento, viene convalidato anche il token di accesso associato. Se applicato a un token di accesso, viene convalidato anche il relativo token di aggiornamento associato. Se lo imposti su false, viene convalidato solo il token di accesso o di aggiornamento specificato.