Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Versione: 2.0.0
Esegui l'autenticazione con Google per accedere alle API di Google che hai specificato.
Utilizza questa estensione per ottenere un token (OAuth o JWT) per i servizi Google Cloud, quindi utilizza il token per le chiamate successive all'API Google, ad esempio utilizzando un criterio ServiceCallout.
Ad esempio, in un proxy API potresti ottenere un token con questa estensione, memorizzarlo nella cache utilizzando il criterio PopulateCache, quindi passarlo utilizzando il criterio ServiceCallout per accedere ai servizi Google Cloud dall'interno di un flusso proxy API.
Prerequisiti
Questo contenuto fornisce un riferimento per la configurazione e l'utilizzo di questa estensione. Prima di utilizzare l'estensione da un proxy API utilizzando il criterio ExtensionCallout, devi:
Assicurarti che l'account che verrà utilizzato dall'estensione, ovvero l'account rappresentato dall'account di servizio che utilizzerai per le credenziali, abbia accesso ai servizi Google Cloud con cui l'estensione eseguirà l'autenticazione.
Utilizzare la console Google Cloud per generare una chiave per l'account di servizio.
Utilizzare i contenuti del file JSON della chiave dell'account di servizio risultante quando aggiungi e configuri l'estensione utilizzando il riferimento di configurazione.
Informazioni sull'autenticazione con Google Cloud
Questa estensione richiede l'autenticazione da Google Cloud rappresentando un membro specifico definito nel tuo progetto Google Cloud. Quando configuri questa estensione, utilizzi il file JSON dell'account di servizio del membro del progetto.
Di conseguenza, questa estensione avrà accesso solo alle risorse per le quali il membro ha l'autorizzazione. In altre parole, l'autenticazione riuscita di questa estensione dipende dalla corrispondenza tra le autorizzazioni concesse nella console Google Cloud e l'accesso richiesto dall'estensione (tramite ambiti o pubblico) in fase di runtime.
In genere, i passaggi per l'autenticazione per l'accesso alle API da questa estensione sono i seguenti:
Assicurati che l'account di servizio del membro rappresentato da questa estensione abbia accesso alla risorsa Google a cui vuoi accedere. Puoi utilizzare la pagina Cloud Identity and Access Management (Cloud IAM) nella console Google Cloud per assegnare ruoli al membro del progetto rappresentato da questa estensione.
Utilizza il file JSON della chiave dell'account di servizio di quel membro quando configuri questa estensione.
Quando configuri un criterio ExtensionCallout per utilizzare questa estensione, richiedi l'autenticazione solo per le risorse a cui il membro del progetto ha accesso.
Esempi
Gli esempi seguenti illustrano come eseguire l'autenticazione con Google Cloud utilizzando il criterio ExtensionCallout.
Ottenere un token di accesso
Nell'esempio seguente, l'azione getOauth2AccessToken dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-Access-Token">
<DisplayName>Get Access Token</DisplayName>
<Connector>google-auth</Connector>
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
<Output>google.credentials</Output>
</ConnectorCallout>
Il valore di risposta è simile al seguente:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
Il seguente criterio AssignMessage recupera il valore di risposta dal criterio ExtensionCallout e lo copia nel payload della risposta. Questa operazione può essere utile per il debug. In pratica, potresti non voler restituire il token al client.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Retrieve-Auth-Token">
<DisplayName>Retrieve Auth Token</DisplayName>
<AssignTo type="response" createNew="false"/>
<Set>
<Payload contentType="application/json">{google.credentials.access_token}</Payload>
</Set>
</AssignMessage>
Memorizzare nella cache un token di accesso
Per evitare di effettuare chiamate non necessarie per recuperare un token, valuta la possibilità di memorizzare nella cache il token ricevuto. Per le chiamate successive che richiedono un token, il recupero del token dalla cache di Apigee Edge sarà più veloce rispetto all'ottenimento di un nuovo token. Quando il token memorizzato nella cache scade, recupera un nuovo token e aggiorna la cache con questo.
Il seguente codice di un proxy API di esempio illustra come impostare e utilizzare un token memorizzato nella cache per chiamare l'API Google Translation con un criterio ServiceCallout. Ogni esempio di codice qui riportato si riferisce a un criterio diverso nel flusso.
I seguenti criteri vengono eseguiti nella sequenza descritta dal seguente XML di flusso:
<Request>
<!-- Attempt to get a token from the cache. -->
<Step>
<Name>Get-Cached-Auth-Token</Name>
</Step>
<!-- Only execute the following ExtensionCallout policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Google-Auth-Callout</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Only execute the following PopulateCache policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Cache-Auth-Token</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Use the ServiceCallout policy to call the translate API. -->
<Step>
<Name>Translate-Text</Name>
</Step>
</Request>
Il seguente criterio LookupCache tenta di ottenere un token dalla cache. Se il token è già stato ottenuto e memorizzato nella cache, questo criterio lo recupererà per l'utilizzo da parte del proxy API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <LookupCache async="false" continueOnError="false" enabled="true" name="Get-Cached-Auth-Token"> <DisplayName>Get Cached Auth Token</DisplayName> <!-- Give cache key and scope to specify the entry for the cached token. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <!-- Assign the retrieved token (if any) to a variable, where it can be retrieved by policies. --> <AssignTo>cloud.translation.auth.token</AssignTo> </LookupCache>Se la ricerca nella cache non recupera un token memorizzato nella cache, il seguente criterio ExtensionCallout recupera un nuovo token OAuth, specificando l'API Google Cloud Translation come ambito del token. Google Cloud restituisce un token valido se le credenziali dell'account di servizio utilizzate durante la configurazione dell'estensione
Google-Auth-Calloutrappresentano un membro del progetto che ha accesso all'API.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ConnectorCallout async="false" continueOnError="true" enabled="true" name="Google-Auth-Callout"> <DisplayName>Google-Auth-Callout</DisplayName> <Connector>example-auth-extension</Connector> <Action>getOauth2AccessToken</Action> <Input><![CDATA[{ "scope" : ["https://www.googleapis.com/auth/cloud-translation"] }]]></Input> <Output parsed="false">cloud.translation.auth.token</Output> </ConnectorCallout>Dopo che il criterio ExtensionCallout ha recuperato un nuovo token, il criterio PopulateCache lo memorizza nella cache per un utilizzo successivo da parte dei criteri nel proxy API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <PopulateCache async="false" continueOnError="false" enabled="true" name="Cache-Auth-Token"> <DisplayName>Cache Auth Token</DisplayName> <Properties/> <!-- Set cache key information to specify a unique key for this entry. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutInSec>5</TimeoutInSec> </ExpirySettings> <!-- Get the token to cache from the variable where the ExtensionCallout put it. --> <Source>cloud.translation.auth.token</Source> </PopulateCache>
Azioni
getOauth2AccessToken
Ottiene un token di accesso OAuth 2.0. Utilizza questa azione per supportare OAuth a due vie tra il proxy API e le API di Google quando le API di Google richiedono un token OAuth.
In OAuth a due vie, questa azione di estensione recupera un token OAuth eseguendo l'autenticazione con Google utilizzando un file JSON del service account (aggiungi il file JSON quando configuri questa estensione). Una volta recuperato il token OAuth, il proxy API può utilizzarlo per effettuare chiamate alle API di Google, chiamando effettivamente le API per conto dell'account di servizio Google.
L'accesso alle API Google Cloud viene filtrato tramite gli ambiti elencati in Ambiti OAuth 2.0 per le API di Google.
Per ulteriori informazioni sulle interazioni da server a server con OAuth 2.0, consulta Utilizzo di OAuth 2.0 per applicazioni da server a server
Sintassi
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
Esempio
Nell'esempio seguente, l'azione getOauth2AccessToken dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
Parametri di richiesta
| Parametro | Descrizione | Tipo | Predefinito | Obbligatorio |
|---|---|---|---|---|
| ambito | Un array di ambiti OAuth 2.0. Per ulteriori informazioni sugli ambiti, consulta Ambiti OAuth 2.0 per le API di Google. | Array | ["https://www.googleapis.com/auth/cloud-platform"], che concede l'accesso a tutte le API a cui il service account ha accesso. |
No. |
Risposta
Un oggetto contenente il token di accesso, il relativo tipo e la relativa data di scadenza nel seguente formato:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Proprietà della risposta
| Parametro | Descrizione | Predefinito | Obbligatorio |
|---|---|---|---|
| accessToken | Token di accesso OAuth 2.0. | Nessuno | Sì |
| tokenType | Tipo di token. | Canale di trasporto | Sì |
| expiresInSec | Numero di secondi prima della scadenza del token. | 3600 | Sì |
getJWTAccessToken
Ottiene un token di accesso JWT (JSON Web Token). Puoi utilizzare questo token per eseguire l'autenticazione con le API di Google se l'API che vuoi chiamare ha una definizione di servizio pubblicata nel repository GitHub delle API di Google.
Con alcune API di Google, puoi effettuare chiamate API autorizzate utilizzando direttamente un JWT firmato come token di accesso, anziché un token di accesso OAuth 2.0. Quando è possibile, puoi evitare di dover effettuare una richiesta di rete al server di autorizzazione di Google prima di effettuare una chiamata API.
Per ulteriori informazioni sull'autenticazione con un token di accesso JWT, consulta Utilizzo di OAuth 2.0 per applicazioni da server a server.
Sintassi
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
Esempio: URL di Cloud Functions
Nell'esempio seguente, l'azione getOauth2AccessToken dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
Esempio: ID client protetto da Cloud IAP
Nell'esempio seguente, l'azione getOauth2AccessToken dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Parametri di richiesta
| Parametro | Descrizione | Predefinito | Obbligatorio |
|---|---|---|---|
| pubblico | Destinatario previsto del token. Può includere un ID client protetto da Cloud IAP, un URL di Cloud Functions. | Nessuno | Sì |
Risposta
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Proprietà della risposta
| Parametro | Descrizione | Predefinito | Obbligatorio |
|---|---|---|---|
| accessToken | Token di accesso. | Nessuno | Sì |
| tokenType | Tipo di token. | Canale di trasporto | Sì |
| expiresInSec | Scadenza in secondi. | 3600 | Sì |
Riferimento di configurazione
Utilizza le seguenti informazioni quando configuri e implementi questa estensione per l'utilizzo nei proxy API. Per i passaggi per configurare un'estensione utilizzando la console Apigee, vedi Aggiungere e configurare un'estensione.
Proprietà comuni dell'estensione
Per ogni estensione sono presenti le seguenti proprietà.
| Proprietà | Descrizione | Predefinito | Obbligatorio |
|---|---|---|---|
name |
Il nome che assegni a questa configurazione dell'estensione. | Nessuno | Sì |
packageName |
Nome del pacchetto dell'estensione fornito da Apigee Edge. | Nessuno | Sì |
version |
Numero di versione del pacchetto dell'estensione da cui stai configurando un'estensione. | Nessuno | Sì |
configuration |
Valore di configurazione specifico per l'estensione che stai aggiungendo. Vedi Proprietà per questo pacchetto di estensioni | Nessuno | Sì |
Proprietà per questo pacchetto di estensioni
Specifica i valori per le seguenti proprietà di configurazione specifiche per questa estensione.
| Proprietà | Descrizione | Predefinito | Obbligatorio |
|---|---|---|---|
| credenziali | Se inserito nella console Apigee Edge, questo è l'intero contenuto del file JSON della chiave dell'account di servizio. Se inviato utilizzando l'API Management, è un valore codificato in base64 generato dall'intero file JSON della chiave dell'account di servizio. | Nessuno | Sì |