Revoca i token di accesso OAuth 2.0 in base a ID utente finale, ID app o entrambi

Questa pagina si applica a Apigee e Apigee ibridi.

Visualizza documentazione di Apigee Edge.

Puoi revocare i token di accesso OAuth 2.0 in base all'ID utente finale, all'ID app o a entrambi utilizzando la proprietà Criterio RevokeOAuthV2. Per utente finale si intende l'utente dell'app che chiama l'API.

Quando archiviare l'ID utente in un token di accesso

Gli ID utente non sono inclusi nei token di accesso per impostazione predefinita. A volte, è utile archiviare l'ID utente in un token di accesso. Ad esempio:

  • Una funzionalità del tuo sito web o della tua app che consente agli utenti di vedere di quali app di terze parti dispongono e per fornire un'opzione per revocare l'accesso a queste app.
  • Una funzionalità che consente a un utente autorizzato di revocare tutti i token di accesso associati a un per app per sviluppatori specifiche.

Informazioni sui token di accesso OAuth

Per impostazione predefinita, quando Apigee genera un token di accesso OAuth 2.0, il token ha il formato mostrato sotto:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

Tieni presente quanto segue:

  • Il campo application_name contiene l'UUID dell'app associata al token. Se attivi la revoca di token di accesso OAuth 2.0 in base all'ID app, questo è l'ID app che utilizzi.
  • Il campo access_token contiene il valore del token di accesso OAuth 2.0.
  • Il token di accesso OAuth predefinito non contiene un campo per l'ID utente finale.

Per revocare i token di accesso OAuth 2.0 in base all'ID utente finale, devi configurare il criterio OAuth 2.0 per includere l'ID utente nel token. Dopo aver configurato il criterio in modo da includere l'utente finale ID nel token, è incluso come campo app_enduser, come mostrato di seguito:

{
 "issued_at" : "1421847736581",
 "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
 "scope" : "READ",
 "app_enduser" : "6ZG094fgnjNf02EK",
 "status" : "approved",
 "api_product_list" : "[PremiumWeatherAPI]",
 "expires_in" : "3599", //--in seconds
 "developer.email" : "tesla@weathersample.com",
 "organization_id" : "0",
 "token_type" : "BearerToken",
 "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
 "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
 "organization_name" : "myorg",
 "refresh_token_expires_in" : "0", //--in seconds
 "refresh_count" : "0"
}

Configurazione dei criteri

Per revocare i token in base all'ID utente, devi prima configurare il criterio OAuth 2.0 per aggiungere l'ID utente all'accesso di accesso. Se includi gli ID utente finale nei token di accesso, potrai revocare i token in base all'ID utente finale.

Per configurare il criterio in modo da includere un ID utente finale in un token di accesso, devi specificare il parametro contenente l'ID utente finale. Utilizza il tag <AppEndUser> per specificare variabile:

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
  <DisplayName>OAuth 2.0.0 1</DisplayName>
  <ExternalAuthorization>false</ExternalAuthorization>
  <Operation>GenerateAccessToken</Operation>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
  <GrantType>request.queryparam.grant_type</GrantType>
  <AppEndUser>request.header.appuserID</AppEndUser>
  <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

Ecco un esempio di criterio RevokeOAuthV2 configurato per revocare l'accesso da EndUserId:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RevokeOAuthV2 continueOnError="false" enabled="true" name="GetOAuthV2Info-1">
    <DisplayName>Get OAuth v2.0 Info 1</DisplayName>
    <EndUserId ref="request.header.appuserID"></EndUserId>
    <Cascade>false</Cascade>
</RevokeOAuthV2>

Vedi anche Revoca il criterio OAuth V2.

Il seguente comando di esempio genera un token e passa l'ID utente nell'intestazione appuserID:

curl -H "appuserID:6ZG094fgnjNf02EK" \
-H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

Puoi trasmettere le informazioni nell'ambito di una richiesta in altri modi. Per Ad esempio, in alternativa, puoi:

  • Utilizza una variabile per il parametro del modulo: request.formparam.appuserID
  • Utilizza una variabile di flusso che fornisca l'ID utente finale