Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Cosa
Recupera gli attributi dei token di accesso, dei token di aggiornamento, dei codici di autorizzazione e degli attributi dell'app client e popola le variabili con i valori di questi attributi.
Questa policy è utile quando devi configurare un comportamento dinamico e condizionale in base a un valore in un token o in un codice di autorizzazione. Ogni volta che viene eseguita la convalida del token, le variabili vengono popolate automaticamente con i valori degli attributi del token. Tuttavia, nei casi in cui la convalida del token non è stata eseguita, puoi utilizzare questa funzionalità per popolare esplicitamente le variabili con i valori degli attributi di un token. Vedi anche Personalizzazione di token e codici di autorizzazione.
Un token di accesso che passi a questa policy deve essere valido, altrimenti la policy genererà un
invalid_access_token errore.
Esempi
Gli esempi seguenti utilizzano la policy Get OAuth V2 Info per recuperare informazioni su vari componenti del flusso di lavoro OAuth2 e quindi accedere a queste informazioni all'interno del codice.
Token di accesso
Per ottenere un riferimento a un token di accesso, utilizza l'elemento <AccessToken> nella policy.
L'esempio seguente prevede di trovare il token di accesso in un parametro di query denominato "access_token" (i dettagli di implementazione effettivi dipendono da te):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
Dato il token di accesso, la policy cerca il profilo del token e popola un insieme di variabili con i dati del profilo.
Puoi quindi accedere alle variabili utilizzando JavaScript o un altro mezzo. L'esempio seguente recupera gli ambiti associati al token di accesso utilizzando JavaScript:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
Tieni presente che per accedere a queste variabili nel codice, devi anteporre "oauthv2accesstoken". Per un elenco completo delle variabili disponibili tramite il token di accesso, consulta Variabili del token di accesso.
Codice di autorizzazione
Per ottenere gli attributi del codice di autorizzazione, utilizza l'elemento <AuthorizationCode>
nella policy.
L'esempio seguente prevede di trovare il token di accesso in un parametro del modulo denominato "code" (i dettagli di implementazione effettivi dipendono da te):
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
Dato il codice di autorizzazione, la policy cerca le informazioni del codice e popola un insieme di variabili con i dati del codice di autorizzazione.
Puoi quindi accedere alle variabili utilizzando JavaScript o un altro mezzo. L'esempio seguente recupera un attributo personalizzato associato al codice di autorizzazione utilizzando JavaScript:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
Tieni presente che per accedere a queste variabili nel codice, devi anteporre "oauthv2authcode". Per un elenco completo delle variabili disponibili tramite il codice di autorizzazione, consulta Variabili del codice di autorizzazione.
Token di aggiornamento
Per ottenere gli attributi del token di aggiornamento, utilizza l'elemento <RefreshToken> nella tua
policy.
L'esempio seguente prevede di trovare il token di accesso in un parametro di query denominato "refresh_token" (i dettagli di implementazione effettivi dipendono da te):
<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy"> <RefreshToken ref="request.queryparam.refresh_token"/> </GetOAuthV2Info>
Dato il token di aggiornamento, la policy cerca le informazioni del token di aggiornamento e popola un insieme di variabili con i dati del token di aggiornamento.
Puoi quindi accedere a queste variabili utilizzando JavaScript o un altro mezzo. L'esempio seguente recupera un attributo personalizzato associato al token di aggiornamento utilizzando JavaScript:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
Tieni presente che per accedere alle variabili nel codice, devi anteporre "oauthv2refreshtoken". Per un elenco completo delle variabili disponibili tramite il token di aggiornamento, consulta Variabili del token di aggiornamento.
Statico
In alcuni rari casi, potrebbe essere necessario ottenere il profilo di un token configurato staticamente (uno che non è accessibile tramite una variabile). Puoi farlo fornendo il valore del token di accesso come elemento.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
Puoi farlo anche con tutti gli altri tipi di token (ID client, codice di autorizzazione e token di aggiornamento ).
ID client
Questo esempio mostra come recuperare informazioni sull'app client utilizzando l'ID client.
Al momento dell'esecuzione, la policy popola un insieme di variabili con le informazioni del client. In questo
caso, la policy prevede di trovare l'ID client in un parametro di query
denominato client_id. Dato l'ID client, la policy cerca il profilo del client e popola un insieme di variabili con i dati del profilo. Le variabili avranno il
prefisso con oauthv2client.
<GetOAuthV2Info name="GetClientAttributes"> <ClientId ref="request.queryparam.client_id"></ClientId> </GetOAuthV2Info>
Puoi quindi accedere alle variabili utilizzando JavaScript o un altro mezzo. Ad esempio, per ottenere il nome dell'app sviluppatore e l'indirizzo email dello sviluppatore associati all'app client utilizzando JavaScript:
context.getVariable("oauthv2client.GetClientAttributes.developer.email");
context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");Riferimento elemento
Il riferimento all'elemento descrive gli elementi e gli attributi della policy GetOAuthV2Info.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="GetOAuthV2Info-1" <DisplayName>Get OAuth v2.0 Info 1</DisplayName> <AccessToken ref="variable"></AccessToken> <AuthorizationCode ref="variable"></AuthorizationCode> <ClientId ref="variable"></ClientId> <RefreshToken ref="variable"></RefreshToken> </GetOAuthV2Info>
Attributi <GetOAuthV2Info>
<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="Get-OAuth-v20-Info-1">
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>
Recupera il profilo di un token di accesso. Passa una variabile che contiene la stringa del token di accesso o una stringa del token letterale (caso raro). In questo esempio, il token di accesso viene recuperato da un parametro di query passato in una richiesta. Utilizza l'elemento <IgnoreAccessTokenStatus> se vuoi restituire informazioni per un token revocato o scaduto.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
|
Valore predefinito: |
request.formparam.access_token (un valore x-www-form-urlencoded specificato nel corpo della richiesta ) |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: |
Una variabile di flusso contenente una stringa del token di accesso o una stringa letterale. |
Elemento <AuthorizationCode>
Recupera il profilo di un codice di autorizzazione. Passa una variabile che contiene la stringa del codice di autorizzazione o una stringa del token letterale (caso raro). In questo esempio, il codice di autorizzazione viene recuperato da un parametro di query passato in una richiesta. Per un elenco delle variabili popolate da questa operazione, consulta "Variabili di flusso".
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
|
Valore predefinito: |
request.formparam.access_token (un valore x-www-form-urlencoded specificato nel corpo della richiesta ) |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: |
Una variabile di flusso contenente una stringa del codice di autorizzazione o una stringa letterale. |
Elemento <ClientId>
Recupera le informazioni relative a un ID client. In questo esempio, l'ID client viene recuperato da un parametro di query passato in una richiesta. Per un elenco delle variabili popolate da questa operazione, consulta "Variabili di flusso".
<ClientId ref="request.queryparam.client_id"></ClientId>|
Valore predefinito: |
request.formparam.access_token (un valore x-www-form-urlencoded specificato nel corpo della richiesta ) |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: | Una variabile di flusso contenente una stringa del codice di autorizzazione o una stringa letterale. |
Elemento <IgnoreAccessTokenStatus>
Restituisce le informazioni sul token anche se il token è scaduto o è stato revocato. Questo elemento può essere utilizzato solo con i token di accesso. Per impostazione predefinita, le informazioni per altre entità come i token di aggiornamento e i codici di autorizzazione vengono restituite indipendentemente dal loro stato.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
|
Valore predefinito: |
false |
|
Presenza: |
Facoltativo |
| Tipo: | Booleano |
| Valori validi: | true o false |
Elemento <RefreshToken>
Recupera il profilo di un token di aggiornamento. Passa una variabile che contiene la stringa del token di aggiornamento o una stringa del token letterale (caso raro). In questo esempio, il token di aggiornamento viene recuperato da un parametro di query passato in una richiesta. Per un elenco delle variabili popolate da questa operazione, consulta "Variabili di flusso".
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
|
Valore predefinito: |
request.formparam.access_token (un valore x-www-form-urlencoded specificato nel corpo della richiesta ) |
|
Presenza: |
Facoltativo |
| Tipo: | Stringa |
| Valori validi: |
Una variabile di flusso contenente una stringa del token di aggiornamento o una stringa letterale. |
Variabili di flusso
La policy GetOAuthV2Info popola queste variabili e viene in genere utilizzata nei casi in cui sono necessari i dati del profilo, ma non è ancora stata eseguita una concessione o una convalida. .
Variabili dell'ID client
Queste variabili vengono popolate quando viene impostato l'elemento ClientId:
oauthv2client.{policy_name}.client_id
oauthv2client.{policy_name}.client_secret
oauthv2client.{policy_name}.redirection_uris // Note the spelling -- 'redirection_uris'
oauthv2client.{policy_name}.developer.email
oauthv2client.{policy_name}.developer.app.name
oauthv2client.{policy_name}.developer.id
oauthv2client.{policy_name}.{developer_app_custom_attribute_name}Variabili del token di accesso
Queste variabili vengono popolate quando viene impostato l'elemento AccessToken:
oauthv2accesstoken.{policy_name}.developer.id oauthv2accesstoken.{policy_name}.developer.app.name oauthv2accesstoken.{policy_name}.developer.app.id oauthv2accesstoken.{policy_name}.developer.email oauthv2accesstoken.{policy_name}.organization_name oauthv2accesstoken.{policy_name}.api_product_list oauthv2accesstoken.{policy_name}.access_token oauthv2accesstoken.{policy_name}.scope oauthv2accesstoken.{policy_name}.expires_in //in seconds oauthv2accesstoken.{policy_name}.status oauthv2accesstoken.{policy_name}.client_id oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2accesstoken.{policy_name}.refresh_token oauthv2accesstoken.{policy_name}.refresh_token_status oauthv2accesstoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2accesstoken.{policy_name}.refresh_count oauthv2accesstoken.{policy_name}.refresh_token_issued_at oauthv2accesstoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Variabili del codice di autorizzazione
Queste variabili vengono popolate quando viene impostato l'elemento AuthorizationCode:
oauthv2authcode.{policy_name}.code
oauthv2authcode.{policy_name}.scope
oauthv2authcode.{policy_name}.redirect_uri
oauthv2authcode.{policy_name}.client_id
oauthv2authcode.{policy_name}.{auth_code_custom_attribute_name}Variabili del token di aggiornamento
Queste variabili vengono popolate quando viene impostato l'elemento RefreshToken:
oauthv2refreshtoken.{policy_name}.developer.id oauthv2refreshtoken.{policy_name}.developer.app.name oauthv2refreshtoken.{policy_name}.developer.app.id oauthv2refreshtoken.{policy_name}.developer.email oauthv2refreshtoken.{policy_name}.organization_name oauthv2refreshtoken.{policy_name}.api_product_list oauthv2refreshtoken.{policy_name}.access_token oauthv2refreshtoken.{policy_name}.scope oauthv2refreshtoken.{policy_name}.expires_in //in seconds oauthv2refreshtoken.{policy_name}.status oauthv2refreshtoken.{policy_name}.client_id oauthv2refreshtoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2refreshtoken.{policy_name}.refresh_token oauthv2refreshtoken.{policy_name}.refresh_token_status oauthv2refreshtoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2refreshtoken.{policy_name}.refresh_count oauthv2refreshtoken.{policy_name}.refresh_token_issued_at oauthv2refreshtoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Schema
Ogni tipo di policy è definito da uno schema XML (.xsd). Per riferimento, gli schemi delle policy
sono disponibili su GitHub.
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito. I nomi degli errori mostrati di seguito sono le stringhe
assegnate alla variabile fault.name quando si verifica un errore. Vedi il problema
di seguito per maggiori dettagli.
| Codice di errore | Stato HTTP | Causa |
|---|---|---|
steps.oauth.v2.access_token_expired |
500 | Il token di accesso inviato al criterio è scaduto. |
steps.oauth.v2.authorization_code_expired |
500 | Il codice di autorizzazione inviato al criterio è scaduto. |
steps.oauth.v2.invalid_access_token |
500 | Il token di accesso inviato al criterio non è valido. |
steps.oauth.v2.invalid_client-invalid_client_id |
500 | L'ID client inviato al criterio non è valido. |
steps.oauth.v2.invalid_refresh_token |
500 | Il token di aggiornamento inviato al criterio non è valido. |
steps.oauth.v2.invalid_request-authorization_code_invalid |
500 | Il codice di autorizzazione inviato al criterio non è valido. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 | Vedi questo post della community Apigee per informazioni su come risolvere questo errore. |
steps.oauth.v2.refresh_token_expired |
500 | Il token di aggiornamento inviato al criterio è scaduto. |
Errori di deployment
Per informazioni sugli errori di deployment, fai riferimento al messaggio riportato nell'interfaccia utente.
Variabili di errore
Queste variabili vengono impostate quando il criterio attiva un errore in fase di runtime.
| Variabili | Dove | Esempio |
|---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è l'ultima parte del codice di errore. | fault.name Matches "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Esempio di risposta di errore
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
Esempio di regola di errore
<FaultRule name="OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientIdResponse</Name>
</Step>
<Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>