Criterio OAuthV2

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Cosa

OAuthV2 è un criterio sfaccettato per l'esecuzione di operazioni relative ai tipi di concessione OAuth 2.0. Si tratta del criterio principale utilizzato per configurare gli endpoint OAuth 2.0 su Apigee Edge.

Suggerimento:per scoprire di più su OAuth su Apigee Edge, consulta la home page di OAuth. Fornisce link a risorse, esempi, video e altro ancora. Consulta l'esempio di OAuth avanzato su GitHub per una dimostrazione efficace di come questo criterio viene utilizzato in un'applicazione funzionante.

Samples

VerifyAccessToken

VerifyAccessToken

Questa configurazione del criterio OAuthV2 (con l'operazione VerifyAccessToken) verifica che un token di accesso inviato ad Apigee Edge sia valido. Quando viene attivata questa operazione di criterio, Edge cerca un token di accesso valido nella richiesta. Se il token di accesso è valido, la richiesta può procedere. Se non è valido, l'elaborazione viene interrotta e viene restituito un errore nella risposta.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

Nota: sono supportati solo i token bearer OAuth 2.0. I token Message Authentication Code (MAC) non sono supportati.

Ad esempio:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

Per impostazione predefinita, Edge accetta i token di accesso nell'intestazione Authorization con il prefisso Bearer. Puoi modificare questo valore predefinito con l'elemento <AccessToken>.

GenerateAccessToken

Generazione di token di accesso

Per esempi che mostrano come richiedere token di accesso per ciascuno dei tipi di concessione supportati, consulta Richiesta di token di accesso e codici di autorizzazione. L'argomento include esempi di queste operazioni:

GenerateAuthorizationCode

Generare il codice di autorizzazione

Per esempi su come richiedere i codici di autorizzazione, consulta Richiedere un codice di autorizzazione.

RefreshAccessToken

Aggiornare un token di accesso

Per esempi che mostrano come richiedere token di accesso utilizzando un token di aggiornamento, consulta Aggiornare un token di accesso.

Token del flusso di risposta

Genera un token di accesso nel flusso di risposta

A volte potrebbe essere necessario generare un token di accesso nel flusso di risposta. Ad esempio, puoi farlo in risposta a una convalida personalizzata eseguita in un servizio di backend. In questo esempio, il caso d'uso richiede sia un token di accesso sia un token di aggiornamento, escludendo il tipo di approvazione implicita. In questo caso, utilizzeremo il tipo di autorizzazione con password per generare il token. Come vedrai, il trucco per far funzionare questa operazione è passare un'intestazione di richiesta di autorizzazione con un criterio JavaScript.

Innanzitutto, diamo un'occhiata al criterio di esempio:

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

Se inserisci questo criterio nel flusso di risposta, l'operazione non andrà a buon fine con un errore 401 Non autorizzato anche se i parametri di accesso corretti sono specificati nel criterio. Per risolvere il problema, devi impostare un'intestazione di richiesta di autorizzazione.

L'intestazione Authorization deve contenere uno schema di accesso di base con client_id:client_secret con codifica Base64.

Puoi aggiungere questa intestazione con un criterio JavaScript posizionato appena prima del criterio OAuthV2, come mostrato di seguito. Le variabili "local_clientid" e "local_secret" devono essere impostate in precedenza e disponibili nel flusso:

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

Vedi anche "Codificare le credenziali di autenticazione di base".

Riferimento elemento

Il riferimento ai criteri descrive gli elementi e gli attributi dei criteri OAuthV2.

Il criterio di esempio mostrato di seguito è una delle tante configurazioni possibili. Questo esempio mostra un criterio OAuthV2 configurato per l'operazione GenerateAccessToken. Include elementi obbligatori e facoltativi. Per maggiori dettagli, consulta le descrizioni degli elementi in questa sezione.

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

Attributi <OAuthV2>

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

La tabella seguente descrive gli attributi comuni a tutti gli elementi principali del criterio:

Attributo Descrizione Predefinito Presenza
name

Il nome interno del criterio. Il valore dell'attributo name può Deve contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, puoi utilizzare l'elemento <DisplayName> per etichettare il criterio in l'editor proxy della UI di gestione con un nome diverso in linguaggio naturale.

N/D Obbligatorio
continueOnError

Imposta il valore su false per restituire un errore quando un criterio non viene eseguito. Si tratta di un comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche dopo un criterio non riesce.

falso Facoltativo
enabled

Imposta il valore su true per applicare il criterio.

Imposta false per disattivare il criterio. Il criterio non verrà applicata anche se rimane collegata a un flusso.

true Facoltativo
async

Questo attributo è obsoleto.

falso Deprecato

&lt;DisplayName&gt; elemento

Da utilizzare in aggiunta all'attributo name per etichettare il criterio in editor proxy della UI di gestione con un nome diverso e in linguaggio naturale.

<DisplayName>Policy Display Name</DisplayName>
Predefinito

N/D

Se ometti questo elemento, il valore dell'attributo name del criterio è in uso.

Presenza Facoltativo
Tipo Stringa

Elemento <AccessToken>

<AccessToken>request.header.access_token</AccessToken>

Per impostazione predefinita, VerifyAccessToken si aspetta che il token di accesso venga inviato nell'intestazione Authorization. Puoi modificare il valore predefinito utilizzando questo elemento. Ad esempio, request.queryparam.access_token indica che il token di accesso deve essere presente come un parametro di query denominato access_token.

Esempio in cui viene specificato <AccessToken>request.header.access_token</AccessToken>:

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
Esempio in cui è specificato <AccessToken>request.queryparam.access_token</AccessToken>:

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

Valore predefinito:

N/D

Presenza:

Facoltativo

Tipo: Stringa
Utilizzato con le operazioni:
  • VerifyAccessToken

Elemento <AccessTokenPrefix>

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

Per impostazione predefinita, VerifyAccessToken si aspetta che il token di accesso venga inviato in un'intestazione Authorization come token Bearer. Ad esempio:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

Al momento, Bearer è l'unico prefisso supportato.

Valore predefinito:

Canale di trasporto

Presenza:

Facoltativo

Tipo: Stringa
Valori validi:

Canale di trasporto

Utilizzato con le operazioni:
  • VerifyAccessToken

Elemento <AppEndUser>

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

Nei casi in cui l'ID utente finale dell'app debba essere inviato al server di autorizzazione, questo elemento consente di specificare dove Edge deve cercare l'ID utente finale. Ad esempio, potrebbe essere inviato come parametro di query o in un'intestazione HTTP.

Ad esempio, request.queryparam.app_enduser indica che AppEndUser deve essere presente come parametro di query, ad esempio ?app_enduser=ntesla@theramin.com. Ad esempio, per richiedere AppEndUser in un'intestazione HTTP, imposta questo valore su request.header.app_enduser.

Se fornisci questa impostazione, puoi includere un ID utente finale dell'app nel token di accesso. Questa funzionalità è utile se vuoi poter recuperare o revocare i token di accesso OAuth 2.0 in base all'ID utente finale. Per ulteriori informazioni, consulta Attivare il recupero e la revoca dei token di accesso OAuth 2.0 in base all'ID utente finale, all'ID app o a entrambi.

Valore predefinito:

N/D

Presenza:

Facoltativo

Tipo: Stringa
Valori validi:

Qualsiasi variabile di flusso accessibile al criterio in fase di esecuzione.

Utilizzato con i tipi di concessione:
  • authorization_code
  • implicito
  • password
  • client_credentials

<Attributes/Attribute>

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

Utilizza questo elemento per aggiungere attributi personalizzati a un token di accesso o a un codice di autorizzazione. Ad esempio, potresti voler incorporare un ID utente o un identificatore di sessione in un token di accesso che possa essere estratto e verificato in fase di runtime.

Questo elemento consente di specificare un valore in una variabile di flusso o da una stringa letterale. Se specifichi sia una variabile che una stringa, viene utilizzato il valore specificato nella variabile del flusso. Se la variabile non può essere risolta, la stringa è predefinita.

Per ulteriori informazioni sull'utilizzo di questo elemento, consulta Personalizzare i token e i codici di autorizzazione.

Mostrare o nascondere gli attributi personalizzati nella risposta

Ricorda che se imposti l'elemento GenerateResponse di questo criterio su true, la rappresentazione JSON completa del token viene restituita nella risposta, inclusi eventuali attributi personalizzati impostati. In alcuni casi, potresti voler nascondere alcuni o tutti gli attributi personalizzati nella risposta in modo che non siano visibili alle app client.

Per impostazione predefinita, gli attributi personalizzati vengono visualizzati nella risposta. Se vuoi nasconderli, puoi impostare il parametro display su false. Ad esempio:

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

Il valore dell'attributo display non viene conservato. Supponiamo che tu generi un token di accesso con attributi personalizzati che vuoi nascondere nella risposta generata. L'impostazione display=false consente di raggiungere questo obiettivo. Tuttavia, se in un secondo momento viene generato un nuovo token di accesso utilizzando un token di aggiornamento, gli attributi personalizzati originali del token di accesso verranno visualizzati nella risposta del token di aggiornamento. Questo accade perché Edge non ricorda che l'attributo display è stato impostato originariamente su false nel criterio di generazione del token di accesso. L'attributo personalizzato fa semplicemente parte dei metadati del token di accesso.

Il comportamento sarà lo stesso se aggiungi attributi personalizzati a un codice di autorizzazione. Quando viene generato un token di accesso utilizzando questo codice, questi attributi personalizzati vengono visualizzati nella risposta del token di accesso. Anche in questo caso, questo potrebbe non essere il comportamento che intendi.

Per nascondere gli attributi personalizzati in questi casi, hai a disposizione le seguenti opzioni:

  • Reimposta esplicitamente gli attributi personalizzati nel criterio del token di aggiornamento e imposta la loro visualizzazione su false. In questo caso, potrebbe essere necessario recuperare i valori personalizzati originali dall'attributo access token originale utilizzando il criterio GetOAuthV2Info.
  • Utilizza un criterio JavaScript di post-elaborazione per estrarre manualmente gli attributi personalizzati che non vuoi visualizzare nella risposta.

Consulta anche Personalizzare token e codici di autorizzazione.

Valore predefinito:

N/A

Presenza:

Facoltativo

Valori validi:
  • name - Il nome dell'attributo
  • ref: il valore dell'attributo. Può provenire da una variabile di flusso.
  • display - (Facoltativo) Consente di specificare se gli attributi personalizzati devono essere visualizzati o meno nella risposta. Se true, gli attributi personalizzati vengono visualizzati nella risposta (se è attivato anche GenerateResponse). Se false, gli attributi personalizzati non sono inclusi nella risposta. Il valore predefinito è true. Consulta Visualizzare o nascondere gli attributi personalizzati nella risposta.
Utilizzato con i tipi di concessione:
  • authorization_code
  • implicito
  • password
  • client_credentials
  • refresh_token
  • Può essere utilizzato anche con l'operazione GenerateAuthorizationCode.

Elemento <ClientId>

<ClientId>request.formparam.client_id</ClientId>

In diversi casi, l'app client deve inviare l'ID client al server di autorizzazione. Questo elemento specifica che Apigee deve cercare l'ID cliente nella variabile di flusso request.formparam.client_id. L'impostazione di ClientId su qualsiasi altra variabile non è supportata. Vedi anche Richiedere token di accesso e codici di autorizzazione.

Valore predefinito:

request.formparam.client_id (un x-www-form-urlcodificato e specificato nel corpo della richiesta)

Presenza:

Facoltativo

Tipo: Stringa
Valori validi: La variabile di flusso: request.formparam.client_id
Utilizzato con i tipi di concessione:
  • authorization_code
  • password
  • implicito
  • client_credentials

Può essere utilizzato anche con l'operazione GenerateAuthorizationCode.

Elemento <Code>

<Code>request.queryparam.code</Code>

Nel flusso del tipo di concessione dell'autorizzazione, il client deve inviare un codice di autorizzazione al server di autorizzazione (Apigee Edge). Questo elemento consente di specificare dove Edge deve cercare il codice di autorizzazione. Ad esempio, può essere inviato come parametro di query, intestazione HTTP o parametro del modulo (valore predefinito).

La variabile request.queryparam.auth_code indica che il codice di autorizzazione deve essere presente come parametro di query, ad esempio ?auth_code=AfGlvs9. Ad esempio, per richiedere il codice di autorizzazione in un'intestazione HTTP, imposta questo valore su request.header.auth_code. Vedi anche Richiedere token di accesso e codici di autorizzazione.

Predefinita:

request.formparam.code (un x-www-form-urlcodificato e specificato nel corpo della richiesta)

Presenza:

facoltativo

Tipo: Stringa
Valori validi: Qualsiasi variabile di flusso accessibile al criterio in fase di runtime
Utilizzato con i tipi di concessione: authorization_code

Elemento<ExpiresIn>

<ExpiresIn>10000</ExpiresIn> 

Applica la data e l'ora di scadenza dei token di accesso e dei codici di autorizzazione in millisecondi. Per i token di aggiornamento, utilizza <RefreshTokenExpiresIn>. Il valore dell'ora di scadenza è un valore generato dal sistema più il valore <ExpiresIn>. Se <ExpiresIn> è impostato su -1, il token o il codice scade in base alla scadenza massima del token di accesso OAuth. Se <ExpiresIn> non è specificato, il sistema applica un valore predefinito configurato a livello di sistema.

La data e l'ora di scadenza possono essere impostate anche in fase di esecuzione utilizzando un valore predefinito hardcoded o facendo riferimento a una variabile di flusso. Ad esempio, puoi memorizzare un valore di scadenza del token in una mappa di valori chiave, recuperarlo, assegnarlo a una variabile e farvi riferimento nel criterio. Ad esempio, kvm.oauth.expires_in.

Con Apigee Edge for Public Cloud, Edge memorizza nella cache le seguenti entità per un minimo di 180 secondi dopo l'accesso.

  • Token di accesso OAuth. Ciò significa che un token revocato potrebbe comunque essere valido per un massimo di tre minuti, fino alla scadenza del limite della cache.
  • Entità Key Management Service (KMS) (app, sviluppatori, prodotti API).
  • Attributi personalizzati sui token OAuth e sulle entità KMS.

La stanza seguente specifica una variabile di flusso e anche un valore predefinito. Tieni presente che il valore della variabile di flusso ha la precedenza sul valore predefinito specificato.

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge non supporta un modo per forzare la scadenza di un token dopo la sua creazione. Se devi forzare la scadenza del token (ad esempio in base a una condizione), una possibile soluzione è stata descritta in questo post della community di Apigee.

Per impostazione predefinita, i token di accesso scaduti vengono eliminati automaticamente dal sistema Apigee Edge 3 giorni dopo la scadenza. Vedi anche Eliminazione dei token di accesso

Private Cloud: per un'installazione Edge per il cloud privato, il valore predefinito è impostato dalla proprietà conf_keymanagement_oauth_auth_code_expiry_time_in_millis. Per impostare questa proprietà:

  1. Apri il file message-processor.properties in un editor. Se il file non esiste, creane uno:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Imposta la proprietà come preferisci:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. Assicurati che il file delle proprietà sia di proprietà dell'utente "apigee":
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Riavvia il processore di messaggi.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Valore predefinito:

Se non viene specificato, il sistema applica un valore predefinito configurato a livello di sistema.

Presenza:

Facoltativo

Tipo: Numero intero
Valori validi:
Utilizzati con i tipi di autorizzazione:
  • authorization_code
  • implicito
  • password
  • client_credentials
  • refresh_token

Utilizzato anche con l'operazione GenerateAuthorizationCode.

Elemento <ExternalAccessToken>

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

Indica ad Apigee Edge dove trovare un token di accesso esterno (un token di accesso non generato da Apigee Edge).

La variabile request.queryparam.external_access_token indica che il token di accesso esterno deve essere presente come parametro di query, ad esempio ?external_access_token=12345678. Ad esempio, per richiedere il token di accesso esterno in un'intestazione HTTP, imposta questo valore su request.header.external_access_token. Consulta anche l'articolo sull'utilizzo di token OAuth di terze parti.

Elemento <ExternalAuthorization>

<ExternalAuthorization>true</ExternalAuthorization>

Se questo elemento è falso o non è presente, Edge convalida client_id e client_secret normalmente rispetto allo store di autorizzazione di Apigee Edge. Utilizza questo elemento quando vuoi utilizzare token OAuth di terze parti. Per informazioni dettagliate sull'utilizzo di questo elemento, consulta Utilizzare i token OAuth di terze parti.

Valore predefinito:

falso

Presenza:

Facoltativo

Tipo: Booleano
Valori validi: true o false
Utilizzato con i tipi di concessione:
  • authorization_code
  • password
  • client_credentials

Elemento <ExternalAuthorizationCode>

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

Indica ad Apigee Edge dove trovare un codice di autenticazione esterno (un codice di autenticazione non generato da Apigee Edge).

La variabile request.queryparam.external_auth_code indica che il codice di autorizzazione esterno deve essere presente come parametro di query, ad esempio ?external_auth_code=12345678. Ad esempio, per richiedere il codice di autorizzazione esterno in un'intestazione HTTP, imposta questo valore su request.header.external_auth_code. Consulta anche Utilizzare i token OAuth di terze parti.

Elemento <ExternalRefreshToken>

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

Indica ad Apigee Edge dove trovare un token di aggiornamento esterno (un token di aggiornamento non generato da Apigee Edge).

La variabile request.queryparam.external_refresh_token indica che il token di aggiornamento esterno deve essere presente come parametro di query, ad esempio ?external_refresh_token=12345678. Ad esempio, per richiedere il token di aggiornamento esterno in un'intestazione HTTP, imposta questo valore su request.header.external_refresh_token. Consulta anche Utilizzare i token OAuth di terze parti.

Elemento <GenerateResponse>

<GenerateResponse enabled='true'/>

Se viene impostato su true, il criterio genera e restituisce una risposta. Ad esempio, per CreateAccessToken, la risposta potrebbe essere simile a:

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Se false, non viene inviata alcuna risposta. Viene invece compilato un insieme di variabili di flusso con valori correlati alla funzione del criterio. Ad esempio, una variabile di flusso denominata oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code viene compilata con il codice di autenticazione appena creato. Tieni presente che il valore di expires_in è espresso in secondi nella risposta.

Valore predefinito:

falso

Presenza:

Facoltativo

Tipo: stringa
Valori validi: true o false
Utilizzato con i tipi di concessione:
  • implicito
  • password
  • client_credentials
  • refresh_token
  • Può essere utilizzato anche con l'operazione GenerateAuthorizationCode.

Elemento <GenerateErrorResponse>

<GenerateErrorResponse enabled='true'/>

Se viene impostato su true, il criterio genera e restituisce una risposta se l'attributo ContinueOnError è impostato su true. Se false (il valore predefinito), non viene inviata alcuna risposta. Un insieme di variabili di flusso viene invece compilato con i valori correlati alla funzione del criterio.

Predefinita:

falso

Presenza:

Facoltativo

Tipo: stringa
Valori validi: true o false
Utilizzato con i tipi di concessione:
  • implicito
  • password
  • client_credentials
  • refresh_token
  • Può essere utilizzato anche con l'operazione GenerateAuthorizationCode.

<GrantType>

<GrantType>request.queryparam.grant_type</GrantType>

Indica al criterio dove trovare il parametro del tipo di concessione passato in una richiesta. In base alla specifica OAuth 2.0, il tipo di concessione deve essere fornito con le richieste di token di accesso e codici di autorizzazione. La variabile può essere un'intestazione, un parametro di query o un parametro di modulo (valore predefinito).

Ad esempio, request.queryparam.grant_type indica che la password deve essere presente come parametro di query, ad esempio ?grant_type=password. Ad esempio, per richiedere il tipo di concessione in un'intestazione HTTP, imposta questo valore su request.header.grant_type. Vedi anche Richiesta di token di accesso e codici di autorizzazione.

Predefinita:

request.formparam.grant_type (un valore x-www-form-urlencoded specificato nel corpo della richiesta)

Presenza:

Facoltativo

Tipo: stringa
Valori validi: Una variabile, come spiegato sopra.
Utilizzato con i tipi di concessione:
  • authorization_code
  • password
  • implicito
  • client_credentials
  • refresh_token

Elemento <Operation>

<Operation>GenerateAuthorizationCode</Operation>

L'operazione OAuth 2.0 eseguita dal criterio.

Valore predefinito:

Se <Operation> non è specificato, Edge esamina l'elenco di <SupportedGrantTypes>. Solo le operazioni su questi tipi di concessioni avranno esito positivo. In altre parole, puoi omettere <Operation> se specifichi un <GrantType> nell'elenco <SupportedGrantTypes>. Se non vengono specificati <Operation><SupportedGrantTypes>, il tipo di autorizzazione predefinito è authorization_code. In altre parole, le richieste di tipo di concessione authorization_code andranno a buon fine, ma tutte le altre non andranno a buon fine.

Presenza:

Facoltativo

Tipo: Stringa
Valori validi:

Elemento <PassWord>

<PassWord>request.queryparam.password</PassWord>

Questo elemento viene utilizzato solo con il tipo di autorizzazione con password. Con il tipo di concessione della password, le credenziali utente (password e nome utente) devono essere rese disponibili per il criterio OAuthV2. Gli elementi <PassWord> e <UserName> vengono utilizzati per specificare le variabili in cui Edge può trovare questi valori. Se questi elementi non sono specificati, il criterio si aspetta di trovare i valori (per impostazione predefinita) nei parametri del modulo denominati username e password. Se i valori non vengono trovati, il criterio genera un errore. Puoi utilizzare gli elementi <PassWord> e <UserName> per fare riferimento a qualsiasi variabile di flusso contenente le credenziali.

Ad esempio, puoi passare la password in una richiesta di token utilizzando un parametro di query e impostare l'elemento come segue: <PassWord>request.queryparam.password</PassWord>. Per richiedere la password in un'intestazione HTTP, imposta questo valore su request.header.password.

Il criterio OAuthV2 non esegue altre operazioni con questi valori delle credenziali; Edge si limita a verificare che siano presenti. Spetta allo sviluppatore dell'API recuperare la richiesta di valori e inviarli a un provider di identità prima dell'esecuzione del criterio di generazione del token.

Vedi anche Richiedere token di accesso e codici di autorizzazione.

Valore predefinito:

request.formparam.password (un valore x-www-form-urlencoded specificato nel corpo della richiesta)

Presenza:

Facoltativo

Tipo: Stringa
Valori validi: Qualsiasi variabile di flusso disponibile per il criterio in fase di runtime.
Utilizzato con i tipi di concessione: password

Elemento <RedirectUri>

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

Specifica dove Edge deve cercare il parametro redirect_uri nella richiesta.

Informazioni sugli URI di reindirizzamento

Gli URI di reindirizzamento vengono utilizzati con il codice di autorizzazione e i tipi di autorizzazione impliciti. L'URI di reindirizzamento indica al server di autorizzazione (Edge) dove inviare un codice di autorizzazione (per il tipo di autorizzazione del codice di autorizzazione) o un token di accesso (per il tipo di autorizzazione implicita). È importante capire quando questo parametro è obbligatorio, quando è facoltativo e come viene utilizzato:

  • (obbligatorio) Se un URL di callback è registrato nell'app per sviluppatori associata alle chiavi client della richiesta e se redirect_uri è presente nella richiesta, i due elementi devono corrispondere esattamente. Se non corrispondono, viene restituito un errore. Per informazioni sulla registrazione delle app per sviluppatori su Edge e sulla specifica di un URL di callback, consulta Registrare le app e gestire le chiavi API.

  • (Facoltativo) Se è registrato un URL di callback e redirect_uri non è presente nella richiesta, Edge reindirizza all'URL di callback registrato.
  • (obbligatorio) Se non è registrato un URL di callback, redirect_uri è obbligatorio. Tieni presente che in questo caso Edge accetterà QUALSIASI URL. Questo caso può presentare un problema di sicurezza e pertanto deve essere utilizzato solo con app client attendibili. Se le app client non sono attendibili, la best practice è richiedere sempre la registrazione di un URL di callback.

Puoi inviare questo parametro in un parametro di query o in un'intestazione. La variabile request.queryparam.redirect_uri indica che RedirectUri deve essere presente come parametro di query, ad esempio ?redirect_uri=login.myapp.com. Per richiedere RedirectUri in un'intestazione HTTP, ad esempio, imposta questo valore su request.header.redirect_uri. Consulta anche Richiedere token di accesso e codici di autorizzazione.

Predefinita:

request.formparam.redirect_uri (un valore x-www-form-urlencoded specificato nel corpo della richiesta)

Presenza:

Facoltativo

Tipo: Stringa
Valori validi: Qualsiasi variabile di flusso accessibile nel criterio in fase di esecuzione
Utilizzato con i tipi di concessione:
  • authorization_code
  • implicito

Utilizzato anche con l'operazione GenerateAuthorizationCode.

Elemento <RefreshToken>

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

Quando richiedi un token di accesso utilizzando un token di aggiornamento, devi fornire il token di aggiornamento nella richiesta. Questo elemento consente di specificare dove Edge deve cercare il token di aggiornamento. Ad esempio, può essere inviato come parametro di query, intestazione HTTP o parametro di modulo (valore predefinito).

La variabile request.queryparam.refreshtoken indica che il token di aggiornamento deve essere presente come parametro di query, ad esempio ?refresh_token=login.myapp.com. Ad esempio, per richiedere il token di aggiornamento in un'intestazione HTTP, imposta questo valore su request.header.refresh_token. Vedi anche Richiesta di token di accesso e codici di autorizzazione.

Valore predefinito:

request.formparam.refresh_token (un x-www-form-urlcodificato e specificato nel corpo della richiesta)

Presenza:

Facoltativo

Tipo: Stringa
Valori validi: Qualsiasi variabile di flusso accessibile nel criterio in fase di esecuzione
Utilizzato con i tipi di concessione:
  • refresh_token

Elemento <RefreshTokenExpiresIn>

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Applica la scadenza dei token di aggiornamento in millisecondi. Il valore della data e dell'ora di scadenza è un valore generato dal sistema più il valore <RefreshTokenExpiresIn>. Se <RefreshTokenExpiresIn> è impostato su -1, il token di aggiornamento scade in base alla scadenza massima del token di aggiornamento OAuth. Se <RefreshTokenExpiresIn> non è specificato, il sistema applica un valore predefinito configurato a livello di sistema. Contatta l'assistenza Apigee Edge per ulteriori informazioni sulle impostazioni di sistema predefinite.

La data e l'ora di scadenza possono essere impostate anche in fase di esecuzione utilizzando un valore predefinito hardcoded o facendo riferimento a una variabile di flusso. Ad esempio, puoi memorizzare un valore di scadenza del token in una mappa di valori chiave, recuperarlo, assegnarlo a una variabile e farvi riferimento nel criterio. Ad esempio, kvm.oauth.expires_in.

La stanza seguente specifica una variabile di flusso e un valore predefinito. Tieni presente che il valore della variabile flow ha la precedenza sul valore predefinito specificato.

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

Private Cloud: per un'installazione di Edge per Private Cloud, il valore predefinito è impostato dalla proprietà conf_keymanagement_oauth_refresh_token_expiry_time_in_millis. Per impostare questa proprietà:

  1. Apri il file message-processor.properties in un editor. Se il file non esiste, creane uno:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Imposta la proprietà come preferisci:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. Assicurati che il file delle proprietà sia di proprietà dell'utente "apigee":
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Riavvia il processore di messaggi.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Valore predefinito:

63072000000 ms (2 anni) (in vigore dal 5 agosto 2024)

Presenza:

Facoltativo

Tipo: Numero intero
Valori validi:
Utilizzati con i tipi di autorizzazione:
  • authorization_code
  • password
  • refresh_token

Elemento <ResponseType>

<ResponseType>request.queryparam.response_type</ResponseType>

Questo elemento indica a Edge il tipo di concessione richiesto dall'app client. Viene utilizzato solo con i flussi del codice di autorizzazione e del tipo di autorizzazione implicita.

Per impostazione predefinita, Edge cerca il valore del tipo di risposta in un parametro della query response_type. Se vuoi ignorare questo comportamento predefinito, utilizza l'elemento <ResponseType> per configurare una variabile di flusso contenente il valore del tipo di risposta. Ad esempio, se imposti questo elemento su request.header.response_type, Edge cerca il tipo di risposta da passare nell'intestazione della richiesta. Vedi anche Richiedere token di accesso e codici di autorizzazione.

Valore predefinito:

request.formparam.response_type (un valore x-www-form-urlencoded specificato nel corpo della richiesta)

Presenza:

(Facoltativo) Utilizza questo elemento se vuoi eseguire l'override del comportamento predefinito.

Tipo: Stringa
Valori validi: code (per il tipo di concessione del codice di autorizzazione) o token (per il tipo di concessione implicita)
Utilizzato con i tipi di concessione:
  • implicito
  • Utilizzato anche con l'operazione GenerateAuthorizationCode.

Elemento <ReuseRefreshToken>

<ReuseRefreshToken>true</ReuseRefreshToken>

Se impostato su true, il token di aggiornamento esistente viene riutilizzato fino alla scadenza. Se false, Apigee Edge emette un nuovo token di aggiornamento quando viene presentato un token di aggiornamento valido.

Valore predefinito:

false

Presenza:

facoltativo

Tipo: booleano
Valori validi:

true o false

Utilizzato con il tipo di autorizzazione:
  • refresh_token

Elemento <Scope>

<Scope>request.queryparam.scope</Scope>

Se questo elemento è presente in uno dei criteri GenerateAccessToken o GenerateAuthorizationCode, viene utilizzato per specificare gli ambiti a cui concedere il token o il codice. Questi valori vengono solitamente trasmessi al criterio nella richiesta da un'app client. Puoi configurare l'elemento in modo che accetti una variabile di flusso, dandoti la possibilità di scegliere in che modo gli ambiti vengono trasmessi in una richiesta. Nel seguente esempio, request.queryparam.scope indica che l'ambito deve essere presente come parametro di query, ad esempio ?scope=READ. Per richiedere l'ambito in un'intestazione HTTP, ad esempio, imposta questo valore su request.header.scope.

Se questo elemento viene visualizzato in un criterio "VerifyAccessToken", viene utilizzato per specificare gli ambiti che il criterio deve applicare. In questo tipo di criterio, il valore deve essere un nome di ambito "hard coded", non puoi utilizzare variabili. Ad esempio:

<Scope>A B</Scope>

Vedi anche Utilizzo degli ambiti OAuth2 e Richiesta di token di accesso e codici di autorizzazione.

Valore predefinito:

Nessun ambito

Presenza:

Facoltativo

Tipo: Stringa
Valori validi:

Se utilizzata con i criteri Generate*, una variabile di flusso.

Se utilizzato con VerifyAccessToken, un elenco di nomi di ambito (stringhe) separati da spazi.

Utilizzati con i tipi di autorizzazione:
  • authorization_code
  • implicito
  • password
  • client_credentials
  • Può essere utilizzato anche con le operazioni GenerateAuthorizationCode e VerifyAccessToken.

Elemento <State>

<State>request.queryparam.state</State>

Nei casi in cui l'app client deve inviare le informazioni sullo stato al server di autorizzazione, questo elemento consente di specificare dove Edge deve cercare i valori dello stato. Ad esempio, potrebbe essere inviato come parametro di query o in un'intestazione HTTP. Il valore dello stato viene in genere utilizzato come misura di sicurezza per impedire attacchi CSRF.

Ad esempio, request.queryparam.state indica che lo stato deve essere presente come parametro di query, ad esempio ?state=HjoiuKJH32. Per richiedere lo stato in un'intestazione HTTP, ad esempio, imposta questo valore su request.header.state. Vedi anche Richiedere token di accesso e codici di autorizzazione.

Predefinita:

Nessuno stato

Presenza:

Facoltativo

Tipo: Stringa
Valori validi: Qualsiasi variabile di flusso accessibile al criterio in fase di runtime
Utilizzato con i tipi di concessione:
  • Tutti
  • Può essere utilizzato anche con l'operazione GenerateAuthorizationCode

Elemento <StoreToken>

 <StoreToken>true</StoreToken> 

Imposta questo elemento su true quando l'elemento <ExternalAuthorization> è true. L'elemento <StoreToken> indica ad Apigee Edge di memorizzare il token di accesso esterno. In caso contrario, non verrà mantenuto.

Valore predefinito:

falso

Presenza:

Facoltativo

Tipo: Booleano
Valori validi: true o false
Utilizzato con i tipi di concessione:
  • authorization_code
  • password
  • client_credentials

Elemento <SupportedGrantTypes>/<GrantType>

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

Specifica i tipi di concessione supportati da un endpoint del token OAuth su Apigee Edge. Un endpoint potrebbe supportare più tipi di autorizzazione (ovvero, un singolo endpoint può essere configurato per distribuire i token di accesso per più tipi di autorizzazione). Per saperne di più sugli endpoint, consulta Informazioni sugli endpoint OAuth. Il tipo di concessione viene passato nelle richieste di token in un parametro grant_type.

Se non vengono specificati tipi di concessione supportati, gli unici tipi di concessione consentiti sono authorization_code e implicit. Vedi anche l'elemento <GrantType> (un elemento di livello superiore utilizzato per specificare dove Apigee Edge deve cercare il parametro grant_type che viene passato in una richiesta del client). Edge si assicurerà che il valore del parametro grant_type sia uguale a uno dei tipi di concessione supportati.

Valore predefinito:

authorization _code e implicit

Presenza:

Obbligatorio

Tipo: Stringa
Valori validi:
  • client_credentials
  • authorization_code
  • password
  • implicito

Elemento <Tokens>/<Token>

Utilizzato con le operazioni ValidateToken e InvalidateToken. Consulta anche Approvare e revocare i token di accesso. L'elemento <Token> identifica la variabile di flusso che definisce l'origine del token da revocare. Se gli sviluppatori devono inviare token di accesso come parametri di query denominati access_token, ad esempio, devono utilizzare request.queryparam.access_token.

Elemento <UserName>

<UserName>request.queryparam.user_name</UserName>

Questo elemento viene utilizzato solo con il tipo di autorizzazione con password. Con il tipo di concessione della password, le credenziali utente (password e nome utente) devono essere rese disponibili per il criterio OAuthV2. Gli elementi <PassWord> e <UserName> vengono utilizzati per specificare le variabili in cui Edge può trovare questi valori. Se questi elementi non sono specificati, il criterio si aspetta di trovare i valori (per impostazione predefinita) nei parametri del modulo denominati username e password. Se i valori non vengono trovati, il criterio genera un errore. Puoi utilizzare gli elementi <PassWord> e <UserName> per fare riferimento a qualsiasi variabile di flusso contenente le credenziali.

Ad esempio, puoi passare il nome utente in un parametro di query e impostare l'elemento <UserName> in questo modo: <UserName>request.queryparam.username</UserName>.Per richiedere il nome utente in un'intestazione HTTP, imposta questo valore su request.header.username.

Il criterio OAuthV2 non esegue altre operazioni con questi valori delle credenziali; Edge si limita a verificare che siano presenti. Spetta allo sviluppatore dell'API recuperare la richiesta di valori e inviarli a un provider di identità prima dell'esecuzione del criterio di generazione del token.

Vedi anche Richiedere token di accesso e codici di autorizzazione.

Valore predefinito:

request.formparam.username (un x-www-form-urlcodificato e specificato nel corpo della richiesta)

Presenza:

Facoltativo

Tipo: Stringa
Valori validi: Qualsiasi impostazione di variabile.
Utilizzati con i tipi di autorizzazione: password

Verifica dei token di accesso

Una volta configurato un endpoint token per un proxy API, un criterio OAuthV2 corrispondente che specifica l'operazione VerifyAccessToken viene associato al flusso che espone la risorsa protetta.

Ad esempio, per garantire che tutte le richieste a un'API siano autorizzate, il seguente criterio applica la verifica dei token di accesso:

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

Il criterio è associato alla risorsa API da proteggere. Per assicurarti che tutte le richieste a un'API siano verificate, collega il criterio al PreFlow della richiesta ProxyEndpoint, come segue:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

I seguenti elementi facoltativi possono essere utilizzati per eseguire l'override delle impostazioni predefinite per l'operazione VerifyAccessToken.

Nome Descrizione
Ambito

Un elenco di ambiti delimitati da spazi. La verifica avrà esito positivo se almeno uno degli ambiti elencati è presente nel token di accesso. Ad esempio, il seguente criterio controllerà il token di accesso per verificare che contenga almeno uno degli ambiti elencati. Se è presente READ o WRITE, la verifica andrà a buon fine.

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken La variabile in cui si prevede che si trovi il token di accesso. Ad esempio, request.queryparam.accesstoken. Per impostazione predefinita, in base alla specifica OAuth 2.0, il token di accesso deve essere presentato dall'app nell'intestazione HTTP Autorizzazione. Utilizza questa impostazione se si prevede che il token di accesso venga presentato in una posizione non standard, ad esempio un parametro di query o un'intestazione HTTP con un nome diverso da Authorization.

Vedi anche Verificare i token di accesso e Richiedere token di accesso e codici di autorizzazione.

Specificare le posizioni delle variabili di richiesta

Per ogni tipo di autorizzazione, il criterio fa ipotesi sulla posizione o sulle informazioni richieste nei messaggi di richiesta. Queste ipotesi si basano sulla specifica OAuth 2.0. Se le tue app devono discostarsi dalla specifica OAuth 2.0, puoi specificare le posizioni previste per ciascun parametro. Ad esempio, quando gestisci un codice di autorizzazione, puoi specificare la posizione del codice di autorizzazione, l'ID cliente, l'URI di reindirizzamento e l'ambito. Questi possono essere specificati come intestazioni HTTP, parametri di query o parametri di modulo.

L'esempio seguente mostra come specificare la posizione dei parametri obbligatori del codice di autorizzazione come intestazioni HTTP:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

In alternativa, se necessario per supportare la base di app client, puoi combinare intestazioni e parametri di query:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

È possibile configurare una sola località per parametro.

Variabili di flusso

Le variabili di flusso definite in questa tabella vengono compilate quando vengono eseguiti i rispettivi criteri OAuth e, di conseguenza, sono disponibili per altri criteri o applicazioni in esecuzione nel flusso del proxy API.

Operazione VerifyAccessToken

Viene eseguita l'operazione VerifyAccessToken; un numero elevato di variabili di flusso vengono compilate nel contesto di esecuzione del proxy. Queste variabili forniscono proprietà relative al token di accesso, all'app sviluppatore, allo sviluppatore e all'azienda. Ad esempio, puoi utilizzare un criterio AssignMessage o JavaScript per leggere una di queste variabili e utilizzarla in base alle esigenze in un secondo momento nel flusso. Queste variabili possono essere utili anche per scopi di debug.

Variabili specifiche per token

Variabili Descrizione
organization_name Il nome dell'organizzazione in cui viene eseguito il proxy.
developer.id L'ID dello sviluppatore associato all'app client registrata.
developer.app.name Il nome dello sviluppatore associato all'app del cliente registrata.
client_id L'ID client dell'app client registrata.
grant_type Il tipo di concessione associato alla richiesta.
token_type Il tipo di token associato alla richiesta.
access_token Il token di accesso in fase di verifica.
accesstoken.{custom_attribute} Un attributo personalizzato denominato nel token di accesso.
issued_at La data di emissione del token di accesso espressa in tempo di epoca Unix in millisecondi.
expires_in L'ora di scadenza del token di accesso. Espresso in secondi. Anche se l'elemento ExpiresIn imposta la scadenza in millisecondi, nella risposta del token e nelle variabili di flusso il valore viene espresso in secondi.
status Lo stato del token di accesso (ad es. approvato o revocato).
scope L'ambito (se presente) associato al token di accesso.
apiproduct.<custom_attribute_name> Un attributo personalizzato denominato del prodotto API associato all'app client registrata.
apiproduct.name Il nome del prodotto API associato all'app client registrata.
revoke_reason

(Solo Apigee hybrid) Indica perché il token di accesso è stato revocato.

Il valore può essere REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER o TOKEN_REVOKED.

Variabili specifiche per l'app

Queste variabili sono correlate all'app per sviluppatori associata al token.

Variabili Descrizione
app.name
app.id
app.accessType
app.callbackUrl
app.status approvata o revocata
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType Ad esempio: sviluppatore
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} Un attributo personalizzato denominato dell'app client registrata.

Variabili specifiche per lo sviluppatore

Se app.appType è "Company", vengono compilati gli attributi dell'azienda e se app.appType è "Developer", vengono compilati gli attributi dello sviluppatore.

Variabili Descrizione
Variabili specifiche per sviluppatori
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status attive o non attive
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} Un attributo personalizzato denominato dello sviluppatore.

Variabili specifiche per l'azienda

Se app.appType è "Company", vengono compilati gli attributi dell'azienda e se app.appType è "Developer", vengono compilati gli attributi dello sviluppatore.

Variabili Descrizione
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} Un attributo personalizzato denominato dell'azienda.

Operazione GenerateAuthorizationCode

Queste variabili vengono impostate quando l'operazione GenerateAuthorizationCode viene eseguita correttamente:

Prefisso: oauthv2authcode.{policy_name}.{variable_name}

Esempio: oauthv2authcode.GenerateCodePolicy.code

Variabile Descrizione
code Il codice di autorizzazione generato durante l'esecuzione del criterio.
redirect_uri L'URI di reindirizzamento associato all'app client registrata.
scope L'ambito OAuth facoltativo passato nella richiesta del client.
client_id L'ID client trasmesso nella richiesta del client.

Operazioni GenerateAccessToken e RefreshAccessToken

Queste variabili vengono impostate quando le operazioni GenerateAccessToken e RefreshAccessToken vengono eseguite correttamente. Tieni presente che le variabili del token di aggiornamento non si applicano al flusso di tipo di concessione delle credenziali client.

Prefisso: oauthv2accesstoken.{policy_name}.{variable_name}

Esempio: oauthv2accesstoken.GenerateTokenPolicy.access_token

Nome variabile Descrizione
access_token Il token di accesso generato.
client_id L'ID cliente dell'app per sviluppatori associata a questo token.
expires_in Il valore di scadenza del token. Per ulteriori dettagli, consulta l'elemento <ExpiresIn>. Tieni presente che nella risposta, expires_in è espresso in secondi.
scope Elenco degli ambiti disponibili configurati per il token. Consulta Utilizzo degli ambiti OAuth2.
status approved o revoked.
token_type È impostato su BearerToken.
developer.email L'indirizzo email dello sviluppatore registrato che possiede l'app per sviluppatori associata al token.
organization_name L'organizzazione in cui viene eseguito il proxy.
api_product_list Un elenco dei prodotti associati all'app sviluppatore corrispondente del token.
refresh_count
refresh_token Il token di aggiornamento generato. Tieni presente che i token di aggiornamento non vengono generati per il tipo di concessione delle credenziali client.
refresh_token_expires_in La durata del token di aggiornamento, in secondi.
refresh_token_issued_at Questo valore di tempo è la rappresentazione stringa della quantità di timestamp a 32 bit corrispondente. Ad esempio, "Wed, 21 Aug 2013 19:16:47 UTC" corrisponde al valore del timestamp di 1377112607413.
refresh_token_status approved o revoked.

GenerateAccessTokenImplicitGrant

Queste variabili vengono impostate quando l'operazione GenerateAccessTokenImplicit viene eseguita correttamente per il flusso del tipo di concessione implicita.

Prefisso: oauthv2accesstoken.{policy_name}.{variable_name}

Esempio: oauthv2accesstoken.RefreshTokenPolicy.access_token

Variabile Descrizione
oauthv2accesstoken.access_token Il token di accesso generato quando viene eseguito il criterio.
oauthv2accesstoken.{policy_name}.expires_in Il valore di scadenza del token, in secondi. Per maggiori dettagli, consulta l'elemento <ExpiresIn>.

Riferimento all'errore

Questa sezione descrive i codici di errore e i messaggi di errore restituiti e le variabili di errore impostate da Edge quando questo criterio attiva un errore. Queste informazioni sono importanti se stai sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta Informazioni importanti sugli errori relativi alle norme e Gestione degli errori.

Errori di runtime

Questi errori possono verificarsi durante l'esecuzione del criterio.

Codice guasto Stato HTTP Causa Lanciato dalle operazioni
steps.oauth.v2.access_token_expired 401 Il token di accesso è scaduto.

VerifyAccessToken
InvalidateToken

steps.oauth.v2.access_token_not_approved 401 Il token di accesso è stato revocato. VerifyAccessToken
steps.oauth.v2.apiresource_doesnot_exist 401 La risorsa richiesta non esiste in nessuno dei prodotti API associati al token di accesso. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 Il criterio si aspettava di trovare un token di accesso in una variabile specificata nell'elemento <AccessToken>, ma non è stato possibile risolvere la variabile. GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Il criterio si aspettava di trovare un codice di autorizzazione in una variabile specificata nell'elemento <Code>, ma non è stato possibile risolvere la variabile. GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 Il criterio si aspettava di trovare l'ID cliente in una variabile specificata nell'elemento <ClientId>, ma non è stato possibile risolvere la variabile. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 Il criterio si aspettava di trovare un token di aggiornamento in una variabile specificata nell'elemento <RefreshToken>, ma non è stato possibile risolvere la variabile. RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 Il criterio si aspettava di trovare un token in una variabile specificata nell'elemento <Tokens>, ma non è stato possibile risolvere la variabile.

ValidateToken
InvalidateToken

steps.oauth.v2.InsufficientScope 403 Il token di accesso presentato nella richiesta ha un ambito che non corrisponde all'ambito specificato nel criterio di verifica del token di accesso. Per saperne di più sugli ambiti, consulta Utilizzo degli ambiti OAuth2. VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 Il token di accesso inviato dal client non è valido. VerifyAccessToken
steps.oauth.v2.invalid_client 401

Questo nome dell'errore viene restituito quando la proprietà <GenerateResponse> del criterio è impostata su true e l'ID client inviato nella richiesta è non valido. Verifica di utilizzare la chiave client e i valori secret corretti per l'app per sviluppatori associata al tuo proxy. In genere, questi valori vengono inviati come intestazione di autorizzazione di base con codifica Base64.

Nota:ti consigliamo di modificare le condizioni delle regole di errore esistenti per rilevare entrambi i nomi invalid_client e InvalidClientIdentifier. Per ulteriori informazioni e un esempio, consulta le note di rilascio del 16/09/21.

GenerateAccessToken
RefreshAccessToken
steps.oauth.v2.InvalidRequest 400 Questo nome di errore viene utilizzato per più tipi di errori, in genere per parametri mancanti o errati inviati nella richiesta. Se <GenerateResponse> è impostato su false, utilizza le variabili di guasto (descritte di seguito) per recuperare i dettagli sull'errore, ad esempio il nome e la causa del guasto. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.InvalidAccessToken 401 L'intestazione di autorizzazione non contiene la parola "Bearer", che è obbligatoria. Ad esempio: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound 401

Il proxy API non è nel prodotto associato al token di accesso.

Suggerimenti:assicurati che il prodotto associato al token di accesso sia configurato correttamente. Ad esempio, se utilizzi caratteri jolly nei percorsi delle risorse, assicurati che vengano utilizzati correttamente. Per maggiori dettagli, consulta Creare prodotti API.

Consulta anche questo post della community Apigee per ulteriori indicazioni sulle cause di questo errore.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Questo nome dell'errore viene restituito quando la proprietà <GenerateResponse> del criterio è impostata su false e l'ID client inviato nella richiesta è non valido. Verifica di utilizzare la chiave client e i valori secret corretti per l'app per sviluppatori associata al tuo proxy. In genere, questi valori vengono inviati come intestazione di autorizzazione di base codificata in Base64.

Nota: in questa situazione, questo errore veniva chiamato invalid_client. Ti consigliamo di modificare le condizioni delle regole di errore esistenti per rilevare i nomi invalid_client e InvalidClientIdentifier. Per ulteriori informazioni e un esempio, consulta le note di rilascio del 16/09/21.

GenerateAccessToken
RefreshAccessToken

steps.oauth.v2.InvalidParameter 500 Il criterio deve specificare un token di accesso o un codice di autorizzazione, ma non entrambi. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 L'elemento <Tokens>/<Token> richiede di specificare il tipo di token (ad esempio refreshtoken). Se il client passa il tipo errato, viene generato questo errore. ValidateToken
InvalidateToken
steps.oauth.v2.MissingParameter 500 Il tipo di risposta è token, ma non sono specificati tipi di concessione. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

Il client ha specificato un tipo di concessione non supportato dal criterio (non elencato nell'elemento <SupportedGrantTypes>).

Nota: al momento è presente un bug per cui gli errori relativi ai tipi di concessione non supportati non vengono generati correttamente. Se si verifica un errore relativo al tipo di concessione non supportato, il proxy non accede al flusso di errori, come previsto.

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken

Errori di deployment

Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.

Nome dell'errore Causa
InvalidValueForExpiresIn

Per l'elemento <ExpiresIn>, i valori validi sono numeri interi positivi e -1.

InvalidValueForRefreshTokenExpiresIn Per l'elemento <RefreshTokenExpiresIn>, i valori validi sono numeri interi positivi e -1.
InvalidGrantType Nell'elemento <SupportedGrantTypes> è specificato un tipo di concessione non valido. Consulta il riferimento alle norme per un elenco dei tipi validi.
ExpiresInNotApplicableForOperation Assicurati che le operazioni specificate nell'elemento <Operations> supportino la scadenza. Ad esempio, l'operazione VerifyToken non lo fa.
RefreshTokenExpiresInNotApplicableForOperation Assicurati che le operazioni specificate nell'elemento <Operations> supportino la scadenza del token di aggiornamento. Ad esempio, l'operazione VerifyToken non lo fa.
GrantTypesNotApplicableForOperation Assicurati che i tipi di concessione specificati in <SupportedGrantTypes> siano supportati per l'operazione specificata.
OperationRequired

Devi specificare un'operazione in questo criterio utilizzando l'elemento <Operation>.

Nota:se l'elemento <Operation> non è presente, l'interfaccia utente genera un errore di convalida dello schema.

InvalidOperation

Devi specificare un'operazione valida in questo criterio utilizzando l'elemento <Operation>.

Nota: se l'elemento <Operation> non è valido, l'interfaccia utente genera un errore di convalida dello schema.

TokenValueRequired Devi specificare un valore del token <Token> nell'elemento <Tokens>.

Variabili di errore

Queste variabili vengono impostate quando questo criterio attiva un errore in fase di runtime.

Variabili Dove Esempio
fault.name="fault_name" fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime sopra. Il nome dell'errore è l'ultima parte del codice dell'errore. fault.name = "InvalidRequest"
oauthV2.policy_name.failed policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. oauthV2.GenerateAccesstoken.failed = true
oauthV2.policy_name.fault.name policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. oauthV2.GenerateAccesstoken.fault.name = InvalidRequest

Nota: per l'operazione VerifyAccessToken, il nome dell'errore include questo suffisso: keymanagement.service
Ad esempio: keymanagement.service.invalid_access_token

oauthV2.policy_name.fault.cause policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. oauthV2.GenerateAccesstoken.cause = Required param : grant_type

Esempio di risposta di errore

Queste risposte vengono inviate al client se l'elemento <GenerateResponse> è true.

Se <GenerateResponse> è true, il criterio restituisce errori in questo formato per le operazioni che generano token e codici. Per un elenco completo, consulta Riferimento alle risposte di errore HTTP OAuth.

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

Se <GenerateResponse> è true, il criterio restituisce errori in questo formato per le operazioni di verifica e convalida. Per un elenco completo, consulta la documentazione di riferimento per le risposte di errore HTTP OAuth.

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

Esempio di regola di errore

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

Schema dei criteri

Ogni tipo di criterio è definito da uno schema XML (.xsd). Come riferimento, su GitHub sono disponibili gli schemi dei criteri.

Utilizzo della configurazione OAuth predefinita

Per ogni organizzazione (anche per quelle con prova senza costi) su Apigee Edge viene eseguito il provisioning di un endpoint del token OAuth. L'endpoint è preconfigurato con i criteri nel proxy API chiamato oauth. Puoi iniziare a utilizzare l'endpoint token non appena crei un account su Apigee Edge. Per maggiori dettagli, consulta la pagina Informazioni sugli endpoint OAuth.

Pulizia dei token di accesso

Per impostazione predefinita, i token OAuth2 vengono eliminati dal sistema Apigee Edge 3 giorni (259200 secondi) dopo la scadenza sia del token di accesso sia del token di aggiornamento (se esistente). In alcuni casi, potresti voler modificare questa impostazione predefinita. Ad esempio, potresti voler ridurre il tempo di eliminazione per risparmiare spazio su disco se viene generato un numero elevato di token.

Se utilizzi Edge for Private Cloud, puoi modificare questa impostazione predefinita impostando le proprietà dell'organizzazione come spiegato in questa sezione. L'eliminazione di 3 giorni dei token scaduti si applica a Edge for Private Cloud versione 4.19.01 e successive. Per le versioni precedenti, l'intervallo di eliminazione predefinito è di 180 giorni.

Aggiornamento delle impostazioni di eliminazione per Edge Private Cloud 4.16.01 e versioni successive

Nota:sono interessati solo i token generati dopo l'applicazione di queste impostazioni. Le impostazioni non si applicano ai token generati in precedenza.

Aggiornamento delle impostazioni di eliminazione per Edge Private Cloud 4.15.07

Nota: sono interessati solo i token generati dopo l'applicazione di queste impostazioni; le impostazioni non si applicano ai token generati in precedenza.

Comportamento non conforme allo standard RFC

Il criterio OAuthV2 restituisce una risposta del token che contiene determinate proprietà non conformi allo standard RFC. La tabella seguente mostra le proprietà non conformi restituite dal criterio OAuthV2 e le proprietà conformi corrispondenti.

OAuthV2 restituisce: La proprietà conforme alla specifica RFC è:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

Il valore conforme è un numero, non una stringa.

Inoltre, la risposta di errore per un token di aggiornamento scaduto quando grant_type = refresh_token è:

{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}

Tuttavia, la risposta conforme alla specifica RFC è:

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

Argomenti correlati