Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Cosa
OAuthV2 è una policy sfaccettata per l'esecuzione di operazioni di tipo di concessione OAuth 2.0. Questi sono i criteri principali utilizzati per configurare gli endpoint OAuth 2.0 su Apigee Edge.
Ad esempio, le norme restituiscono una proprietà token,"token_type":"BearerToken", dove la proprietà token conforme è "token_type":"Bearer". Per informazioni dettagliate su questi elementi di risposta non conformi, consulta Comportamento non conforme a RFC.
Suggerimento:se vuoi saperne di più su OAuth su Apigee Edge, consulta la home page di OAuth. Fornisce link a risorse, esempi, video e altro ancora. Per una buona dimostrazione di come viene utilizzata questa norma in un'applicazione funzionante, consulta l'esempio OAuth avanzato su GitHub.
Campioni
VerifyAccessToken
VerifyAccessToken
Questa configurazione dei criteri OAuthV2 (con l'operazione VerifyAccessToken) verifica che un token di accesso inviato ad Apigee Edge sia valido. Quando viene attivata questa operazione di policy, Edge cerca un token di accesso valido nella richiesta. Se il token di accesso è valido, la richiesta può procedere. Se non è valido, tutta l'elaborazione si interrompe e nella risposta viene restituito un errore.
<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 di autenticazione 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 questa impostazione predefinita 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, vedi Richiesta di token di accesso e codici di autorizzazione. L'argomento include esempi di queste operazioni:
GenerateAuthorizationCode
Generare il codice di autorizzazione
Per esempi che mostrano come richiedere i codici di autorizzazione, consulta Richiesta di un codice di autorizzazione.
RefreshAccessToken
Aggiornare un token di accesso
Per esempi che mostrano come richiedere token di accesso utilizzando un token di aggiornamento, vedi Aggiornamento di 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 concessione implicita. In questo caso, utilizzeremo il tipo di autorizzazione password per generare il token. Come vedrai, il trucco per far funzionare il tutto è passare un'intestazione della richiesta di autorizzazione con un criterio JavaScript.
Innanzitutto, esaminiamo il 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 questa policy nel flusso di risposta, si verificherà un errore 401 UnAuthorized anche se i parametri di accesso corretti sono specificati nella policy. Per risolvere questo problema, devi impostare un'intestazione della richiesta di autorizzazione.
L'intestazione Authorization deve contenere uno schema di accesso Basic con client_id:client_secret codificato in Base64.
Puoi aggiungere questa intestazione con una norma JavaScript posizionata appena prima della norma OAuthV2, in questo modo. 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 "Codifica delle 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 i 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 Se vuoi, puoi utilizzare l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta il valore su Imposta su |
falso | Facoltativo |
enabled |
Imposta il valore su Imposta |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
falso | Deprecato |
<DisplayName> 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 |
|---|---|
| Presenza | Facoltativo |
| Tipo | Stringa |
Elemento <AccessToken>
<AccessToken>request.header.access_token</AccessToken>
Per impostazione predefinita, VerifyAccessToken prevede che il token di accesso venga inviato nell'intestazione Authorization.
Puoi modificare l'impostazione predefinita utilizzando questo elemento. Ad esempio, request.queryparam.access_token indica che il token di accesso deve essere presente come parametro di query denominato access_token.
<AccessToken>request.header.access_token</AccessToken>:
curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
<AccessToken>request.queryparam.access_token</AccessToken>:
curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"
|
Predefinito: |
N/D |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Utilizzato con le operazioni: |
|
Elemento <AccessTokenPrefix>
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
Per impostazione predefinita, VerifyAccessToken prevede che il token di accesso venga inviato in un'intestazione di autorizzazione come token Bearer. Ad esempio:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
Al momento, Bearer è l'unico prefisso supportato.
|
Predefinito: |
Canale di trasporto |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: |
Canale di trasporto |
| Utilizzato con le operazioni: |
|
Elemento <AppEndUser>
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
Nei casi in cui l'ID utente finale dell'app deve 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. Per richiedere AppEndUser in un'intestazione
HTTP, ad esempio, 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 saperne di più, consulta Abilitare il recupero e la revoca dei token di accesso OAuth 2.0 per ID utente finale, ID app o entrambi.
|
Predefinito: |
N/D |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: |
Qualsiasi variabile di flusso accessibile al criterio in fase di runtime. |
| Utilizzato con i tipi di autorizzazione: |
|
<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 può essere estratto e controllato in fase di runtime.
Questo elemento ti 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 di flusso. Se la variabile non può essere risolta, la stringa è quella predefinita.
Per saperne di più sull'utilizzo di questo elemento, consulta Personalizzazione dei token e dei codici di autorizzazione.
Visualizzazione o nascondimento degli attributi personalizzati nella risposta
Tieni presente che se imposti l'elemento GenerateResponse di questo criterio su true, nella risposta viene restituita la rappresentazione JSON completa del token, inclusi gli attributi personalizzati che hai impostato. 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
memorizzato. Supponiamo di generare 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 perché Edge non ricorda che
l'attributo display era originariamente impostato su false nel criterio Genera token di accesso. L'attributo
personalizzato fa semplicemente parte dei metadati del token di accesso.
Vedrai lo stesso comportamento se aggiungi attributi personalizzati a un codice di autorizzazione: quando viene generato un token di accesso utilizzando quel codice, questi attributi personalizzati vengono visualizzati nella risposta del token di accesso. Anche in questo caso, 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 nella policy dei token di aggiornamento e imposta la loro visualizzazione su false. In questo caso, potrebbe essere necessario recuperare i valori personalizzati originali dal token di accesso originale utilizzando il criterio GetOAuthV2Info.
- Utilizza un criterio JavaScript di post-elaborazione per estrarre manualmente gli attributi personalizzati che non vuoi visualizzare nella risposta.
Vedi anche Personalizzazione di token e codici di autorizzazione.
|
Predefinito: |
|
|
Presenza: |
Facoltativo |
| Valori validi: |
|
| Utilizzato con i tipi di autorizzazione: |
|
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 client nella variabile di flusso
request.formparam.client_id. L'impostazione di ClientId
su qualsiasi altra variabile non è supportata.
Vedi anche Richiesta di token di accesso e codici di autorizzazione.
|
Predefinito: |
request.formparam.client_id (un x-www-form-urlencoded 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 autorizzazione: |
Può essere utilizzato anche con l'operazione GenerateAuthorizationCode. |
Elemento <Code>
<Code>request.queryparam.code</Code>
Nel flusso del tipo di concessione di 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 (impostazione predefinita).
La variabile request.queryparam.auth_code indica che il codice di autorizzazione deve essere presente come parametro di query, ad esempio ?auth_code=AfGlvs9. Per richiedere il codice di autorizzazione in un'intestazione HTTP, ad esempio, imposta questo valore su request.header.auth_code. Vedi anche
Richiesta di token di accesso e
codici di autorizzazione.
|
Predefinito: |
request.formparam.code (un x-www-form-urlencoded 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 autorizzazione: | authorization_code |
Elemento <ExpiresIn>
<ExpiresIn>10000</ExpiresIn>
Applica il tempo di scadenza dei token di accesso e dei codici di autorizzazione in millisecondi. (Per i token di aggiornamento, utilizza <RefreshTokenExpiresIn>.) Il valore della 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.
Il tempo di scadenza può essere impostato anche in fase di runtime utilizzando un valore predefinito codificato o facendo riferimento a una variabile di flusso. Ad esempio, puoi memorizzare un valore di scadenza del token in una mappa chiave-valore, recuperarlo, assegnarlo a una variabile e farvi riferimento nel criterio. Ad esempio,
kvm.oauth.expires_in.
Con Apigee Edge per Public Cloud, Edge mantiene le seguenti entità nella cache per un minimo di 180 secondi dopo l'accesso.
- Token di accesso OAuth. Ciò significa che un token revocato potrebbe comunque funzionare per un massimo di tre minuti, finché non scade il limite della cache.
- Entità Key Management Service (KMS) (app, sviluppatori, prodotti API).
- Attributi personalizzati su token OAuth ed entità KMS.
La seguente strofa specifica anche una variabile di flusso e 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 è descritta in questo post della community 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 di Edge per Private Cloud, il valore predefinito
è impostato dalla proprietà conf_keymanagement_oauth_auth_code_expiry_time_in_millis.
Per impostare questa proprietà:
- Apri il file
message-processor.propertiesin un editor. Se il file non esiste, crealo:vi /opt/apigee/customer/application/message-processor.properties
- Imposta la proprietà come preferisci:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- Assicurati che il file delle proprietà sia di proprietà dell'utente "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Riavvia il processore di messaggi.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
|
Predefinito: |
Se non viene specificato, il sistema applica un valore predefinito configurato a livello di sistema. |
|
Presenza: |
Facoltativo |
| Tipo: | Numero intero |
| Valori validi: |
|
| Utilizzato con i tipi di autorizzazione: |
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. Per richiedere il token di accesso esterno
in un'intestazione HTTP, ad esempio, imposta questo valore
su request.header.external_access_token. Vedi anche Utilizzo di token OAuth di terze parti.
Elemento <ExternalAuthorization>
<ExternalAuthorization>true</ExternalAuthorization>
Se questo elemento è false o non è presente, Edge convalida client_id e client_secret normalmente rispetto all'archivio di autorizzazione Apigee Edge. Utilizza questo elemento quando vuoi lavorare con token OAuth di terze parti. Per informazioni dettagliate sull'utilizzo di questo elemento, vedi Utilizzo di token OAuth di terze parti.
|
Predefinito: |
falso |
|
Presenza: |
Facoltativo |
| Tipo: | Booleano |
| Valori validi: | true o false |
| Utilizzato con i tipi di autorizzazione: |
|
Elemento <ExternalAuthorizationCode>
<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>
Indica ad Apigee Edge dove trovare un codice di autorizzazione esterno (un codice di autorizzazione 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. Per richiedere il codice di autenticazione
esterno
in un'intestazione HTTP, ad esempio, imposta questo valore
su request.header.external_auth_code. Vedi anche Utilizzo di 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. Per richiedere il token di aggiornamento esterno
in un'intestazione HTTP, ad esempio, imposta questo valore
su request.header.external_refresh_token. Vedi anche Utilizzo di token OAuth di terze parti.
Elemento <GenerateResponse>
<GenerateResponse enabled='true'/>
Se impostata su true, la policy genera e restituisce una risposta. Ad esempio, per
GenerateAccessToken, la risposta potrebbe essere simile a questa:
{ "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 chiamata
oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code viene compilata con il nuovo
codice di autenticazione. Tieni presente che expires_in è espresso in secondi nella
risposta.
|
Predefinito: |
falso |
|
Presenza: |
Facoltativo |
| Tipo: | stringa |
| Valori validi: | true o false |
| Utilizzato con i tipi di autorizzazione: |
|
Elemento <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
Se 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. Viene invece compilato un insieme di variabili di flusso con valori correlati alla
funzione del criterio.
|
Predefinito: |
falso |
|
Presenza: |
Facoltativo |
| Tipo: | stringa |
| Valori validi: | true o false |
| Utilizzato con i tipi di autorizzazione: |
|
<GrantType>
<GrantType>request.queryparam.grant_type</GrantType>
Indica alla policy 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 del modulo (impostazione predefinita).
Ad esempio, request.queryparam.grant_type indica che la password
deve essere presente come parametro di query, ad esempio ?grant_type=password.
Per richiedere il tipo di concessione in un'intestazione HTTP, ad esempio, imposta questo valore
su request.header.grant_type. Vedi anche Richiesta di token di accesso e codici di autorizzazione.
|
Predefinito: |
request.formparam.grant_type (un x-www-form-urlencoded e specificato nel corpo della richiesta) |
|
Presenza: |
Facoltativo |
| Tipo: | stringa |
| Valori validi: | Una variabile, come spiegato sopra. |
| Utilizzato con i tipi di autorizzazione: |
|
Elemento <Operation>
<Operation>GenerateAuthorizationCode</Operation>
L'operazione OAuth 2.0 eseguita dalla policy.
|
Predefinito: |
Se |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: |
|
Elemento <PassWord>
<PassWord>request.queryparam.password</PassWord>
Questo elemento viene utilizzato solo con il tipo di autorizzazione 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 prevede 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 trasmettere la password in una richiesta di token utilizzando un parametro di query e impostare l'elemento
nel seguente modo:
<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 verifica semplicemente che siano presenti. Spetta allo sviluppatore dell'API recuperare la richiesta di valori e inviarli a un provider di identità prima dell'esecuzione della policy di generazione dei token.
Vedi anche Richiesta di token di accesso e codici di autorizzazione.
|
Predefinito: |
request.formparam.password (un parametro 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 autorizzazione: | 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 i tipi di autorizzazione codice e implicita. L'URI di reindirizzamento indica al server di autorizzazione (Edge) dove inviare un codice di autorizzazione (per il tipo di concessione del codice di autorizzazione) o un token di accesso (per il tipo di concessione implicita). È importante capire quando questo parametro è obbligatorio, quando è facoltativo e come viene utilizzato:
-
(obbligatorio) Se un URL di callback è registrato con l'app per sviluppatori associata alle chiavi client della richiesta e se
redirect_uriè presente nella richiesta, i due 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 app e gestire le chiavi API. - (facoltativo) Se è registrato un URL di callback e
redirect_urinon è presente nella richiesta, Edge reindirizza all'URL di callback registrato. - (obbligatorio) Se non è registrato un URL di callback, è obbligatorio
redirect_uri. 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 consiste nel 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. Vedi
anche Richiesta di token di accesso e
codici di autorizzazione.
|
Predefinito: |
request.formparam.redirect_uri (un x-www-form-urlencoded e specificato nel corpo della richiesta) |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: | Qualsiasi variabile di flusso accessibile nella policy in fase di runtime |
| Utilizzato con i tipi di autorizzazione: |
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 del modulo (impostazione predefinita).
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. Per richiedere il RefreshToken in un'intestazione
HTTP, ad esempio, imposta questo valore su request.header.refresh_token. Vedi
anche Richiesta di token di accesso e
codici di autorizzazione.
|
Predefinito: |
request.formparam.refresh_token (un x-www-form-urlencoded specificato nel corpo della richiesta) |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: | Qualsiasi variabile di flusso accessibile nella policy in fase di runtime |
| Utilizzato con i tipi di autorizzazione: |
|
Elemento <RefreshTokenExpiresIn>
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
Applica il tempo di scadenza dei token di aggiornamento in millisecondi. Il valore 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.
Il tempo di scadenza può essere impostato anche in fase di runtime utilizzando un valore predefinito codificato o facendo riferimento a una variabile di flusso. Ad esempio, puoi memorizzare un valore di scadenza del token in una mappa chiave-valore, recuperarlo, assegnarlo a una variabile e farvi riferimento nel criterio. Ad esempio, kvm.oauth.expires_in.
La seguente strofa specifica anche una variabile di flusso e un valore predefinito. Tieni presente che il valore della variabile di flusso 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à:
- Apri il file
message-processor.propertiesin un editor. Se il file non esiste, crealo:vi /opt/apigee/customer/application/message-processor.properties
- Imposta la proprietà come preferisci:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- Assicurati che il file delle proprietà sia di proprietà dell'utente "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Riavvia il processore di messaggi.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
|
Predefinito: |
63.072.000.000 ms (2 anni) (in vigore dal 5 agosto 2024) |
|
Presenza: |
Facoltativo |
| Tipo: | Numero intero |
| Valori validi: |
|
| Utilizzato con i tipi di autorizzazione: |
|
Elemento <ResponseType>
<ResponseType>request.queryparam.response_type</ResponseType>
Questo elemento comunica a Edge il tipo di concessione richiesto dall'app client. Viene utilizzato solo con i flussi di autorizzazione del codice 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
trasmettere nell'intestazione della richiesta. Vedi anche Richiesta di token di accesso e codici di autorizzazione.
|
Predefinito: |
request.formparam.response_type (un x-www-form-urlencoded e specificato nel corpo della richiesta) |
|
Presenza: |
Facoltativo. Utilizza questo elemento se vuoi ignorare il comportamento predefinito. |
| Tipo: | Stringa |
| Valori validi: | code (per il tipo di autorizzazione codice di autorizzazione) o token
(per il tipo di autorizzazione implicito) |
| Utilizzato con i tipi di autorizzazione: |
|
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.
|
Predefinito: |
|
|
Presenza: |
facoltativo |
| Tipo: | booleano |
| Valori validi: |
|
| Utilizzato con il tipo di autorizzazione: |
|
Elemento <Scope>
<Scope>request.queryparam.scope</Scope>
Se questo elemento è presente in uno dei criteri GenerateAccessToken o GenerateAuthorizationCode, viene utilizzato per specificare gli ambiti da concedere al token o al codice. Questi valori vengono
in genere passati alla policy nella richiesta da un'app client. Puoi configurare l'elemento in modo che
accetti una variabile di flusso, offrendoti la possibilità di scegliere come vengono passati gli ambiti 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 "hardcoded". 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.
|
Predefinito: |
Nessun ambito |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: |
Se utilizzata con le norme Generate*, una variabile di flusso. Se utilizzato con VerifyAccessToken, un elenco di nomi di ambiti (stringhe) separati da spazi. |
| Utilizzato con i tipi di autorizzazione: |
|
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 ti consente di specificare dove Edge deve cercare i valori di 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 prevenire 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 Richiesta di token di accesso e codici di autorizzazione.
|
Predefinito: |
Nessuno stato |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: | Qualsiasi variabile di flusso accessibile al criterio in fase di runtime |
| Utilizzato con i tipi di autorizzazione: |
|
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.
|
Predefinito: |
falso |
|
Presenza: |
Facoltativo |
| Tipo: | Booleano |
| Valori validi: | true o false |
| Utilizzato con i tipi di autorizzazione: |
|
<SupportedGrantTypes>/<GrantType> elemento
<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 token OAuth su Apigee Edge. Un endpoint può
supportare più tipi di concessione (ovvero, un singolo endpoint può essere configurato per distribuire token di accesso
per più tipi di concessione). 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 autorizzazione supportati, gli unici tipi di autorizzazione 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 passato in una richiesta client. Edge si assicurerà che il valore del parametro grant_type
corrisponda a uno dei tipi di concessione supportati.
|
Predefinito: |
authorization _code and implicit |
|
Presenza: |
Obbligatorio |
| Tipo: | Stringa |
| Valori validi: |
|
Elemento <Tokens>/<Token>
Utilizzato con le operazioni ValidateToken e InvalidateToken. Vedi anche Approvazione e
revoca dei 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,
utilizza request.queryparam.access_token.
Elemento <UserName>
<UserName>request.queryparam.user_name</UserName>
Questo elemento viene utilizzato solo con il tipo di autorizzazione 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 prevede 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 trasmettere il nome utente in un parametro di query e impostare l'elemento <UserName> nel seguente 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 verifica semplicemente che siano presenti. Spetta allo sviluppatore dell'API recuperare la richiesta di valori e inviarli a un provider di identità prima dell'esecuzione della policy di generazione dei token.
Vedi anche Richiesta di token di accesso e codici di autorizzazione.
|
Predefinito: |
request.formparam.username (un valore x-www-form-urlencoded specificato nel corpo della richiesta) |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: | Qualsiasi impostazione della variabile. |
| Utilizzato con i tipi di autorizzazione: | password |
Verifica dei token di accesso
Una volta configurato un endpoint token per un proxy API, al flusso che espone la risorsa protetta viene collegato un criterio OAuthV2 corrispondente che specifica l'operazione VerifyAccessToken.
Ad esempio, per assicurarti che tutte le richieste a un'API siano autorizzate, la seguente policy impone la verifica del 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 la policy al PreFlow della richiesta ProxyEndpoint, nel seguente modo:
<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 riuscirà se almeno uno degli ambiti elencati è presente nel token di accesso. Ad esempio, la seguente policy controllerà il token di accesso per assicurarsi 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 è previsto che si trovi il token di accesso. Ad esempio
request.queryparam.accesstoken. Per impostazione predefinita, il token di accesso deve essere
presentato dall'app nell'intestazione HTTP Authorization, in conformità con la specifica OAuth 2.0. Utilizza questa
impostazione se è previsto 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 Verifica dei token di accesso e Richiesta di token di accesso e codici di autorizzazione.
Specificare le posizioni delle variabili di richiesta
Per ogni tipo di concessione, le norme fanno 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 ogni parametro. Ad esempio, quando gestisci un codice di autorizzazione, puoi specificare la posizione del codice di autorizzazione, dell'ID client, dell'URI di reindirizzamento e dell'ambito. Questi possono essere specificati come intestazioni HTTP, parametri di query o parametri del modulo.
L'esempio seguente mostra come specificare la posizione dei parametri del codice di autorizzazione richiesti 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 della 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 posizione per parametro.
Variabili di flusso
Le variabili di flusso definite in questa tabella vengono compilate quando vengono eseguite le rispettive policy OAuth e sono quindi disponibili per altre policy o applicazioni eseguite nel flusso del proxy API.
Operazione VerifyAccessToken
L'operazione VerifyAccessToken viene eseguita e un numero elevato di variabili di flusso viene compilato nel contesto di esecuzione del proxy. Queste variabili forniscono proprietà relative al token di accesso, all'app sviluppatore, allo sviluppatore e all'azienda. Puoi utilizzare una policy AssignMessage o JavaScript, ad esempio, per leggere una qualsiasi di queste variabili e utilizzarle in base alle esigenze in un secondo momento nel flusso. Queste variabili possono essere utili anche per scopi di debug.
proxy.pathsuffix). Non è necessario impostare esplicitamente la variabile flow.resource.name.
Se i prodotti API non sono configurati con ambienti e proxy API validi, flow.resource.name deve essere impostato in modo esplicito per popolare le variabili del prodotto API nel flusso. Per informazioni dettagliate sulla configurazione del prodotto, vedi Utilizzo dell'API Edge Management per pubblicare API.
Variabili specifiche per il 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 client 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 epoca Unix in millisecondi. |
expires_in |
L'ora di scadenza del token di accesso. Espresso in
secondi. Sebbene l'elemento ExpiresIn
imposti la scadenza in millisecondi, nelle variabili di risposta del token e
del flusso, il valore è 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 il motivo per cui il token di accesso è stato revocato. Il valore può essere |
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: Developer |
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 gli sviluppatori
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 gli sviluppatori | |
developer.id |
|
developer.userName |
|
developer.firstName |
|
developer.lastName |
|
developer.email |
|
developer.status |
attiva o non attiva |
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 dell'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 della policy. |
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 passato 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 del 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 client dell'app sviluppatore 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 la sezione Utilizzo degli ambiti OAuth2. |
status |
approved o revoked. |
token_type |
È impostato su BearerToken. |
developer.email |
L'indirizzo email dello sviluppatore registrato proprietario dell'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 per sviluppatori corrispondente al 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 temporale è la rappresentazione in formato stringa della quantità di timestamp a 32 bit corrispondente. Ad esempio, "Wed, 21 Aug 2013 19:16:47 UTC" corrisponde al valore del timestamp 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 durante l'esecuzione del criterio. |
oauthv2accesstoken.{policy_name}.expires_in |
Il valore di scadenza del token, in secondi. Per ulteriori dettagli, consulta l'elemento <ExpiresIn>. |
Riferimento agli errori
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Thrown by operations |
|---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | The access token is expired. |
VerifyAccessToken |
steps.oauth.v2.access_token_not_approved |
401 | The access token was revoked. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | The requested resource does not exist any of the API products associated with the access token. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | The policy expected to find an access token in a variable specified in the
<AccessToken> element, but the variable could not be resolved. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | The policy expected to find an authorization code in a variable specified in the
<Code> element, but the variable could not be resolved. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | The policy expected to find the Client ID in a variable specified in the
<ClientId> element, but the variable could not be resolved. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | The policy expected to find a refresh token in a variable specified in the
<RefreshToken> element, but the variable could not be resolved. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | The policy expected to find a token in a variable specified in the
<Tokens> element, but the variable could not be resolved. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | The access token presented in the request has a scope that does not match the scope specified in the verify access token policy. To learn about scope, see Working with OAuth2 scopes. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | The access token sent from the client is invalid. | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
This error name is returned when the Note: It is recommended that you change existing fault rule
conditions to catch both the |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest |
400 | This error name is used for multiple different kinds of errors, typically for missing
or incorrect parameters sent in the request. If <GenerateResponse> is
set to false, use fault variables (described below) to retrieve details about
the error, such as the fault name and cause. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | The authorization header does not have the word "Bearer", which is required. For
example: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 |
The API proxy is not in the Product associated with the access token. Tips: Be sure that the product associated with the access token is configured correctly. For example, if you use wildcards in resource paths, be sure the wildcards are being used correctly. See Create API products for details. See also this Apigee Community post for more guidance on causes for this error. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
This error name is returned when the |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | The policy must specify either an access token or an authorization code, but not both. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | The <Tokens>/<Token> element requires you to specify the token
type (for example, refreshtoken). If the client passes the wrong type, this
error is thrown. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | The response type is token, but no grant types are specified. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
The client specified a grant type that is unsupported by the policy (not listed in the <SupportedGrantTypes> element). Note: There is currently a bug where unsupported grant type errors are not thrown correctly. If an unsupported grant type error occurs, the proxy does not enter the Error Flow, as expected. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause |
|---|---|
InvalidValueForExpiresIn |
For the |
InvalidValueForRefreshTokenExpiresIn |
For the <RefreshTokenExpiresIn> element, valid values are positive
integers and -1. |
InvalidGrantType |
An invalid grant type is specified in the <SupportedGrantTypes>
element. See the policy reference for a list of valid types. |
ExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support expiration. For example, the VerifyToken operation does not. |
RefreshTokenExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support refresh token expiration. For example, the VerifyToken operation does not. |
GrantTypesNotApplicableForOperation |
Be sure that the grant types specified in <SupportedGrantTypes> are supported for the specified operation. |
OperationRequired |
You must specify an operation in this policy using the Note: If the |
InvalidOperation |
You must specify a valid operation in this policy using the
Note: If the |
TokenValueRequired |
You must specify a token <Token> value in the
<Tokens> element. |
Fault variables
These variables are set when this policy triggers an error at runtime.
<GenerateResponse> is set to
false. If <GenerateResponse> is
true, the policy returns a response to the client immediately if an error occurs --
the error flow is skipped and these variables are not populated. For more information, see
What you need to
know about policy errors.| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name = "InvalidRequest" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest
Note: For the VerifyAccessToken operation, the fault name includes this suffix: |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
Example error response
These responses are sent back to the client if the <GenerateResponse>
element is true.
errorcode part of the error response. Do not rely on the text in the
faultstring, because it could change.If <GenerateResponse> is true, the policy returns errors
in this format for operations that generate tokens and codes. For a complete list, see see
OAuth HTTP error
response reference.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}If <GenerateResponse> is true, the policy returns errors
in this format for verify and validate operations. For a complete list, see see OAuth HTTP error
response reference.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
Example fault rule
<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 delle norme
Ogni tipo di policy è definito da uno schema XML (.xsd). Per riferimento, gli schemi delle policy sono disponibili su GitHub.
Utilizzo della configurazione OAuth predefinita
Ogni organizzazione (anche un'organizzazione di prova senza costi) su Apigee Edge viene sottoposta al provisioning con un endpoint del token OAuth. L'endpoint è preconfigurato con le policy nel proxy API denominato oauth. Puoi iniziare a utilizzare l'endpoint token non appena crei un account su Apigee Edge. Per maggiori dettagli, vedi Informazioni sugli endpoint OAuth.
Eliminazione dei token di accesso
Per impostazione predefinita, i token OAuth2 vengono eliminati dal sistema Apigee Edge 3 giorni (259.200 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 dopo 3 giorni dei token scaduti si applica a Edge per il cloud privato 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, che non si applicano ai token generati in precedenza.
- Apri questo file per modificarlo:
/opt/apigee/customer/application/message-processor.properties
- Aggiungi la seguente proprietà per impostare il numero di secondi di attesa prima di eliminare un token
dopo la scadenza:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Riavvia il processore di messaggi. Ad esempio:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn> e
<RefreshTokenExpiresIn>.
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.
-
Imposta valori positivi per gli attributi
<ExpiresIn>e<RefreshTokenExpiresIn>nel criterio OAuthV2. I valori sono in millisecondi. Ad esempio:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
Esegui nuovamente il deployment del proxy.
-
Utilizza questa API per aggiornare le proprietà di eliminazione dei token per la tua organizzazione:
POST https://<host-name>/v1/organizations/<org-name>
Payload:
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization> -
Riavvia il processore di messaggi. Ad esempio:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Questa API imposta la proprietà di eliminazione dei token su true per l'organizzazione denominata AutomationOrganization. In questo caso, il token di accesso verrà eliminato dal database 120 secondi dopo la scadenza sia del token che del token di aggiornamento.
Comportamento non conforme alla normativa RFC
La policy OAuthV2 restituisce una risposta del token che contiene determinate proprietà non conformi alla RFC. La tabella seguente mostra le proprietà non conformi restituite dal criterio OAuthV2 e le proprietà conformi corrispondenti.
| Restituisce OAuthV2: | La proprietà conforme a 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" : "InvalidRequest", "Error" :"Refresh Token expired"}Tuttavia, la risposta conforme alla RFC è:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}