Norme di GetOAuthV2Info

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 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>

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

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. The error names shown below are the strings that are assigned to the fault.name variable when an error occurs. See the Fault variables section below for more details.

Fault code HTTP status Cause
steps.oauth.v2.access_token_expired 500 The access token sent to the policy is expired.
steps.oauth.v2.authorization_code_expired 500 The authorization code sent to the policy is expired.
steps.oauth.v2.invalid_access_token 500 The access token sent to the policy is invalid.
steps.oauth.v2.invalid_client-invalid_client_id 500 The client ID sent to the policy is invalid.
steps.oauth.v2.invalid_refresh_token 500 The refresh token sent to the policy is invalid.
steps.oauth.v2.invalid_request-authorization_code_invalid 500 The authorization code sent to the policy is invalid.
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound 401 Please see this Apigee Community post for information about troubleshooting this error.
steps.oauth.v2.refresh_token_expired 500 The refresh token sent to the policy is expired.

Deployment errors

Refer to the message reported in the UI for information about deployment errors.

Fault variables

These variables are set when this policy triggers an error at runtime.

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 Matches "IPDeniedAccess"
oauthV2.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. oauthV2.GetTokenInfo.failed = true
oauthV2.policy_name.fault.name policy_name is the user-specified name of the policy that threw the fault. oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2.policy_name.fault.cause policy_name is the user-specified name of the policy that threw the fault. oauthV2.GetTokenInfo.cause = ClientID is Invalid

Example error response

{  
   "fault":{  
      "faultstring":"ClientId is Invalid",
      "detail":{  
         "errorcode":"keymanagement.service.invalid_client-invalid_client_id"
      }
   }
}

Example fault rule

<FaultRule name="OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientIdResponse</Name>
    </Step>
    <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>

Argomenti correlati